47、操作服务插件,AfterExecuteOperationTransaction事务结束后事件原创
20人赞赏了该文章
1.6万次浏览
编辑于2020年07月12日 19:46:07
摘要由AI智能服务提供
该文本描述了在一个基于Kingdee BOS平台的系统中,如何通过编写一个自定义的插件(OnAddValidatorsHead类)来实现采购订单审核后自动生成下游单据(收料通知单)的功能。插件通过重写AfterExecuteOperationTransaction方法,在操作事务结束后,读取采购订单及其分录,根据预设的转换规则生成收料通知单,并保存到数据库中。此外,文本还提到了BOS扩展中对收料通知单的设置,包括必录项的设置以及可能因设置导致的自动生成失败情况。文本最后提供了关于AfterExecuteOperationTransaction事件的详细说明,包括其触发时机、数据库处理的独立性和对原操作的影响。
业务场景:采购订单审核后,自动生成下游单据,收料通知单
1、删除上一节代码,继续到红框写
2、
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Kingdee.BOS; using Kingdee.BOS.Core; //服务端 using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; //校验器 using Kingdee.BOS.Core.Validation; using System.ComponentModel; using System.Data; using Kingdee.BOS.App.Data; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata.FormElement; using System.ComponentModel.Composition; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.List; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; using Kingdee.BOS.Core.DynamicForm.Operation; using Kingdee.BOS.Orm; using Kingdee.BOS.Core.Metadata; namespace Kingdee.Bos.Test.ServicePlugln { [Description("校验器")] [Kingdee.BOS.Util.HotUpdate] //继承操作服务插件 public class OnAddValidatorsHead : AbstractOperationServicePlugIn { public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); int i; //读取全部的单据,for循环,转换成DynamicObject类型 foreach(DynamicObject entity in e.DataEntitys) { //如果不为空,开始循环 if(entity != null) { //单据转换,上游单据是什么,下游单据是什么 var rules = ConvertServiceHelper.GetConvertRules(this.Context, "PUR_PurchaseOrder", "PUR_ReceiveBill"); //默认的单据转换 var rule = rules.FirstOrDefault(t => t.IsDefault); //获取每个单据体,获取分录ID,判断是哪一行 DynamicObjectCollection entry = (DynamicObjectCollection)entity["POOrderEntry"]; i = 0; ConvertOperationResult operationResult = null; ListSelectedRow[] selectedRows = new ListSelectedRow[entry.Count]; //把选中的单据体ID,循环,全部读取出来 foreach(DynamicObject HHentity in entry) { selectedRows[i] = new ListSelectedRow(Convert.ToString(entity["id"]), Convert.ToString(HHentity["id"]), i,"PUR_PurchaseOrder"); i++; } Dictionary<string, object> custParams = new Dictionary<string, object>(); //下推事件 PushArgs pushArgs = new PushArgs(rule, selectedRows) { //标准发货通知单 // 请设定目标单据单据类型。如无单据类型,可以空字符 TargetBillTypeId = "", // 请设定目标单据主业务组织。如无主业务组织,可以为0 TargetOrgId = 0, // 可以传递额外附加的参数给单据转换插件,如无此需求,可以忽略 CustomParams = custParams, }; operationResult = ConvertServiceHelper.Push(this.Context, pushArgs, OperateOption.Create()); // 获取生成的目标单据数据包 DynamicObject[] objs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray(); // 读取目标单据元数据 var targetBillMeta = MetaDataServiceHelper.Load(this.Context, "PUR_ReceiveBill") as FormMetadata; OperateOption saveOption = OperateOption.Create(); // 忽略全部需要交互性质的提示,直接保存;调用保存事件 var saveResult = BusinessDataServiceHelper.Save(this.Context, targetBillMeta.BusinessInfo, objs, saveOption, "Save"); } } } } }
AfterExecuteOperationTransaction事件
说明:
操作执行后,事务结束后
1. 此事件在操作执行后,操作的内部逻辑已经执行完毕;
2. 此事件在操作事务提交之后;
3. 此事件中的数据库处理,不受操作的事务保护
4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
3、最终效果,采购订单审核后,自动生成下游单据,收料通知单
4、BOS扩展收料通知单,设置收料部门必录,重新审核采购审核,无法自动生成收料通知单;
AfterExecuteOperationTransaction事件
3. 此事件中的数据库处理,不受操作的事务保护
4. 通常此事件,也可以做同步数据,但是此同步数据的成功与否,不需影响操作
即不管是否自动下推事件执行成功,审核操作服务继续执行成功;
总目录链接
https://vip.kingdee.com/article/64993872014591232
47.zip(18.91KB)
赞 20
20人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!