Python插件 - 审核当前单据修改其他单据里的内容

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

Python插件 - 审核当前单据修改其他单据里的内容

*本示例主要做的是自定义的BOS单据修改物料清单某个单据体的字段* 在 执行后事务内事件(EndOperationTransaction)事件中获取的数据包只有基础的几个字段,我们需要在预加载数据包的函数(OnPreparePropertys)内加入我们需要用到的字段 # 源码 ``` python #作者: 老李头(Dean) #描述: 审核后修改物料清单单据体工艺路线价格 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddReference("Kingdee.BOS.App") clr.AddReference("Kingdee.BOS.Core") clr.AddReference("Kingdee.BOS.Contracts") clr.AddReference("Kingdee.BOS.DataEntity") clr.AddReference("Kingdee.BOS.ServiceHelper") clr.AddReference("Kingdee.K3.Core") from Kingdee.BOS import * from Kingdee.BOS.Core.DynamicForm import * from Kingdee.BOS.Core.DynamicForm.PlugIn import * from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import * from Kingdee.BOS.Core.Metadata import * from Kingdee.BOS.Core.SqlBuilder import * from Kingdee.BOS.Orm.DataEntity import * from Kingdee.BOS.ServiceHelper import * from Kingdee.BOS.Util import * from System import * from System.Collections.Generic import * from System.ComponentModel import * from System.Linq import * #预加载字段 def OnPreparePropertys(e): #价格 e.FieldKeys.Add("F_GXDJ"); #作业 e.FieldKeys.Add("F_CBZY"); #产品编码 e.FieldKeys.Add("F_CPBM"); def EndOperationTransaction(e): #打开弹窗提示 this.OperationResult.IsShowMessage = True; result = OperateResult(); #物料清单业务对象标识 FormId = "ENG_BOM"; #获取数据包 objs = e.DataEntitys; #获取产品编码标识 F_CPBM_Id = objs[0]["F_CPBM_Id"].ToString(); #工艺路线单据体 F_BJDRGCB = objs[0]["F_BJDRGCB"]; #判断是否有数据,没数据就直接Return了 if F_BJDRGCB ==None or F_BJDRGCB.Count == 0: return; #找出物料清单最新的一条数据 meta = MetaDataServiceHelper.Load(this.Context, FormId); queryBuilderParemeter = QueryBuilderParemeter(); queryBuilderParemeter.FormId = FormId; #过滤条件 queryBuilderParemeter.FilterClauseWihtKey = " 1=1 AND FMATERIALID = '{}' AND FDocumentStatus = 'C' ".format(F_CPBM_Id); #设置只获取一条 queryBuilderParemeter.TopRowCount = 1; #按照时间最新排序 queryBuilderParemeter.OrderByClauseWihtKey = " FCreateDate Desc"; cust_objs = BusinessDataServiceHelper.Load(this.Context, meta.BusinessInfo.GetDynamicObjectType(), queryBuilderParemeter); if cust_objs == None or cust_objs.Length == 0: result.SuccessStatus = False; result.Message = "获取相关物料清单信息失败,请确认是否存在对应产品并且已经审核的资料!"; this.OperationResult.OperateResult.Add(result); raise Exception("获取相关物料清单信息失败,请确认是否存在对应产品并且已经审核的资料!") #取出对象 dyobj = cust_objs[0]; #获取【物料清单】工艺路线的单据体 F_WLGYSM = dyobj["F_WLGYSM"] #循环A单据的工艺路线单据体 for item in F_BJDRGCB: #获取 【物料清单】工艺路线的单据体 某个对象 s = FirstOrDefault(Where(F_WLGYSM,lambda w: w["F_GYZY_Id"].ToString()==item["F_CBZY_Id"].ToString())) if s != None : #【物料清单】工艺路线的单据体对象数据包修改数据 s["F_ZYJJDJ"] = item["F_GXDJ"]; #保存数据包 ResultData = BusinessDataServiceHelper.Save(this.Context, dyobj); if ResultData != None: result.SuccessStatus = True; result.Message = "物料清单计件单价修改成功!"; this.OperationResult.OperateResult.Add(result); return; result.SuccessStatus = False; result.Message = "物料清单计件单价修改失败!"; this.OperationResult.OperateResult.Add(result); raise Exception("物料清单计件单价修改失败!"); def FirstOrDefault(col, fun = lambda x: True): return Enumerable.FirstOrDefault[object](col, Func[object, bool](fun)) def Where(col, fun): return Enumerable.Where[object](col, Func[object, bool](fun)) ``` # 注册脚本方式 ![image.webp](/download/01000a049c2c52d74e2ebc28b494816a11dd.webp) # 成果展示 ![计件单价.webp](/download/0100f2babc0ef97648b199ea5e2914e5b6cc.webp)

Python插件 - 审核当前单据修改其他单据里的内容

*本示例主要做的是自定义的BOS单据修改物料清单某个单据体的字段*在 执行后事务内事件(EndOperationTransaction)事件中获取的数据包只有...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息