二开案例.表达式.操作服务前置条件
【基础知识】
<1>操作服务前置条件执行时,始终传递的是表头级的数据包(上下层级关系完整,字段不一定完整)。
<2>表达式中,单据体字段属于集合中的元素,不能直接访问,如果要访问,只能采用遍历或聚合的方式访问。
【应用场景】
<1>编写表达式,判断采购订单明细中的总的采购数量超过100时,执行某个服务。
sum(FQty)>100
<2>针对采购订单保存操作的服务端服务,编写表达式,当采购订单明细中存在库存数量大于采购数量的数据行时(订单明细逐行比较),执行某个服务。
len(filter(lambda row: row.ActiveObject["FQty2"]>row.ActiveObject["Qty"], FPOOrderEntry ))>0
注意:
(1)表达式中的"FQty2"是对应字段的【绑定实体属性】设置的名称,FPOOrderEntry是对应单据体明细信息的标识。
(2)如果是提交、审核、反审核等操作,可能会提示报错信息:实体类型xxx中不存在名为yyy的属性,这是因为只有保存操作是全量数据包,而其它操作都是按需加载最简数据包(非全量数据包),因此参与表达式计算的数据包并未包含该字段,我们只需要在表达式前面加上任意一个含有该字段的恒等条件即可(主要作用是明确告知表达式执行器我需要用这个字段)。
例如:FQty2<> null AND FQty<> null AND
len(filter(lambda row: row.ActiveObject["FQty2"]>row.ActiveObject["Qty"], FPOOrderEntry ))>0
其中,FQty<>null即为恒等条件。
【特别说明】
本案例演示的用法同样适应于单据头上的实体服务规则或字段值更新事件,但不适应于单据体上的实体服务规则或单据体上的字段值更新事件。适应与否,判断依据就是用于表达式计算的数据包是完整数据包还是只是分录行数据包。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表达式.操作服务前置条件
本文2024-09-23 04:21:43发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164815.html