
例子:采购入库单【保存/审核/提交】操作后
**(本文用保存操作来演示**)
采购入库保存后在(AfterExecuteOperationTransaction)事件触发采购订单的值更新事件
- 例子简单的判断 通过采购入库明细表分录查找link关系表,关系表存在则更新上有采购订单单据头的字段,并触发值更新事件。
- 采购订单的配置

# 源码
``` 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")
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.App.Data 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.Metadata.FormElement import *
from Kingdee.BOS.Orm import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Util import *
from System import *
from System.ComponentModel import *
from System.Linq import *
#字段预加载(演示)
#def OnPreparePropertys(e):
#e.FieldKeys.Add("F_GXDJ");
#事务结束后事件
def AfterExecuteOperationTransaction(e):
billid="";
Billno = "";
formId = "PUR_PurchaseOrder";
this.OperationResult.IsShowMessage = True;
#单据数据包对象 - 如果获取不到就在预加载事件增加字段(OnPreparePropertys)
obj = e.DataEntitys;
#raise NameError(JsonUtil.Serialize(obj));
for item in obj:
billid = item["Id"].ToString();
Billno = item["BillNo"].ToString();
InStockEntry = item["InStockEntry"]; #明细表单据体
#不存在关联跳过 - 防止报错 【这里没有判断上游是否采购订单,只做了简单的判断】
if InStockEntry is None or InStockEntry.Count == 0:
continue;
for instock_item in InStockEntry:
lk = instock_item["FInStockEntry_Link"]; #关联关系表
if lk is None or lk.Count == 0:
continue;
SBillId = lk[0]["SBillId"] #采购内码
#创建视图
billView = CreateBillView(formId,SBillId);
#加载视图数据
billView.LoadData();
#赋值
billView.Model.SetItemValueByID("F_SMTO_Text_qtr", "老李头小伙子测试一下", -1);
#触发值更新服务
billView.InvokeFieldUpdateService("F_SMTO_Text_qtr", 0);
try:
#调用保存操作
billView.InvokeFormOperation(FormOperationEnum.Save);
except e:
raise NameError("采购订单值更新失败!"+str(e));
fina