odoo14里面的消息机制
odoo里面 字段追踪、消息通知机制:
一、使用方式:1、在定义模型的py文件里继承mail模型
class DemoModle(models.Model):
""" 模型名称 """
_name = 'demo.model' # 定义 模型名(类名) 必写
_rec_name = 'name' # 定义 模型引用时 显示的默认字段 非必写
_description = 'demo model' # 定义数据库中的表名 非必写
_inherit = ['mail.thread', 'mail.activity.mixin'] # 集成消息模型 增加消息记录通知功能
一、 odoo14里是:tracking=True
user_id = fields.Many2one('res.users', string='Salesperson', index=True, tracking=True)
add_follow_ids = fields.Many2many('hr.employee',string=u'关注者')
二、 odoo12里面是:track_visibility
inout = fields.Selection(string="InOut", selection=[('Import', '进口'), ('Export', '出口'), ], track_visibility='always',)
contract_num = fields.Char(string="Contract Num", track_visibility='onchange')
注意:
- mail模型有一个强大的字段跟踪系统,可将对应值的变化记录到讨论系统中。
- 为了对字段进行监听,只需要将
track_visibility属性设置为onchange(当字段值改变时展示在通知中) always(该值总是会被显示在通知中,一般用于让通知内容更好理解)
def btn_add_follow(self):
"""自动添加关注者"""
partner_ids= []
for employee in self.add_follow_ids:
if employee.user_id.partner_id:
partner_ids.append(employee.user_id.partner_id.id)
self.message_subscribe(partner_ids=partner_ids )
"""自定义发消息:在form表单下面显示的那一种"""
p_ids= []
for line in self.message_follower_ids:
p_ids.append(line.partner_id.id)
self.message_post(body='%s-%s测试消息发给关注者' % (self.name,self.create_uid.name),
subject = '邮件主题:', partner_ids = p_ids)
添加 follower
从业务逻辑角度来看还有一个有意思的功能:可以向文档添加 follower,这样他们可以获取相应的通知。我们有以下几种方法来添加 follower:
- message_subscribe(partner_ids=<整型 id 列表>)添加伙伴
- message_subscribe(channel_ids=<整型 id 列表>) 添加频道
- message_subscribe_users(user_ids=<整型 id 列表>) 添加用户
二、在form表达添加
<form>
....
....
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
根据自己需要自定义获取变化字段的值:

def write(self,values):
t_record = self.get_simple_variable_attr(values)
otm_t_record = self.get_otm_variable_attr(values)
return super(ZimoProductPreview,self).write(values) def get_simple_variable_attr(self,values):
"""监控修改的值:组成字典{}
针对:many2one、char、text、float
one2many字段的监控:可根据需要自定义编写逻辑
原来存在的记录,未修改 [4,开始: [4, 4, False]:
原来存在的记录,已修改 [1,开头: [1, 21, {'price': 44, 'product_description': '的房产税'}]
新增记录,[0,开始: [0, 'virtual_689', {'product_id': 4, 'price': 456, 'product_description': '大碗面', 'note': False}] """
simple_track_value= []
tracked_fields=self._get_tracked_fields()
for k, v in values.items():
if k in tracked_fields:
field_vals=self.fields_get(k)
old_fd_value = self[k]
new_fd_value = v
if field_vals[k]['type'] == 'many2one':
new_fd_value = self.env[field_vals[k]['relation']].browse(v).name
old_fd_value = self[k].name
simple_track_value.append({
'fiele_name':field_vals[k]['string'],
'old_value':old_fd_value,
'new_value': new_fd_value
})
return simple_track_value def get_otm_variable_attr(self,values):
"""监控修改的值:组成字典{}
one2many字段的监控:可根据需要自定义编写逻辑
原来存在的记录,未修改 [4,开始: [4, 4, False]:
原来存在的记录,已修改 [1,开头: [1, 21, {'price': 44, 'product_description': '的房产税'}]
新增记录,[0,开始: [0, 'virtual_689', {'product_id': 4, 'price': 456, 'product_description': '大碗面', 'note': False}] """
otm_track_value=[]
# 暂时监控修改的字段
new_product_value=values.get('product_line_ids')
line_obj=self.env['zimo.product.preview.order.line']
if new_product_value:
for line in new_product_value:
print (line)
if line[0] in [1,'1']:
record=line_obj.browse(line[1])
line_values=[]
for k,v in line[2].items():
field_vals=record.fields_get(k)
old_fd_value=record[k]
new_fd_value=v
if field_vals[k]['type']=='many2one':
new_fd_value=self.env[field_vals[k]['relation']].browse(v).name
old_fd_value = record[k].name
line_values.append({
'fiele_name':field_vals[k]['string'],
'old_value':old_fd_value,
'new_value': new_fd_value,
})
otm_track_value.append(line_values)
return otm_track_value
odoo14里面的消息机制的更多相关文章
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- Android消息传递之Handler消息机制
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...
- Windows消息机制
Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...
- OSG消息机制之事件处理概述
OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...
- [转]runtime 消息机制
原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...
- IOS 消息机制(NSNotificationCenter)
消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...
- Android之消息机制Handler,Looper,Message解析
PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...
- Objective-C总Runtime的那点事儿(一)消息机制
最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎必问,例 如:RunLoop,Block,内存管理等.其他的问题 ...
- Windows消息机制详解
消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...
随机推荐
- Headline 项目总结中
目录 1.项目准备 1.1 rem适配 1.2 通用样式CSS 1.3删除测试代码 1.4Git托管 2.login页面 2.1 页面布局和表单校验 2.2login页的接口抽取 2.5.loadin ...
- Web打印插件实现思路(C#/Winform)
最近,客户有个需求过来,Web端无预览打印,美其名曰:快捷打印. 当时第一反应就是找插件,拿来主义永远不过时.找了一圈发现,免费的有限制,没限制的需要收费(LODOP真的好用).说来就是一个简单的无预 ...
- 【VBA】列号与字母(列名)的相互转换 (自定义函数)
1. '列号转字母(列名) Function Num2Name(ByVal ColumnNum As Long) As String On Error Resume Next Num2Name = & ...
- Spring Boot WebFlux-06——WebFlux 整合 Redis
第06课:WebFlux 整合 Redis 前言 上一篇内容讲了如何整合 MongoDB,这里继续讲如何操作 Redis 这个数据源,那什么是 Reids? Redis 是一个高性能的 key-val ...
- ES2015+ 常用新特性一口气看个够
ES2015 也叫 ES6,区别只是一个是以发布的年份来命名,一个是以版本号来命名 从那以后组织每年都会发布一个新版本,根据这个规则,ES2016 === ES7... ES2020 === ES11 ...
- Oracle对大表进行delete注意事项
如果对大表进行大量的delete和update,那么可以注意一下如下说明: (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index ...
- 无向图(邻接表实现)DFS_AND_BFS
数据结构选择TreeSet的原因:通过自定义的Compare方法,保证了点元素的唯一性,有序性(方便检验): 传入Set和Map中的元素类似于C中的指针操作,即共享地址,改变其中一个中的元素,与之相关 ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
- 资源:Kafka消息队列下载路径
Kafka下载路径 http://kafka.apache.org/downloads.html
- Docker:Docker常用命令
docker信息 ##查看docker容器版本 docker version ##查看docker容器信息 docker info ##查看docker容器帮助 docker --help 镜像列表 ...