跳至内容

Odoo 19 中向 Chatter 发布消息的方法

如何在 Odoo 19 中向 Chatter 发布消息

在 Odoo 中,Chatter(聊天面板)功能对于促进沟通和深入了解各类业务流程至关重要。它简化了用户间的互动,提升了协作效率。在 Odoo 19 版本中,Chatter 被广泛应用于销售、项目、任务、开票等多个模块,是保障沟通顺畅、让用户及时了解业务进展的强大工具。

下方图片展示了通过 Chatter 传递的流程详情。

从上图的 Chatter 中可以看到:销售订单的创建记录、销售订单的确认状态及确认人信息,此外还能查看为相关用户生成的待办事项。

一、通过代码向 Chatter 程序化发布消息

在某些情况下,需要通过代码在 Odoo 19 中向 Chatter 自动发布消息。例如,在自动化工作流(如订单状态流转)或基于特定操作(如按钮点击)发布更新时,可能需要直接通过代码触发消息,而非依赖用户手动输入。

借助 Odoo 的内置方法(message_post())即可实现这一需求,从而根据预设条件自动发送通知、提醒或状态更新。这种自定义消息发布方式能确保关键信息及时传递,无需人工干预。

示例:学生课程状态跟踪模型

假设我们创建一个名为student.info的模型,用于跟踪学生信息及其课程状态(状态选项:“draft”(草稿)、“in_progress”(进行中)、“completed”(已完成))。当用户点击 “开始课程” 或 “完成课程” 按钮时,系统需更新课程状态,并自动向 Chatter 发布消息通知这一变更。

  • start_course方法:将课程状态改为 “in_progress”(进行中),并发送 “课程已开始” 的消息。
  • complete_course方法:将课程状态改为 “completed”(已完成),并发送 “课程已结束” 的消息。

通过这种自定义设置,每次课程状态变更时,Chatter 都会自动发布消息,确保相关人员实时知晓。

def start_course(self):
    self.state = 'in_progress'
    self.message_post(body=_("学生课程已开始"))

def complete_course(self):
    self.state = 'completed'
    self.message_post(body=_("学生课程已结束"))

二、message_post()方法的参数说明

message_post()是 Odoo 中用于向 Chatter 发布消息的核心方法,其主要参数如下:

  • body:消息内容(类型:字符串 | Markup 对象)。若传入字符串,系统会自动对内容进行转义处理;若需包含 HTML 格式内容(如超链接、样式),需传入 Markup 对象。
  • message_type:消息类型,取值来源于mail.message.type字段(如“comment”(评论)、“notification”(通知))。
  • parent_id:用于私密对话场景,指定父消息 ID,使当前消息成为对某条历史消息的回复。
  • attachments:附件列表,格式为元组组成的列表[(附件名称, 附件内容)],其中附件内容无需进行 base64 编码。
  • body_is_html:布尔值,指定body参数中的字符串是否应被解析为 HTML 格式(即使未传入 Markup 对象)。
  • kwargs:额外关键字参数,用于为新创建的mail.message记录(Chatter 消息的底层数据记录)设置默认字段值。
  • email_from:指定消息作者的邮箱地址。

上述示例代码的结果如下:

三、自定义 Chatter 消息的显示效果

这就是我们可以轻松向 Chatter 添加消息的方式。接下来,让我们探讨一下在 Odoo 19 中可以对消息外观进行的更改。

例如,如果学生的姓名包含在消息中,我们可以将其转换为指向相应学生记录的超链接。这可以使用 _get_html_link() 函数来实现。此外,我们还可以包含主题、修改消息样式,并在使用 message_post() 函数时添加作者以指示消息的发送者。以下是实现此功能的代码。

def start_course(self):
    self.state = 'in_progress'
    self.message_post(
        body=_("学生%s的课程已开始。", self.parent_id._get_html_link(title=self.name)),
        author_id=self.env.ref('base.partner_root').id,  
# 指定作者为系统根合作伙伴
        subject='课程开始',  # 消息主题
        message_type='comment',  # 消息类型为“评论”
        subtype_xmlid='mail.mt_comment'  # 消息子类型(对应Odoo内置的“评论”子类型)
    )

def complete_course(self):
    self.state = 'completed'
    self.message_post(
        body=_("学生%s的课程已结束。", self.parent_id._get_html_link(title=self.name)),
        author_id=self.env.ref('base.partner_root').id,
        subject='课程结束',
        message_type='comment',
        subtype_xmlid='mail.mt_comment'
    )

上述代码的结果如下:

从图中可清晰看到:消息中包含了学生姓名(超链接形式)、预设的消息内容、消息主题,且样式与系统模板保持一致。

四、总结

该方法适用于所有关联了 Chatter 的 Odoo 记录(如销售订单、项目任务、发票等),且支持根据具体需求自定义消息内容与外观,具备高度的灵活性。

关键点回顾

  1. Odoo 19 中向 Chatter 发布消息的核心方法是 message_post(),可在业务逻辑方法中直接调用实现自动发消息。
  2. message_post() 支持丰富的参数配置,包括消息内容、类型、作者、主题、附件等,可满足不同场景的需求。
  3. 通过 _get_html_link() 等函数可自定义消息显示效果,比如添加超链接、指定作者和主题,提升消息的可读性和交互性。

Odoo 19 中向 Chatter 发布消息的方法
中国 Odoo, 苏州远鼎 2026年1月19日
标签
存档