Odoo 19 里,单据生命周期靠 状态字段、Python 流转方法、界面按钮 与 权限 驱动,而不再使用旧版 XML Workflow 引擎。
1. 工作流如何运作
常见组合:
- Selection 定义状态
- 方法负责状态跳转
- 按钮调用方法
- 用户组 / 规则限制谁可触发
state = fields.Selection([
("draft", "Draft"),
("confirm", "Confirmed"),
("done", "Done"),
("cancel", "Cancelled"),
], default="draft")
2. 两种核心模式
| 模式 | 思路 |
|---|---|
| 简单工作流 | 线性状态变更,少审批——适合大批量、快处理 |
| 审批工作流 | 关键跳转需授权——合规 / 高风险单据 |
3. 用模型继承扩展
最常用:_inherit + 重写方法,并调用 super()。
class SaleOrder(models.Model):
_inherit = "sale.order"
state = fields.Selection(
selection_add=[("manager_approval", "Manager Approval")],
ondelete={"manager_approval": "set default"},
)
def action_confirm(self):
# 高金额 → 进入经理审批;否则走标准确认
...
def action_manager_approve(self):
# 从 manager_approval 继续 super().action_confirm()
...
完整示例见 040.code/workflow_extend_demo。
4. 扩展表单视图
用 XPath 按状态显示按钮:
<button name="action_manager_approve"
string="Manager Approve"
type="object" class="btn-success"
invisible="state != 'manager_approval'"/>
5. 自动化规则(无代码)
路径:设置 → 技术 → 自动化规则 → 新建
按字段值 / 时间触发;通过服务器动作可:
- 执行 Python
- 创建 / 更新记录
- 发邮件 / 短信
- 加关注者
- 创建活动
- 串联动作
适合“当 X 发生则做 Y”、又不想写模块的场景。
6. AI 驱动动作(企业版)
Odoo 19 企业版可用自然语言描述自动化(例如:制造订单进行中且物料就绪 → 把关联商机推到谈判阶段)。当作加速器使用,仍需核对触发条件与权限。
7. 最佳实践
- 务必调用 super(),保留库存、邮件、会计等副作用
- 新状态用 selection_add(不要整段替换 Selection)
- 按钮用 invisible="state != '…'" 控制显示
- 自定义自动化 / 服务器动作 XML 放在 <data noupdate="1">,避免升级被冲掉
- 敏感跳转用 ir.rule / 用户组保护