单据体条件必录校验试例
实体服务规则可以设置单据体的某个字段条件必录,如何条件设置整个单据体必录几行呢?本文以供应链销售出库单为例,简单地阐述一下当客户输入了运输单号时,必须录入物流跟踪信息。
首先扩展销售出库单,新增保存操作上的校验,如下图1-1所示:
图1-1
选择单据合法性校验,前提条件为运输单号不为空,单据合法性校验的表达式为‘ len(filter(lambda x:x.FCarryBillNo<>'', FOutStockTrace)) <= 0 ’,如下图1-2所示: 图1-2
‘ len(filter(lambda x:x.FCarryBillNo<>'', FOutStockTrace)) <= 0 ’ 其中的len()代表计算后面的表达式或字段的长度,其中的与0相比较可以为其它数字,代表必录几行 ,如果是在‘物流跟踪’单据体实体服务规则中使用同样的表达式赋值给某个整数类型的字段,比如‘ F_ORA_INTEGER = len(filter(lambda x:x.FCarryBillNo<>'', FOutStockTrace)) ’ 会报错误‘ BOSDynamicRow is not iterable ’,估计是BOS实体服务规则表达式解析逻辑和保存检验里的解析逻辑不一样的原因(但是如果写在单据头上的实体服务规则又可以,参看帖子试例:https://vip.kingdee.com/article/168407472434896384);其中的filter()过滤了物流单号不为空的记录,看其中的名称应该是利用了和C#的lambda类似的python语法。检验结果如下图1-3所示:
图1-3