• dtcloud 的消息机制(二)


    四、消息管理-子类型(subtype)
    子类型使您可以更精细地控制消息。子类型充当通知的分类系统,允许文档的订阅者自定义他们希望接收的通知的子类型.

    @api.multi
        def alarm_reminder(self):
            record = self.search([])
            for rec in record:
                msg = '示例1: %s, 示例2: %s' % (rec.name, rec.product_id.name)
                if rec.product_expiry_alert:
                    rec.message_post(body=msg, subtype='mail.mt_comment')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    mail.mt_comment: 给模型单据的关注者发消息
    五、自定义通知
    向关注者发送通知时,在模板中添加按钮以允许直接从电子邮件中进行快速操作会非常有用。即使是直接链接到记录表单视图的简单按钮也很有用;但是在大多数情况下,您不想向门户用户显示这些按钮。
    通知系统允许通过以下方式自定义通知模板:

    显示访问按钮:这些按钮在通知电子邮件的顶部可见,并允许收件人直接访问记录的表单视图
    显示关注按钮:这些按钮允许收件人直接快速订阅记录
    显示取消关注按钮:这些按钮允许收件人直接快速取消订阅记录
    显示自定义操作按钮:这些按钮是对特定路线的调用,并允许您直接从电子邮件中执行一些有用的操作(即将潜在客户转换为机会,验证费用经理的费用表等)

    _notify_get_groups(message, groups)
    
    • 1

    根据已更新的值,给出记录上的更改所触发的子类型。

    _notify_get_action_link(self, link_type, **kwargs)
    可以通过调用函数自动生成操作列表中的 url :

    例子

    让我们在商务旅行状态更改通知中添加一个自定义按钮;此按钮会将状态重置为草稿,并且仅对(虚构)组 Travel Manager ( business.group_trip_manager)的成员可见

    class BusinessTrip(models.Model):
        _name = 'business.trip'
        _inherit = ['mail.thread', 'mail.alias.mixin']
        _description = 'Business Trip'
    
        # Pevious code goes here
    
        def action_cancel(self):
            self.write({'state': 'draft'})
    
        def _notify_get_groups(self, message, groups):
            """ Handle Trip Manager recipients that can cancel the trip at the last
            minute and kill all the fun. """
            groups = super(BusinessTrip, self)._notify_get_groups(message, groups)
    
            self.ensure_one()
            if self.state == 'confirmed':
                app_action = self._notify_get_action_link('method',
                                    method='action_cancel')
                trip_actions = [{'url': app_action, 'title': _('Cancel')}]
    
            new_group = (
                'group_trip_manager',
                lambda partner: bool(partner.user_ids) and
                any(user.has_group('business.group_trip_manager')
                for user in partner.user_ids),
                {
                    'actions': trip_actions,
                })
    
            return [new_group] + groups
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    六、覆盖默认值
    您可以通过多种方式自定义mail.thread模型的动作,如:

    _mail_post_access(模型属性)
    能够在模型上发布消息所需的访问权限;默认情况下需要write访问权限,也可以设置read。
    如:
    在这里插入图片描述
    conrext 参数:
    这些上下文参数可用于mail.thread在调用create()或 write()(或可能有用的任何其他方法)在一定程度上控制自动订阅或字段跟踪等功能。
    在这里插入图片描述

    mail_create_nosubscribe: 在 create 或 message_post 时,不为当前用户订阅记录线程
    mail_create_nolog:在创建时,不要记录自动“<Document> created”消息
    mail_notrack:在创建和写入时,不执行值跟踪创建消息
    tracking_disable:在创建和写入时,不执行 MailThread 功能(自动订阅、跟踪、发布……)
    mail_auto_delete:自动删除邮件通知;默认为真
    mail_notify_force_send:如果要发送的邮件通知少于 50 条,则直接发送而不使用队列;默认为真
    mail_notify_user_signature:在电子邮件通知中添加当前用户签名;默认为真
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    邮件别名
    别名是可配置的电子邮件地址,链接到特定记录(通常继承mail.alias.mixin模型),Mixin 模型从一开始就是为扩展而构建的,当通过电子邮件联系时将创建新记录。好处是使您的系统可以从外部访问,允许用户或客户在您的数据库中快速创建记录,而无需连接到 Odoo。

    七、网站功能
    访客追踪
    该类utm.mixin可用于通过指向指定资源的链接中的参数来跟踪在线营销/传播活动。mixin 为您的模型添加了 3 个字段:

    campaign_id:utm.campaign 模型的Many2one字段(即Christmas_Special、Fall_Collection等)
    source_id:utm.source 模型的Many2one字段 (即搜索引擎、邮件列表等)
    medium_id:utm.medium 模型的Many2one字段 (即 Snail Mail、电子邮件、社交网络更新等)
    
    • 1
    • 2
    • 3

    这些模型只有一个字段name(即它们只是用来区分活动,但没有任何特定行为)。

    一旦客户使用 url 中设置的这些参数访问您的网站,就会在访问者的网站中为这些参数设置三个 cookie . 一旦从网站创建了继承 utm.mixin 的对象(即潜在客户表单、工作申请等),utm.mixin 代码就会启动并从 cookie 中获取值以将它们设置在新记录中。完成此操作后,您可以在定义报告和视图(分组依据等)时将活动/来源/媒体字段随意使用。

    要扩展此行为,只需将关系字段添加到模型并扩展函数tracking_fields():

    class UtmMyTrack(models.Model):
        _name = 'my_module.my_track'
        _description = 'My Tracking Object'
    
        name = fields.Char(string='Name', required=True)
    
    
    class MyModel(models.Models):
        _name = 'my_module.my_model'
        _inherit = ['utm.mixin']
        _description = 'My Tracked Object'
    
        my_field = fields.Many2one('my_module.my_track', 'My Field')
    
        @api.model
        def tracking_fields(self):
            result = super(MyModel, self).tracking_fields()
            result.append([
            # ("URL_PARAMETER", "FIELD_NAME_MIXIN", "NAME_IN_COOKIES")
                ('my_field', 'my_field', 'odoo_utm_my_field')
            ])
            return result
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    这将通知系统创建一个名为odoo_utm_my_field的 cookie 。

    可以在以下模型中找到具体的集成示例:

    crm.lead在 CRM ( crm ) 应用程序中
    hr.applicant在招聘流程 ( hr_recruitment ) 申请中
    helpdesk.ticket在帮助台(帮助台- 仅限 Odoo Enterprise)应用程序中

                             中亿丰数字:姜振建  
    
    • 1
  • 相关阅读:
    2023第二届陇剑杯网络安全大赛 SS Writeup
    python类方法和静态方法区别详细讲解
    300. 最长递增子序列
    Linux驱动开发入门记录——(三)虚拟输入设备
    关于中间件技术
    Linux常见的物理设备数据备份和负载均衡模式
    Python | Leetcode Python题解之第198题打家劫舍
    《计算机视觉中的多视图几何》笔记(14)
    数据结构(一)综述
    大数据运维实战第六课 手动模式构建双 Namenode+Yarn 的 Hadoop 集群(下)
  • 原文地址:https://blog.csdn.net/weixin_44565926/article/details/125581421