操作插件之-AfterExecuteOperationTransaction事件,工作流服务插件原创
金蝶云社区-方宇康
方宇康
10人赞赏了该文章 2,443次浏览 未经作者许可,禁止转载编辑于2020年08月27日 15:10:03

1.用途

操作执行后(事务外)事件,在操作处理完毕,事务提交完毕后触发。
所以那种次业务不影响主流程的操作都可以放置在这个方法中。

2.备注

通常用于在操作完毕后,进行后续的处理,但因为操作的事务已经提交,不能够撤销操作。
如操作完毕后,修饰操作提示信息,使之更加人性化。

3.个人操作代码讲解

        /// <summary>
        /// 操作执行后,事务结束后
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;
        /// 2. 此事件在操作事务提交之后;
        /// 3. 此事件中的数据库处理,不受操作的事务保护
        /// 4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
        /// </remarks>
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);

            //工作流获取
            var activityCollection = this.Option.GetVariableValue<ObjectActivityInstanceCollection>(BOSConst.CST_KEY_WfActivityInstance, null);
            //非空判断
            if (activityCollection != null)
            {
                //获取领域模型元数据服务类实例 
                IMetaDataService metaService = ServiceFactory.GetMetaDataService(this.Context);

                IViewService viewService = ServiceFactory.GetViewService(this.Context);
                                
                //每个任务传入一个ObjectActivityInstance对象,批量审批任务时会传入多个对象                
                foreach (ObjectActivityInstance actRow in activityCollection)
                {
                    //获取当前处理人的信息(每个任务可能有多个处理人,所有处理人存储在ReceiverList属性中)                    
                    IActivityInstance actInstance = actRow.ActivityInstance;
                    //当前节点审批信息
                    var currentReceiver = actInstance.CurrentReceiver;

                    //根据节点ID把审批人等信息输出到相应字段上,比如一级审核节点                    
                    if (actInstance.ActivityDefineId == KEY_DataSynNodeId && currentReceiver != null)
                    {
                        //加载单据数据                    
                        FormMetadata rowMeta = metaService.Load(this.Context, actRow.ObjectFormId, true) as FormMetadata;
                        //获取销售订单关联所有数据
                        var rowData = viewService.LoadSingle(this.Context, actRow.ObjectKeyValue, rowMeta.BusinessInfo.GetDynamicObjectType());
                        //获取单据体分录信息
                        DynamicObjectCollection saleOrderEntries = rowData["SaleOrderEntry"] as DynamicObjectCollection;
                        //循环分录信息获取物料信息
                        foreach (var entityRow in saleOrderEntries)
                        { 
                            
                        }
                    }
                }
            }
        }

3.1.this.Option.GetVariableValue<>();
从选项中获取定义的值

3.2.ServiceFactory.GetMetaDataService(this.Context)
获取领域模型元数据服务类实例

3.3.ServiceFactory.GetViewService(this.Context);
获取对应业务对象的值

操作步骤:

  1. 获取工作流数据。

  2. 循环工作流获取指定流程节点的单据信息。

  3. 数据解析处理。

赞 10