action - 创建记录时 odoo 内的通知
问题描述
我正在使用 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 直接调用,因为自动操作会将关注者添加到新创建的记录中。所以现在这对我来说是齐头并进的,但前提是有这样的自动化操作。
推荐阅读
- api - 客户端或服务器的状态是否取决于信息(从 REST 的角度来看)?
- regex - Nginx Ingress 规则找不到匹配项
- angular - Angular 函数 getIdToken 不是函数错误
- r - 在向量上运行 for 循环和 if 语句,但不起作用,为什么?
- javascript - 使用 Browserify 创建 Turf.js 的本地副本后 Javascript Uncaught TypeError
- c# - 是否有可能摆脱 app.config 依赖?
- prolog - Prolog 中如何表示谓词逻辑?
- flutter - 实时数据库存储
- kubernetes - 在 Kubernetes 中拥有多个命名空间和多个集群有什么区别
- spring - 当 spring security 在类路径上时,如何调试失败的 spring boot 执行器运行状况指示器?