学习 len(filter(lambda 公式使用原创
金蝶云社区-xky999
xky999
29人赞赏了该文章 373次浏览 未经作者许可,禁止转载编辑于2024年11月01日 17:27:12

参考:遍历单据体,lambda函数的应用:https://vip.kingdee.com/link/s/lvVjD


Lambda 用来循环判断销售订单明细各字段是否符合条件

Filter 返回符合条件的值列表

Len 判断filter返回列表的值个数


组合起来就是:把符合条件的明细行集合为一个值列表,然后看该列表中值个数。


例: len(filter(lambda x : (x.F_JD_Base.FProperty['Name'].ToString = '采购员'), FEntity)) > 0 

image.png

这个红框中是写条件的地方,可以多个条件使用and、or连接;注意括号的位置。


关于lambda表达式的说明如下:


例:单据体字段 

单据体中的字段,公式取到的是一个集合,不能直接跟常量进行比较。

需要lambda表达式,对单据体行进行循环,逐行取基础资料字段值进行比较:

 len(filter(lambda x : (x.F_JD_Base.FProperty['Name'].ToString = '采购员'), FEntity)) > 0 

 说明:FEntity是单据体标识,公式中取到的是 BOSDynamicRow

 集合 x 代表单据体当前行,类型为BOSDynamicRow;

允许直接使用"."取字段值;

 F_JD_Base.FProperty['Name'] 返回的是多语言文本对象,需要使用ToString()函数,转换成纯文本 ;

 

例:基础资料单据体属性值 

如需对基础资料字段,单据体中属性进行比较,也需要使用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.FMaterialID != null and x.FMaterialID.FIsSNManage=False and len(x.FSerialSubEntity)>0), FInStockEntry))>0

其中 FInStockEntry 是单据体标识,FSerialSubEntity 是序列号子单据体标识




图标赞 29
29人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!