创建记录时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 直接调用,因为自动操作会将关注者添加到新创建的记录中。所以现在这对我来说是携手并进的,但前提是有这样的自动操作。
我正在使用 Odoo 11 并希望在创建特定记录时通知用户,不是通过电子邮件而是在 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 直接调用,因为自动操作会将关注者添加到新创建的记录中。所以现在这对我来说是携手并进的,但前提是有这样的自动操作。