Skip to content

日志记录与消息通知

审批流程中,日志记录供审计追溯;Odoo内部消息,确保审批人在系统内收到通知并可快速跳转;企业微信消息,实现移动端实时推送并在聊天窗口内直接完成审批操作。三种通知机制协同工作,确保审批流程的每个环节都有清晰的消息通知和完整的操作记录。

日志记录

1. 三类日志

日志类型写入方式存储位置用途
Chatter日志message_post()业务单据和审批实例的 Chatter(讨论区)用户在业务单据中可见的操作记录
业务日志log() 函数ir_logging 表,导航至(设置 → 技术 → 数据库结构 → 记录)中查看审批代码中主动记录的调试和业务追踪信息
服务器日志_logger 对象Odoo 服务器日志文件开发者调试和运维排查

2. Chatter日志

每次审批操作(提交、同意、拒绝、加签)都会自动在以下两个位置生成 Chatter 日志:

记录位置内容查看方式
业务单据操作类型 + 节点名称 + 审批备注打开业务单据表单,查看 Chatter
审批实例操作类型 + 节点名称 + 审批备注打开实例记录,查看 Chatter

日志颜色编码:

操作类型颜色色值
提交蓝灰色#5D8DA8
同意绿色#228E3B
驳回红色#DC3545
加签蓝灰色#5D8DA8

Chatter 日志包含的信息:

  • 操作:提交审批 / 同意 / 驳回 / 加签
  • 节点:当前审批节点名称
  • 驳回至(仅拒绝操作):驳回到哪个节点
  • 备注:审批人填写的备注内容

3. 业务日志(log 函数)

在审批代码(approve_codereject_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. 企业微信消息

前置条件

企业微信消息通知需要同时满足:

  1. 模板的 企业微信通知wechat_notification=True)已勾选
  2. 模板的 企业微信配置 已关联企业微信应用配置
  3. 目标用户已绑定企业微信(res.partnerwechat_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✅ 消息角标(标题"抄送通知")✅ 文本消息正常流转时通知该节点的抄送人
审批被驳回✅ 消息角标✅ 文本消息通知驳回路径上所有节点的抄送人合集

学习交流

操作预览