46、操作服务插件,EndOperationTransaction事务结束前事件,更新价目表原创
金蝶云社区-林荫大道cc
林荫大道cc
14人赞赏了该文章 11260次浏览 未经作者许可,禁止转载编辑于2020年07月12日 18:24:41


业务场景:采购订单审核后,更新价目表



1、删除上一节代码,继续到红框写




2、加载 物料代码,含税单价,供应商


image.png



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);
            }
        }


image.png


4、审核按钮,注册插件


image.png



EndOperationTransaction事件


说明:


操作执行后(事务内)事件,在操作处理完毕,未提交事务前触发。


此事件在事务内,对数据库进行的更新,受事务保护。


此事件适合于在操作执行完毕,单据数据已经更改,需要基于更改后的数据,进行其他关联数据的处理。




5、最终效果,采购订单审核后,更新价目表



采购订单审核之前,价目表1

image.png


采购订单填写价格2,审核后,价目表变成2

image.png


image.png


总目录链接

https://vip.kingdee.com/article/64993872014591232


46.zip(17.95KB)

赞 14