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