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

注意:

  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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM