
*本示例主要做的是
自定义的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.GetDynamicObject