odoo内部的消息机制是十分便捷的,可以使用odoo 系统消息进行沟通,也可以通过odoo代发邮件进行沟通。

通过点击系统右上角的用户名,在弹出的下拉框中选择 ‘首选项‘ ,我们可以设置email选项:使用邮件处理 或 在Odoo内处理。这里我们选择在erp内使用

如果希望使用邮件处理消息 那么需要配置odoo 的邮件服务,可以参考这篇文章链接:

https://blog.csdn.net/Srekal/article/details/114824151

1.odoo里面字段追踪消息通知机制:

 一、使用方式:1、在定义模型的py文件里继承mail.threadshix模型:

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

为了对字段进行监听,只需要将track_visibility 属性设置为onchange(当字段值改变时展示在通知中)
always(该值总是会被显示在通知中,一般用于让通知内容更好理解)

注意:

One2many和Many2many字段不生效 具体原因可以查看odoo源码中odoo/addons/mail/models/mail_tracking_value.py 中45行create_tracking_values函数中的处理

如果想要实现记录Many2many字段,请参考我这篇文章: https://blog.csdn.net/weixin_44863237/article/details/124169556​​​​​​​

二、在xml文件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>

效果:

2.odoo里面消息通知机制:

1.发送消息

message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, content_subtype='html', **kwargs)

在一个会话列表中发布一条新消息,返回新的mail.message ID

  • body (str) - 消息内容,一般是原始html,会自动进行过滤
  • message_type (str) - 与mail_message.type字段对应
  • content_subtype (str) - 如果是plaintext(纯文本),会被转成html
  • parent_id (int) - 用于当在消息列表时以私信形式回复时使用,对应父级partner
  • attachments (list(tuple(str,str))) - 使用(name,content)元组传送的附件列表,content是base64encode过的
  • **kwargs - 其他的参数用于创建新mail.message记录

2.接收消息

1.message_new(msg_dict, custom_values=None)

当收到的消息不属于一个已存在的讨论列表时由message_process调用

  • msg_dict (dict) - 一个包含email内容和附件的映射表,具体看:message_process, mail.message.parse
  • custom_values (dict) - 可选参数,附加的用于传递给记录创建的create()方法的字段,注意这里面的值可能会覆盖邮件里的内容。

2.message_update(msg_dict, update_vals=None)

当一个收到已存在的讨论列表的消息时由message_process调用

  • template_id - 用于渲染消息主体的模板id
  • **kwargs - 用于创建mail.compose.message(继承自mail.message) wizzard的参数

3.关注者管理

1.message_subscribe(partner_ids=None, channel_ids=None, subtype_ids=None, force=True)添加参与者

  • partner_ids (list(int)) - 当前记录对应的订阅的伙伴id列表
  • channel_ids (list(int)) - 订阅的渠道列表
  • subtype_ids (list(int)) - 所订阅的子类,默认None
  • force - 当值为true时会根据subtype来创建新关注关系(原关注关系会先删除)

返回:boolean 是否成功

2.message_subscribe_users(user_ids=None, subtype_ids=None) 将message_subscribe封装,只是用用户替代partner

  • user_ids (list(int)) - 当前记录对应的订阅的用户id列表,如果是None订阅当前用户
  • subtype_ids (list(int)) - 渠道或合作伙伴所订阅的子类id

3.message_unsubscribe(partner_ids=None, channel_ids=None) 将合作伙伴从记录的订阅列表移除

  • partner_ids (list(int)) - 订阅该记录的伙伴id列表(官方是这样的,也许应该是取消订阅)
  • channel_ids (list(int)) - 订阅该记录的渠道列表(官方是这样的,也许应该是取消订阅)

4.message_unsubscribe_users(user_ids=None) 封装message_unsubscribe,用user替代partner

  • user_ids (list(int)) - 取消订阅的用户id列表,为空时用当前用户
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)

odoo活动日程安排

活动是mail模块中的一部分,我们可通过继承mail.activity.mixin实现在chatter中选择性的启用该功能。与mail.thread模型类似,mail.activity.mixin也是抽象模型。

活动有不同的类型。默认我们可以创建诸如Email、Call、Meeting和To-Do。我们可以在Settings | Technical | Email | Activity Types添加新的活动类型。

如果你想实现代码自动关联活动,我们可以通过mail.activity.mixin模型中的activity_schedule()方法实现。如下:

    @api.modeldef create(self, vals_list):res = super(PurchaseApplication, self).create(vals_list)res.activity_schedule('mail.mail_activity_data_todo', summary='到期提醒', date_deadline=res.reminder_time1,user_id=self.env.user.id)return res

参考文章:https://www.cnblogs.com/1314520xh/p/14646061.html

https://www.jianshu.com/p/84c6518d7dbf

补充:oe_chatter类的作用及使用方式

https://en.ngasturi.id/2021/02/10/how-to-record-the-data-changes-in-odoo/

odoo14 mail.thread邮件消息机制(发送消息、字段变化跟踪记录)mail.activity.mixin安排活动相关推荐

  1. Android 手机卫士--解析json与消息机制发送不同类型消息

    本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...

  2. mfc编程消息机制中消息汇总

    做VC开发必须熟悉消息机制,笔试面试重点,自己在这方面很欠缺,搜集学习一下 WM_CREATE CreateWindow 初始化工作 GetMessage 遇到WM_QUIT,程序结束 Dispatc ...

  3. Threadx 消息队列-发送消息_tx_queue_send

    消息队列-发送消息_tx_queue_send 1,发送消息会插入到队列尾部. 2,如果消息队列有挂起的接收线程,发送消息时,可以直接把消息放到接收线程的缓冲中,这可以降低消息传递延时. TX_THR ...

  4. 微信小程序订阅消息定时发送消息

    微信小程序订阅消息定时发送消息 本人专注使用云开发,实现一个前端可以做后端以及整个项目的部署与上线. 如果觉得我讲的好就可以给我点个赞.也可以加我微信了解详情. 1.我们先要了解什么是订阅消息 而现在 ...

  5. iOS的消息机制和消息转发

    1.消息机制 RunTime简称运行时.就是系统在运行的时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 ).编译完成之后直接 ...

  6. 融云发送图片消息_发送消息

    发送消息 文本消息¶ import { sendMessage, ConversationType, ObjectName } from "rongcloud-react-native-im ...

  7. java给qq发消息_QQ发送消息

    我们做一个小程序,简单实现QQ发送消息的功能. 先定义一个消息类,里面有消息的属性(来自哪里,发送到哪,消息内容).然后定义一个测试类测试我们的运行结果,输出发送消息的内容.测试类里面需要一个Map来 ...

  8. 环信服务器发送消息ext,发送消息

    发送消息 聊天相关 API,可以发送文本消息,发送图片消息,发送语音消息,发送视频消息,发送透传消息和发送扩展消息. 发送文件类型消息要先把文件上传到环信服务器,参考文档:文件上传下载 REST接口发 ...

  9. mfc大观之五、六(消息机制和消息运行)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 写过windows程序的朋友都知道,win32主要是利用消息进行界面的编写的.那么在mfc中, ...

最新文章

  1. 用C语言解“分段计算居民水费”题
  2. 安装Cornerstone3.1注意点
  3. 灵活使用DataView
  4. GBDT和XGBoost
  5. 【Elasticsearch】需要监控的 10 大 Elasticsearch 指标
  6. (1)安装----anaconda3下配置pyspark【单机】
  7. oracle删除临时表空间语句,Oracle中临时表空间的清理
  8. ORA-01476: divisor is equal to zero解决方法
  9. java前后端分离(增删查改)
  10. 【LVGL】animation动画路径方式介绍
  11. .bss段和.data段引起的文件大小增加
  12. 信息 按顺序打印commit_Git 工作流,看这一篇就够了
  13. 【Android Gradle 插件】Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )
  14. 【Android -- Material Design】CollapsingToolbarLayout 的基本使用
  15. android 3d车辆轨迹,极限汽车轨迹3D游戏
  16. 读叔本华之《人生的智慧》
  17. 使用CStdioFile::ReadString来逐行读取文件
  18. 现在的你对未来什么规划?
  19. Android 7.0 删除原生输入法(AOSP)更换系统默认输入法
  20. 深度学习mask掩码机制

热门文章

  1. python处理PDF合并、拆分、删除、转换
  2. 把电脑磁盘克隆到u盘里,磁盘如何克隆到u盘
  3. 熟练使用flex布局
  4. C语言中实用的子函数(持续加料)
  5. 事业单位招聘信息在哪看
  6. MiniGUI字体放大、控件字体颜色的问题(转)
  7. Excel如何快速将多张图片插入的表格中?
  8. linux 日志回滚,Linux 下的日志回滚机制探讨
  9. 【python爬虫】第7章——验证码处理
  10. Springboot整合mybatis原理