【问题标题】:notification inside odoo when record is created创建记录时 odoo 内的通知
【发布时间】:2018-07-23 17:41:56
【问题描述】:

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

【问题讨论】:

    标签: action odoo odoo-11


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2023-03-26
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多