原因说明
工作流的流转条件需要一个确定的布尔值(True/False)来决策流程走向。但单据体明细可能有多行,不同行的值可能不同,没有一个确定的值直接作为判断依据,所以系统设计上不允许在基本页签直接选取单据体字段。
解决方案:高级页签 + lambda表达式
通用公式模板
len(filter(lambda x: (x.字段标识.关联属性 判断条件), 单据体标识)) > 0
公式含义:遍历单据体的所有行,逐行检查是否符合条件,如果至少有一行符合条件,则返回True(>0)。
常用场景公式示例
| 场景 | 公式 | 说明 |
|---|---|---|
| 按仓库编码匹配 | len(filter(lambda x: x.FStockId.FNumber in ['CK001','CK002'], FEntity)) > 0 | 单据体中有仓库编码为CK001或CK002的行 |
| 按仓库名称匹配 | len(filter(lambda x: x.FStockID.FName == '原料仓', FEntity)) > 0 | 单据体中有仓库名称为”原料仓”的行 |
| 按金额判断 | len(filter(lambda x: x.FAmount > 1000, FEntity)) > 0 | 单据体中有金额大于1000的行 |
| 按逻辑字段判断 | len(filter(lambda x: x.FCheckDelivery == true, FEntity)) > 0 | 单据体中有某勾选框已勾选的行 |
| 取反(不符合条件) | len(filter(lambda x: (x.FStockID.FName == '原料仓'), FEntity)) == 0 | 单据体中没有任何一行仓库为”原料仓” |
操作步骤(以本次场景为例)
假设您希望:其他出库单明细中包含”原料仓”时,走仓管员审批节点;否则直接终审。
① 找到仓库字段标识
登录BOS设计器,打开【其他出库单】→ 查看明细单据体页签标识(通常是 FEntity)和仓库字段标识(通常是 FStockId),以及仓库编码字段的关联属性(FNumber)。
② 配置流转连线条件
在【工作流设计器】中:
- 选中有判断条件的流转连线
- 切换到 【高级】 页签
- 在原有条件基础上(如
ActionResult == 'Consent')用 And 连接,输入公式: 条件1:走到仓管员审批节点
ActionResult == 'Consent' And len(filter(lambda x: x.FStockId.FNumber in ['原料仓编码'], FEntity)) > 0
![图片[1]-审批流中通过明细表中的仓库设置不同的条件审核-Dgcity](https://dgcity.com/wp-content/uploads/2026/09/20260922163449795-20260922163428184-image-1024x662-1.png)
条件2:直接终审(不包含指定仓库)
ActionResult == 'Consent' And len(filter(lambda x: x.FStockId.FNumber in ['原料仓编码'], FEntity)) == 0
![图片[2]-审批流中通过明细表中的仓库设置不同的条件审核-Dgcity](https://dgcity.com/wp-content/uploads/2026/09/20260922163450174-20260922163444552-image-1024x549-1.png)
③ 公式参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
x.字段标识 | 单据体明细中的字段 | x.FStockId(仓库字段) |
FNumber | 基础资料的编码属性 | 仓库的基础资料编码 |
FName | 基础资料的名称属性 | 仓库的基础资料名称 |
FEntity | 单据体明细页签的标识 | 不同的单据标识可能不同 |
in ['A','B'] | 匹配多个值(或关系) | 仓库编码为A或B都符合 |
== | 精确匹配单个值 | 等于某个特定值 |
💡 小技巧:如何快速获取字段标识
在BOS设计器中,点击单据体字段 → 右侧属性栏查看 【绑定实体字段】 或 【字段标识】,FNumber/FName 是基础资料字段的关联属性,分别代表编码和名称。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END















暂无评论内容