Skip to content

模型绑定与开始条件

模型绑定 是将审批流程动态植入业务表单的核心机制——选定目标模型后,系统自动在业务表单上注入审批按钮和流程图入口。一个模型可绑定多个审批流程,通过 开始条件 精准控制每个流程适用于哪些业务单据——业务单据上的任意字段(如状态、公司、供应商、币种、买家等)均可作为判断条件写入表达式,实现按业务维度自动匹配对应的审批流程。

模型绑定

步骤操作说明
1进入模板表单页面BPMN工作流 → BPMN工作流 → 模板
2配置 绑定模型 字段在表单页面的 模型配置 选项卡中
3保存将审批按钮注入目标业务表单
4刷新浏览器更新浏览器视图缓存

开始条件

1. 什么是开始条件

开始条件 是一个 python 条件表达式,用来判断当前业务单据是否满足发起该审批流程的条件,默认值为 True(所有记录都可发起)。

2. 条件表达式规则

规则说明
返回布尔值表达式必须能求值为 TrueFalse
self 关键字self 代表当前业务单据记录,即发起审批的那条数据
支持 Odoo 字段访问self.字段名 可访问单据的任意字段,包括关系字段的点号穿透
语法兼容 Python支持 ==!=><>=<=andornotin

3. 常见场景配置

场景 1:仅草稿状态可发起审批

python
self.state == 'draft'

这是最常见的配置。销售订单、采购订单等单据通常有 draft(草稿)→ confirmed(已确认)→ done(已完成)的状态流转。限制草稿状态可发起,确保单据确认后不会被重复提交审批。

场景 2:多公司模式下指定公司可用

python
self.company_id.id == 1

将审批流程限定给特定公司。company_id 是多数业务单据都有的字段(Odoo 多公司机制),1 是目标公司的数据库 ID。

更灵活的写法——允许多个公司:

python
self.company_id.id in [1, 2, 3]

场景 3:限定供应商/客户范围

python
self.partner_id.id == 15

仅当单据的往来单位是指定供应商时才可发起该流程。partner_id 是供应商/客户字段。

场景 4:限定币种

python
self.currency_id.name == 'USD'

仅外币订单走此审批流程。

场景 5:限定买家/销售员

python
self.user_id.id == 8

仅指定的销售员/采购员创建的单据可发起该流程。

场景 6:组合条件

python
(self.state == 'draft' or self.state == 'sent') and self.amount_total > 5000 and self.company_id.id == 1

多个条件用 and / or 组合,先判断状态、再判断金额、最后判断公司。

场景 7:限定订单包含特定产品

仅当采购/销售订单的明细行中包含某个指定产品时才可发起审批流程。

  • 按产品 ID(推荐,最精确):
python
15 in self.order_line.mapped('product_id').ids

15 替换为目标产品的数据库 ID。self.order_line 取到订单的所有明细行,.mapped('product_id') 提取每行的产品,.ids 得到所有产品 ID 的列表,in 判断目标 ID 是否在其中。

  • 按产品内部编码(跨环境迁移时更稳定):
python
'PROD-001' in self.order_line.mapped('product_id.default_code')

适合产品 SKU 编码固定不变的场景,比 ID 更具可读性。

  • 按产品名称
python
'笔记本电脑' in self.order_line.mapped('product_id.name')

适合产品名称唯一的场景,但名称可能被修改,不如编码或 ID 可靠。

  • 按产品类别(匹配类别下的所有产品):
python
self.order_line.filtered(lambda l: l.product_id.categ_id.id == 5)

判断是否有明细行属于指定产品类别。注意返回的是记录集,非空即为 True

注意:不同模型的明细行字段名称不同

4. 注意事项

注意点说明
字段必须存在表达式中使用的字段必须是目标模型上真实存在的字段,否则表达式求值会报错
空值处理如果字段可能为空(如 self.partner_idFalse),直接 .id 会报错。建议先判空:self.partner_id and self.partner_id.id == 10

常见问题

问题答案
绑定模型后表单没有出现 提交 按钮?检查:启用 是否勾选;开始条件对当前单据是否返回 True;是否刷新浏览器
一个模型能绑几个模板?无数量限制,系统通过开始条件自动筛选适用模板,条件满足的都展示,在用户发起 提交 操作的时候按情况选择

学习交流

操作预览