首页 > 解决方案 > 创建记录时 odoo 内的通知

问题描述

我正在使用 Odoo 11 并希望在创建某个记录时通知用户,不是通过电子邮件,而是在 Odoo 内部,这样就有这样的事情: 在此处输入图像描述 我认为这对于 Odoo 标准功能应该相当简单,但我不知道如何做。

我尝试的是一个自动操作,它添加了应该作为关注者通知的用户(要执行的操作:添加关注者,触发条件:创建时)。

此外,我在我的模型中继承自mail.thread,跟踪几个字段,并为它们定义一个子类型。这确实可以通知有关字段的更改,但是在创建记录时没有消息。为什么是这样?也许创造不算改变?或者,也许自动操作执行得很晚,因为他必须在创建记录之前关注?

我看到的另一种选择是覆盖 create(...) 方法并从那里发送一些消息。但是如何做到这一点?感觉好像有一些我看不到的明显的东西。我的意思是有一个说明,无论如何,该记录是在喋喋不休中创建的。我要做的就是将其作为消息放在用户收件箱中。

示例代码:

class MyModel(models.Model):
    _name = 'my_module.my_model'
    _inherit = ['mail.thread', 'mail.activity.mixin']
    name = fields.Char(string='Name', track_visibility=True)

    def _track_subtype(self, init_values):
        if 'name' in init_values:
            return 'mail.mt_comment'
        return super(Alert, self)._track_subtype(init_values)

标签: actionodooodoo-11

解决方案


我找到了解决方案。第一步是添加一个自动操作,将关注者添加到新创建的记录中。遗憾的是,此操作是在创建记录后执行的,因此有关创建的消息将不会发送给关注者。

我对此的解决方案是在 write 方法中发送另一条关于创建的消息,但当然只针对新创建的记录,我使用布尔标志检测到这些记录。

这是代码:

class MyModel(models.Model):
    _name = 'my_module.my_model'
    _inherit = ['mail.thread', 'mail.activity.mixin']
    name = fields.Char(string='Name', track_visibility=True)
    newly_created = fields.Boolean('Newly Created')

    @api.model
    def create(self, values):
        values['newly_created'] = True # Set the flag to true for new records
        return super(Alert, self).create(values)

    @api.multi
    def write(self, values):
        res = super(MyModel, self).write(values)
        if(self.newly_created):
            self.message_post(body=_('Created New Record'), subtype='mail.mt_comment', author_id=self.create_uid.partner_id.id)
            # Set the flag to false so we post the message only once
            self.newly_created = False

一个重要的细节是super(MyModel, self).write(values)必须在发布消息之前和更新标志之前。

请注意,此写入消息将在模型创建后由 Odoo 直接调用,因为自动操作会将关注者添加到新创建的记录中。所以现在这对我来说是齐头并进的,但前提是有这样的自动化操作。


推荐阅读