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