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)事件中获取的数据包只有...
点击下载文档
本文2024-09-16 17:11:33发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14121.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章