二开案例.服务插件.反审核时获取工作流流程状态

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.服务插件.反审核时获取工作流流程状态

【应用场景】

 反审核时获取工作流流程状态。

反审核有以下两种执行场景:

<1>流程管理中心,终止且反审核(流程相关)。

<2>流程处理人在待办任务处理界面终止流程时,自动反审核(流程相关)

<3>已审核单据,执行反审核。


【案例演示】

 采购订单,反审核时获取工作流流程状态。

 

【实现步骤】

<1>编写服务插件,代码如下。 

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.App.PlugIn
{
    /// <summary>
    /// 【服务插件】反审核时获取工作流流程状态
    /// </summary>
    [Description("【服务插件】反审核时获取工作流流程状态"), HotUpdate]
    public class GetStatusOperationServicePlugIn : AbstractOperationServicePlugIn
    {
        public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
        {
            base.BeforeExecuteOperationTransaction(e);
            if (this.FormOperation.OperationId != 26)
            {
                return;
            }
            #region 方案1
            string[] ProcInstIds;
            if (this.Option.TryGetVariableValue("ProcInstIds", out ProcInstIds) && ProcInstIds != null && ProcInstIds.Length > 0)
            {
                // 当前单据的流程实例还在运行中
                // TODO
                e.Cancel = true;
                e.CancelMessage = "流程运行中,禁止反审核!";
                return;
            }
            return;
            #endregion
            #region 方案2
            var ids = e.SelectedRows.Select(o => "'" + o.DataEntity[0] + "'").ToArray();
            if (ids.Length == 0)
            {
                return;
            }
            // 查询当前单据的流程是否还在运行中
            var sql = string.Format(@"SELECT DISTINCT b.FKEYVALUE,a.FPROCINSTID FROM T_WF_PROCINST a 
JOIN T_WF_PIBIMAP b ON a.FPROCINSTID=b.FPROCINSTID AND b.FOBJECTTYPEID='{0}'
WHERE b.FKEYVALUE IN ({1}) AND a.FSTATUS='2'", this.BusinessInfo.GetForm().Id, string.Join(",", ids));
            var objs = DBUtils.ExecuteDynamicObject(this.Context, sql);
            if (objs.Count > 0)
            {
                var dicPKIds = objs.Select(o => Convert.ToInt32(o[0])).Distinct().ToDictionary(o => o);
                foreach (var extendedDataEntity in e.SelectedRows)
                {
                    if (dicPKIds.ContainsKey(Convert.ToInt32(extendedDataEntity.DataEntity[0])))
                    {
                        // 当前单据的流程实例还在运行中
                        // TODO
                        e.Cancel = true;
                        e.CancelMessage = "流程运行中,禁止反审核!";
                        return;
                    }
                }
            }
            #endregion
        }
    }
}


 

<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。

 

 

<3>BOSIDE扩展采购订单,反审核操作注册服务插件,保存元数据,开发完毕。 

---------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.服务插件.反审核时获取工作流流程状态

【应用场景】 反审核时获取工作流流程状态。反审核有以下两种执行场景:<1>流程管理中心,终止且反审核(流程相关)。<2>流程处理人在待办...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息