主题
日志记录与消息通知
审批流程中,日志记录供审计追溯;Odoo内部消息,确保审批人在系统内收到通知并可快速跳转;企业微信消息,实现移动端实时推送并在聊天窗口内直接完成审批操作。三种通知机制协同工作,确保审批流程的每个环节都有清晰的消息通知和完整的操作记录。
日志记录
1. 三类日志
| 日志类型 | 写入方式 | 存储位置 | 用途 |
|---|---|---|---|
| Chatter日志 | message_post() | 业务单据和审批实例的 Chatter(讨论区) | 用户在业务单据中可见的操作记录 |
| 业务日志 | log() 函数 | ir_logging 表,导航至(设置 → 技术 → 数据库结构 → 记录)中查看 | 审批代码中主动记录的调试和业务追踪信息 |
| 服务器日志 | _logger 对象 | Odoo 服务器日志文件 | 开发者调试和运维排查 |
2. Chatter日志
每次审批操作(提交、同意、拒绝、加签)都会自动在以下两个位置生成 Chatter 日志:
| 记录位置 | 内容 | 查看方式 |
|---|---|---|
| 业务单据 | 操作类型 + 节点名称 + 审批备注 | 打开业务单据表单,查看 Chatter |
| 审批实例 | 操作类型 + 节点名称 + 审批备注 | 打开实例记录,查看 Chatter |
日志颜色编码:
| 操作类型 | 颜色 | 色值 |
|---|---|---|
| 提交 | 蓝灰色 | #5D8DA8 |
| 同意 | 绿色 | #228E3B |
| 驳回 | 红色 | #DC3545 |
| 加签 | 蓝灰色 | #5D8DA8 |
Chatter 日志包含的信息:
- 操作:提交审批 / 同意 / 驳回 / 加签
- 节点:当前审批节点名称
- 驳回至(仅拒绝操作):驳回到哪个节点
- 备注:审批人填写的备注内容
3. 业务日志(log 函数)
在审批代码(approve_code、reject_code)中,可以使用 log() 函数记录业务信息。日志写入 ir_logging 表,可导航至(设置 → 技术 → 数据库结构 → 记录)中查看。
用法示例:
python
# 记录审批通过信息
log(f"订单 {record.name} 审批通过,金额:{record.amount_total}")
# 指定日志级别
log(f"异常金额,需复核", level='warning')log 函数特性:
| 特性 | 说明 |
|---|---|
| 参数 | log(message, level='info'),level 可选 info/warning/error |
| 自动上下文 | 自动记录当前模型(path)、记录 ID(line)、来源标识(func=workflow_bpmn_instance) |
4. 服务器日志(_logger 对象)
_logger 是 Python 标准 Logger,输出到 Odoo 服务器日志文件,用于运维排错和深度调试。
python
_logger.info(f"审批完成,实例ID:{instance.id}")
_logger.warning(f"金额超出阈值:{record.amount_total}")
_logger.error(f"审批代码执行失败:{str(e)}")| 方法 | 说明 |
|---|---|
_logger.info() | 一般信息记录 |
_logger.warning() | 警告信息 |
_logger.error() | 错误信息 |
_logger.exception() | 异常信息(自动附带堆栈) |
注意:
_logger输出到服务器日志文件,普通用户不可见。面向用户的操作结果展示请使用 Chatter 日志(message_post)或log()函数。
审批通知
1. 通知总览
审批通知分为 Odoo 内部通知和企业微信通知两个完全独立的通道,各自有独立的开关控制。
审批操作完成
│
├── odoo_notification = True
│ └── Odoo 内部通知
│ ├── 审批人 → message_notify → Odoo 顶部消息角标
│ └── 抄送人 → message_notify → Odoo 顶部消息角标
│
└── wechat_notification = True(需同时配置 wechat_config_id)
└── 企业微信通知
├── 审批人 → 卡片消息(含同意/驳回按钮,可直接操作)
├── 抄送人 → 文本消息(仅通知,无需操作)
└── 提交人 → 文本消息(审批完成或驳回时)
Odoo通知 和 企业微信通知 这两个开关可任意组合,互不干扰;如果两者都不勾选,
仅记录 Chatter 操作日志,不发送任何通知。2. Odoo 内部消息
功能说明
当模板开启 Odoo 通知(odoo_notification=True)后,每次审批操作完成后,系统自动向下一批审批人和抄送人发送 Odoo 内部通知。
消息内容
| 接收角色 | 消息标题 | 消息内容 |
|---|---|---|
| 审批人 | "新审批任务 — {单据名称}" | 单据名称、待审批节点名称 |
| 抄送人 | "抄送通知 — {单据名称}" | 单据名称、待审批节点名称、审批人列表 |
3. 企业微信消息
前置条件
企业微信消息通知需要同时满足:
- 模板的 企业微信通知(
wechat_notification=True)已勾选 - 模板的 企业微信配置 已关联企业微信应用配置
- 目标用户已绑定企业微信(
res.partner的wechat_uid字段已填写)
企业微信配置
配置入口:BPMN工作流 → 配置 → 企业微信配置
配置表单字段:
| 字段 | 获取方式 |
|---|---|
| 名称 | 自定义,如"审批通知应用" |
| 企业ID | 企业微信管理后台 → 我的企业 → 企业信息 |
| 应用ID | 企业微信管理后台 → 应用管理 → 自建应用 |
| 应用密钥 | 同上,用于获取 access_token |
| 回调令牌 | 自定义随机字符串,填入企业微信后台"接收消息"配置 |
| 回调加密AES密钥 | 企业微信后台"接收消息"配置中随机生成或自定义 43 位 |
企业微信消息类型
| 消息类型 | 接收人 | 消息形式 | 交互能力 |
|---|---|---|---|
| 卡片消息(template_card) | 审批人 | 带标题、字段信息、操作按钮的卡片 | ✅ 可直接点击"同意"/"驳回"完成审批 |
| 文本消息(text) | 抄送人 | 纯文本通知 | ❌ 仅通知,无需操作 |
| 文本消息(text) | 提交人 | 审批完成或驳回的通知 | ❌ 仅通知 |
卡片消息内容
审批人收到的企业微信卡片消息包含:
| 卡片区域 | 内容 |
|---|---|
| 标题 | "审批通知:{单据名称}" |
| 副标题 | "申请人:{提交人姓名}" |
| 信息区 | 审批节点名称、单据编号、提交时间 |
| 操作按钮 | 同意(绿色)和 驳回(红色) |
| 详情链接 | 点击卡片跳转到 Odoo 业务单据详情页 |
驳回场景的卡片消息
驳回后,驳回目标节点的审批人收到专用卡片:
| 卡片区域 | 内容 |
|---|---|
| 标题 | "驳回重审:{单据名称}" |
| 副标题 | "被驳回节点:{节点名称}" |
| 信息区 | 审批节点、单据编号、驳回时间 |
| 操作按钮 | 同意 / 驳回 |
审批结果卡片更新
当审批人在企业微信中点击按钮完成操作后,系统通过 update_template_card 更新卡片状态:
| 操作 | 卡片状态变化 |
|---|---|
| 点击"同意" | 按钮区域替换为"已通过" |
| 点击"驳回" | 按钮区域替换为"已驳回" |
| 审批模式 | 卡片更新范围 |
|---|---|
| 串行审批 | 更新该节点的所有卡片(一人通过即通过,所有审批人的卡片同步更新) |
| 并行审批(会签) | 仅更新当前操作者自己的卡片(其他人仍需审批,各自卡片保持有效) |
通知机制
1. 提交人通知机制
| 触发场景 | Odoo 通知 | 企业微信通知 | 通知内容 |
|---|---|---|---|
| 提交审批成功 | Chatter 日志 | ❌ | 操作摘要和备注 |
| 审批全部通过(实例 done) | Chatter 日志 | ✅ 文本消息 | "您的记录 'xxx' 已审批通过" |
| 审批被驳回 | Chatter 日志 | ✅ 文本消息 | "您的记录 'xxx' 已被驳回",含驳回原因 |
| 审批中途加签 | Chatter 日志 | ❌ | — |
2. 审批人通知机制
| 操作 | 触发节点 | 通知对象 | 通知类型 |
|---|---|---|---|
| 提交审批 | 第一个 UserTask 变为 READY | 第一个节点的审批人 | Odoo 通知 + 企业微信卡片 |
| 同意(非最后节点) | 下一节点变为 READY | 下一节点的审批人 | Odoo 通知 + 企业微信卡片 |
| 同意(最后节点) | EndEvent → COMPLETED | 下一节点无(流程结束) | 通知提交人"审批通过" |
| 同意(并行未全部) | 仅记录审批 | 无(等待其他人审批) | 无通知 |
| 拒绝 | 驳回目标节点变为 READY | 驳回目标节点的审批人 | Odoo 通知 + 企业微信卡片 |
| 加签 | 新节点变为 READY | 新插入的审批人 | Odoo 通知 + 企业微信卡片 |
3. 抄送人通知机制
| 触发场景 | Odoo 通知 | 企业微信通知 | 说明 |
|---|---|---|---|
| 审批节点变为 READY | ✅ 消息角标(标题"抄送通知") | ✅ 文本消息 | 正常流转时通知该节点的抄送人 |
| 审批被驳回 | ✅ 消息角标 | ✅ 文本消息 | 通知驳回路径上所有节点的抄送人合集 |
学习交流
