46、操作服务插件,EndOperationTransaction事务结束前事件,更新价目表原创
14人赞赏了该文章
1.4万次浏览
编辑于2020年07月12日 18:24:41
业务场景:采购订单审核后,更新价目表
1、删除上一节代码,继续到红框写
2、加载 物料代码,含税单价,供应商
3、
//本节方法 public override void EndOperationTransaction(EndOperationTransactionArgs e) { //物料代码,含税单价,供应商 为0 long materialId = 0; long supplierId = 0; decimal taxPrice = 0; //定义一个list, List<string> sqlArray = new List<string>(); //循环所有的单据体 foreach(DynamicObject entity in e.DataEntitys) { if(entity != null) { //如果不为空,获取供应商supplierId_Id supplierId = Convert.ToInt64(entity["supplierId_Id"]); //获取单据体,for循环,分别提前 物料编码,含税单价 DynamicObjectCollection entry = (DynamicObjectCollection)entity["POOrderEntry"]; foreach(DynamicObject HHentity in entry) { materialId = Convert.ToInt64(HHentity["MaterialId_Id"]); taxPrice = Convert.ToDecimal(HHentity["TaxPrice"]); //更新采购价目表,把参数传过来 string sql = string.Format(@"update t_PUR_PriceListEntry set FTAXPRICE={2},FPRICE={3}/(1+FTAXRATE/100) where FENTRYID in (select FENTRYID from t_PUR_PriceListEntry t1 inner join t_PUR_PriceList t2 on t1.FID=t2.FID where t1.FMATERIALID={0} and t2.FSUPPLIERID={1} )", materialId.ToString(), supplierId.ToString(), taxPrice.ToString(), taxPrice.ToString()); sqlArray.Add(sql); } } } if(sqlArray.Count >0 ) { //批量执行 DBUtils.ExecuteBatch(this.Context, sqlArray, 100); } }
4、审核按钮,注册插件
EndOperationTransaction事件
说明:
操作执行后(事务内)事件,在操作处理完毕,未提交事务前触发。
此事件在事务内,对数据库进行的更新,受事务保护。
此事件适合于在操作执行完毕,单据数据已经更改,需要基于更改后的数据,进行其他关联数据的处理。
5、最终效果,采购订单审核后,更新价目表
采购订单审核之前,价目表1
采购订单填写价格2,审核后,价目表变成2
总目录链接
https://vip.kingdee.com/article/64993872014591232
46.zip(17.95KB)
推荐阅读