45.1、操作服务插件,BeginOperationTransaction,事务开始后事件原创
13人赞赏了该文章
1.2万次浏览
编辑于2020年07月12日 17:27:48
摘要由AI智能服务提供
本文描述了企业资源规划(ERP)系统中的业务逻辑处理过程,主要涉及采购订单和收料通知单的关系处理。当采购订单下推生成收料通知单后,若采购订单未审核,反审核采购订单将自动删除收料通知单;若收料通知单已审核,则反审核采购订单将失败。文章还详细说明了如何通过修改代码(如删除校验、设置事务属性等)和注册插件来实现这一业务逻辑,并提供了代码片段和最终效果的说明。
业务场景:
一、采购订单下推生成下游单据收料通知单后,收料通知单后保存状态,反审核采购订单,自动删除下游单据;
二、如果下游单据收料通知单已经审核,则采购订单不允许反审核,
删除下游单据 和 反审核 一方成功都成功,一方失败,都失败;
1、修改44.2代码,删除校验的代码
2、
public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e) { base.OnPrepareOperationServiceOption(e); //为了在BeginOperationTransaction里检查数据抛出异常时 //只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会 //循环为每一张单据创建事务调用操作 e.SupportTransaction = true; e.SurportBatchTransaction = false; }
3、
//本节事件 public override void BeginOperationTransaction(BeginOperationTransactionArgs e) { base.BeginOperationTransaction(e); DeleteBFReturnMtrlData(e.DataEntitys.ToList()); }
4、
//自定义类 private List<DynamicObject> DeleteBFReturnMtrlData(List<DynamicObject> dataEntitys) { List<DynamicObject> newEntitys = new List<DynamicObject>(); foreach(DynamicObject item in dataEntitys) { List<object> pkIds = new List<object>(); //for循环,判断ID object pkId = item["Id"]; pkIds.Add(pkId); IDeleteService delService = Kingdee.BOS.App.ServiceHelper.GetService<IDeleteService>(); //通过sql判断发货通知单T_PUR_ReceiveEntry_LK是否有关联的源单单号 string sqlselect = @"/*dialect*/select distinct t2.FID from T_PUR_ReceiveEntry_LK t1 inner join T_PUR_ReceiveEntry t2 on t1.FENTRYID=t2.FENTRYID where FSBILLID in (" + string.Join(",", pkIds.ToArray()) + ")"; dtTable = DBUtils.ExecuteDataSet(this.Context, sqlselect).Tables[0]; //如果有源单单号 if(dtTable.Rows.Count >0) { //获取dtTable有多少行 object[] InFid = new object[dtTable.Rows.Count]; //把获取的值加到一个数组里面 for(int x=0; x<dtTable.Rows.Count;x++) { InFid[x] = dtTable.Rows[x]["FID"]; } //需要删除的发货通知单InFid IOperationResult result = delService.Delete(this.Context,"PUR_ReceiveBill",InFid); if(!result.IsSuccess) { string returnMtrlBillNo = result.CustomMessageFormId; string billNo = item["BillNo"].ToString(); string strPkId = pkId.ToString(); string message = string.Format("发货通知有问题,请查看!", billNo, returnMtrlBillNo); throw new KDBusinessException("", message); ; } } newEntitys.Add(item); } return newEntitys; }
5、反审核按钮,注册插件
5.1、去掉标准产品校验,否则本例无法进行
BeginOperationTransaction事件
说明:
操作执行前,事务开始后事件
1. 此事件在操作校验之后
2. 此事件在操作事务开始之后
3. 此事件在操作执行代码之前
4. 此事件中的数据库处理,受操作的事务保护
5. 通常此事件,可以用来做数据准备,在操作之前,提前写数据到库
6、最终效果,采购订单,下推收料通知单,收料通知单保存;
6.1、然后反审核采购订单,提示成功,自动同步删除下游收料通知单;
6.2、如果收料通知单已审核,则反审核采购订单失败
总目录链接
https://vip.kingdee.com/article/64993872014591232
45.1.zip(18.75KB)
赞 13
13人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!