创建记录时odoo内的通知

notification inside odoo when record is created

我正在使用 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)

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

我的解决方案是在 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 直接调用,因为自动操作会将关注者添加到新创建的记录中。所以现在这对我来说是携手并进的,但前提是有这样的自动操作。