创建记录时在odoo内部进行通知

时间:2018-07-23 17:41:56

标签: action odoo odoo-11

我正在使用Odoo 11,并希望在创建特定记录时通知用户,而不是通过电子邮件而是在Odoo内通知用户,以便进行此操作: enter image description here 我认为使用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)

1 个答案:

答案 0 :(得分:0)

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

对此,我的解决方案是通过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将立即调用此写消息,因为“自动操作”会将关注者添加到新创建的记录中。因此,这现在对我来说是并行的,但前提是只有这样的自动操作。