主题
节点配置
BPMN 流程由多种节点通过连线串联构成。不同节点类型在审批引擎中承担不同角色——开始事件触发流程、用户任务驱动审批、网关控制分支、脚本任务执行业务逻辑、结束事件标记流程终点。其中用户任务节点是配置的核心,涉及审批人、审批方式、服务端方法与代码、抄送人等全部审批相关设置。
节点类型
| 节点类型 | 图标特征 | 作用 | 是否需要配置 |
|---|---|---|---|
| StartEvent(开始) | 圆圈 | 流程入口,一个流程有且仅有一个 | 否,创建实例后自动触发执行 |
| EndEvent(结束) | 加粗圆圈 | 流程终点,到达后实例状态变为 已完成 | 是,仅配置抄送人 |
| UserTask(用户任务) | 圆角矩形 + 用户图标 | 审批节点,需人工操作(提交/同意/拒绝) | 是,核心配置对象 |
| ScriptTask(脚本任务) | 圆角矩形 + 脚本图标 | 自动执行 Python 代码,无需人工交互 | 是,仅需配置脚本代码 |
| ExclusiveGateway(排他网关) | 菱形 + X | 条件分支,按连线条件选一条路径执行 | 排他网关本身不需要配置,但是排他网关之后的流转必须配置 |
| ParallelGateway(并行网关) | 菱形 + + | 并行分支,所有分支同时执行 | 否 |
用户任务节点配置
用户任务(UserTask)是审批流程的核心节点,一个流程中可以有一个或多个。每个用户任务代表一个审批环节,审批人需要在 Odoo 中手动点击同意/驳回来完成审批。
| 配置项 | 字段 | 说明 |
|---|---|---|
| 用户 | user_ids | 多选用户列表,选中的用户均有审批权限 |
| 用户组 | group_ids | 多选用户组列表,组内所有成员均有审批权限 |
| 领导审批 | is_leader_approval | 布尔开关,勾选后自动将上一步审批人的直属上级设为当前节点审批人 |
| 并行审批 | is_parallel_approval | 布尔开关,关闭为或签(一人通过即通过);开启为会签(所有人通过才通过)。并行审批只验证 用户 中的配置,开启后,会自动隐藏 用户组 和 并行审批 |
| 抄送人 | cc_user_ids | 多选用户列表,审批到达本节点时抄送人收到通知 |
| 批准执行方法 | approve_server_method | 同意时调用的 Python 表达式,如 self.button_confirm() |
| 驳回执行方法 | reject_server_method | 驳回时调用的 Python 表达式,如 self.button_draft() |
| 批准执行代码 | approve_code | 同意时执行的 Python 代码块,支持多行,预置变量参考 |
| 驳回执行代码 | reject_code | 驳回时执行的 Python 代码块,支持多行,编码范例参考 |
结束节点只需要配置 抄送人,可根据实际业务决定是否配置
脚本任务节点配置
| 步骤 | 操作 | 备注说明 |
|---|---|---|
| 1 | 进入BPMN流程设计器 | 需要在流程图中配置 |
| 2 | 选中脚本任务节点 | 在右侧属性面板中找到 Script 选项并打开,Type 选择 Inline script,录入 Script |
| 3 | 脚本格式 | 标准python语法,如 self.state = 'sent',self 就是发起审批的那条业务单据记录;如果什么都不做,可以配置 pass;复杂脚本配置如下所示: |
python
if self.state == 'draft':
self.state = 'processing'
# 创建关联记录
self.env['sale.order.line'].create({
'order_id': self.id,
'product_id': 1,
'product_uom_qty': 10,
})
# 发送邮件
template = self.env.ref('sale.email_template_edi_sale')
template.send_mail(self.id)
# 记录日志
self.message_post(body='订单已自动处理')排他网关流转配置
| 步骤 | 操作 | 备注说明 |
|---|---|---|
| 1 | 进入BPMN流程设计器 | 需要在流程图中配置 |
| 2 | 选中排他网关后面的连线 | 在右侧属性面板中找到 Condition 选项并打开,Type 选择 Expression,录入 Condition Expression |
| 3 | 条件表达式格式 | 标准python语法,如 self.amount_total>5000,self 就是发起审批的那条业务单据记录,排他网关后面连线中的判断条件为必填项 |
学习交流
