如何判断采购订单是否有下推-lambda表达式应用
有些业务场景中需要判断采购订单明细行有多行时,是否有任何行下推,比如,如果采购订单已经下推,则不允许修改,如何判断?
可以通过lambda表达式判断,行累计收料数量大于0的行数大于0,则表示采购订单已经下推,
关于lambda表达式的说明如下:
例7:单据体字段 单据体中的字段,公式取到的是一个集合,不能直接跟常量进行比较。 需要lambda表达式,对单据体行,进行循环,逐行取基础资料字段值进行比较: len(filter(lambda x : (x.F_JD_Base.FProperty['Name'].ToString = '采购员'), FEntity)) > 0
说明: FEntity是单据体标识,公式中取到的是 BOSDynamicRow
集合 x 代表单据体当前行,类型为BOSDynamicRow,允许直接使用"."取字段值 F_JD_Base.FProperty['Name'] 返回的是多语言文本对象,需要使用ToString()函数,转换成纯文本
例8:基础资料单据体属性值 如需对基础资料字段,单据体中属性进行比较,也需要使用lambda进行循环: len(filter(lambda x: ( x['Post']['Name'].ToString() = '璧山分公司总经理' ), FStaffId.PostEntity)) > 0
说明: FStaffId.PostEntity中,PostEntity 是基础资料单据体的Orm实体名
FStaffId.PostEntity 返回值,是DynamicObject集合,需要通过x['PropName']的方式,取各属性值
此业务场景中的表达式如下处理呢
已变更中使用采购订单新变更单为例:
采购订单新变更单是通过修改变更按钮执行生成采购订单新变更单的,在此按钮的操作中新增校验规则,具体可以参考下图
表达式:len(filter(lambda x : (x.FReceiveQty>0), FPOOrderEntry)) == 0
具体结果:
如何判断采购订单是否有下推-lambda表达式应用
本文2024-09-23 02:39:00发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-153818.html