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')

注意:

  1. mail模型有一个强大的字段跟踪系统,可将对应值的变化记录到讨论系统中。
  2. 为了对字段进行监听,只需要将track_visibility 属性设置为onchange(当字段值改变时展示在通知中)
  3. 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里面的消息机制的更多相关文章

  1. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  2. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  3. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  4. OSG消息机制之事件处理概述

    OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...

  5. [转]runtime 消息机制

    原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...

  6. IOS 消息机制(NSNotificationCenter)

    消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...

  7. Android之消息机制Handler,Looper,Message解析

    PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...

  8. Objective-C总Runtime的那点事儿(一)消息机制

    最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎必问,例 如:RunLoop,Block,内存管理等.其他的问题 ...

  9. Windows消息机制详解

    消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...

随机推荐

  1. 01 JumpServer安装

    1.0.环境说明: 操作系统类型 主机名称 用户及密码 角色 eth0(Vmnet8) eth1(Vmnet1) 防火墙状态 selinux centos7.4 controlnode root:12 ...

  2. 96、linux之rpm包定制

    96.1.rpm包定制介绍: 编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. yum安装软件,优点是全自动化安装, ...

  3. Git上传代码遇到的报错

    Git上传代码遇到的报错 1.git上传代码卡住(Total 7072 (delta 2508), reused 6844 (delta 2376), pack-reused 0) git confi ...

  4. 利用ONT测序检测真核生物全基因组甲基化状态

    摘要 甲基化在真核生物基因组序列中广泛存在,其中5mC最为普遍,在真核生物基因组中也有发现6mA.捕获基因组中的甲基化状态的常用技术是全基因组甲基化测序(WGBS)和简化甲基化测序(RRBS),而随着 ...

  5. powerpoint2013去掉图片背景,转存png

    1.打开powerpoint,点击菜单栏的[插入],如图: 2.点击『图像』,如图: 3.上传图片,如图: 4.上传的图片不是png的,现在需要去掉白色背景,保存成png,选中图片,点击菜单栏的『格式 ...

  6. bson的类型

    BSON是JSON的扩展数据类型

  7. 1.3.1、datetime时间-Before、After、Between

    server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system1 uri: ...

  8. Quartz和Spring Task定时任务的简单应用和比较

    看了两个项目,一个用的是Quartz写的定时器,一个是使用spring的task写的,网上看了2篇文章,写的比较清楚,这里做一下留存 链接一.菠萝大象:http://www.blogjava.net/ ...

  9. XCTF easyGo

    拖入ida,发现符号表需要还原一下,载入一个还原符号表的脚本. go这个语言就有点恶心,字符串后面没有反斜杆零,ida识别出来,字符串就会挤在一堆,就很难看,看了某位师傅的wp,觉得这方法不错,就记录 ...

  10. [Kong] basic-auth基本认证及ACL鉴权

    目录 basic-auth 1. Route上启用插件 2. 创建一个Consumer 3. 为Consumer创建凭证 4. 验证凭证 ACL 用户鉴权 1. 在route上启用ACL鉴权插件 2. ...