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发出一个通知,告诉应用 ...
随机推荐
- (1)http基础
HTTP服务基础 • 基于 B/S (Browser/Server)架构的网页服务– 服务端提供网页– 浏览器下载并显示网页 • Hyper Text Transfer Protocol,超文本传输协 ...
- 基于Spring Boot的在线问卷调查系统的设计与实现+论文
全部源码下载 # 基于Spring Boot的问卷调查系统 ## 介绍 > * 本项目的在线问卷调查调查系统是基于Spring Boot 开发的,采用了前后端分离模式来开发. > * 前端 ...
- sql server数据库性能优化之2-避免使用CTE公用表达式的递归【by zhang502219048】
数据库优化中的一个实例,记录一下: 1. 原来用了CTE公用表达式的递归,reads高达约40万,看查询执行计划,使用了Nested Loops: 2. 优化去掉递归,改用其它方式实现,reads降低 ...
- Paxos 图解 (秒懂)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 让Github畅通无阻,FastGithub1.0.0发布
前言 我近半年来被github的抽风虐得没脾气了,虽然我有代理的方式来上网,但代理速度并不理想,而且有时代理服务一起跟着抽风.这时候,我会搜索"github访问不了"相关题材,其中 ...
- Shiro-JWT SpringBoot前后端分离权限认证的一种思路
JWT-Shiro 整合 JWT-与Shiro整合进行授权认证的大致思路 图示 大致思路 将登录验证从shiro中分离,自己结合JWT实现 用户登陆后请求认证服务器进行密码等身份信息确认,确认成功后 ...
- hdu 6092 Rikka with Subset 01背包 思维
dp[i][j]表示前i个元素,子集和为j的个数.d[i][j] = d[i][j] + d[i-1][j-k] (第i个元素的值为k).这里可以优化成一维数组 比如序列为 1 2 3,每一步的dp值 ...
- 【玩转 WordPress】基于 Serverless 搭建个人博客图文教程,学生党首选!
以下内容来自「玩转腾讯云」用户原创文章,已获得授权. 01. 什么是 Serverless? 1. Serverless 官方定义 Serverless 中的 Server是服务器的意思,less 是 ...
- JavaScript基础以及进阶知识
JavaScript基础知识回顾: 目录: 比较运算符 多行字符串,模板字符串 严格模式 函数定义和调用 变量作用域与解构赋值.NameSpace.块级作用域let.const 方法 高阶函数 闭包 ...
- AcWing 220. 最大公约数
给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对. GCD(x,y)即求x,y的最大公约数. #include<bits/stdc++.h> u ...