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. Pytorch线性规划模型 学习笔记(一)

    Pytorch线性规划模型 学习笔记(一) Pytorch视频学习资料参考:<PyTorch深度学习实践>完结合集 Pytorch搭建神经网络的四大部分 1. 准备数据 Prepare d ...

  2. 三、DNS子域授权

    前提:准备两台虚拟机:父域: www.tedu.cn(虚拟机A)子域:www.bj.tedu.cn(虚拟机B) 一.在两台虚拟机上安装域名解析软件 root@pc207 ~]# yum -y inst ...

  3. 【SQLite】教程04-SQLite数据类型

    SQLite 存储类 每个存储在 SQLite 数据库中的值都具有以下存储类之一: 存储类 描述 NULL 值是一个 NULL 值. INTEGER 值是一个带符号的整数,根据值的大小存储在 1.2. ...

  4. 2.docker下centos镜像

    1.下载并运行 # 交互模式下载并运行centos容器 $ docker run -it centos:latest /bin/bash 1.1 配置centos的环境别名 $ vi /etc/bas ...

  5. Arduino参考手册-函数和变量及电路图

    标题: Arduino参考手册-函数和变量及电路图 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#Arduino,#参考手册,#函数,#变量] 目录: [Arduino] 日期: ...

  6. C#WebService的创建与发布

    VS中新建项目-Web-ASP.NET Web应用程序 然后确定,选择空模版就可以了 其中CRMService.asmx是点击项目新建Web服务(asmx) 这样基本的功能就能用了,然后就是发布 点击 ...

  7. CosId 1.0.3 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  8. Linux中系统时间同步ntpdate简介

    Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步.所 ...

  9. 视频云峰会|“科技 X 艺术” 的颗粒度体验是什么?

    科技日新月异,交互艺术新门类也随之蓬勃,当代艺术创作者不断凭借其想象力和跨学科能力,致力科技与艺术的融合创作. 7 月 10 日,在北京,2021 阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁 ...

  10. 使用curl断点续传下载文件

    办公网络网速不是很好,使用Chrome下载一些软件时不时会中断,恶心的是Chrome居然不支持断点续传下载(为什么chrome的下载不支持断点续传呢?),迅雷自然是不能装的,那怎么办?还好我有大名鼎鼎 ...