You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Odoo16中Activities使用及任务通知框配置的技术问询

Odoo16中Activities使用及任务通知框配置的技术问询

嘿,我来帮你理清这个问题~

一、你提到的通知框组件信息

  • 组件名称:这个通知框是Odoo官方的**Activity(活动)**组件,后台对应的核心模型是mail.activity,前端集成在mail和web模块中,就是界面右上角铃铛图标点开后的活动通知面板。
  • 所属模块:核心依赖mail模块,同时web模块提供前端渲染支持。
  • 默认显示条件:默认展示当前登录用户关联的未完成活动,包括:
    • 未读的新活动通知
    • 即将到期(默认24小时内)的活动
    • 已逾期的活动

二、针对你的任务分配模型配置通知的步骤

你的任务模型包含task、user_id、deadline、status(new/seen)字段,要让通知框显示新任务/即将过期的任务,按照以下方式配置:

1. 给任务模型添加活动关联能力

首先需要让你的任务模型继承Odoo的邮件线程和活动混合类,这样才能关联活动。修改模型代码:

from odoo import models, fields, api
from dateutil.relativedelta import relativedelta

class TaskAssignment(models.Model):
    _name = 'task.assignment'
    _description = 'Task Assignment'
    _inherit = ['mail.thread', 'mail.activity.mixin']  # 继承这两个类开启活动能力

    task = fields.Char(string='Task', required=True)
    user_id = fields.Many2one('res.users', string='Assigned User', required=True)
    deadline = fields.Datetime(string='Deadline')
    status = fields.Selection([('new', 'New'), ('seen', 'Seen')], string='Status', default='new')

2. 自动创建对应活动(两种方式可选)

方式一:代码触发(灵活度高)

在模型中添加方法,当任务是新状态或即将到期时自动创建活动:

@api.onchange('status', 'deadline')
    def _auto_create_activity(self):
        for rec in self:
            # 针对新任务创建活动
            if rec.status == 'new' and not rec.activity_ids:
                rec.activity_schedule(
                    'mail.mail_activity_data_todo',  # 使用默认的待办活动类型
                    deadline=rec.deadline,
                    user_id=rec.user_id.id,
                    note=f"新任务提醒:{rec.task}"
                )
            # 针对即将到期(24小时内)的任务创建提醒活动
            if rec.deadline and fields.Datetime.now() + relativedelta(hours=24) >= rec.deadline and rec.status != 'seen':
                # 避免重复创建相同提醒
                existing_expire_activity = rec.activity_ids.filtered(lambda a: a.summary == "任务即将到期")
                if not existing_expire_activity:
                    rec.activity_schedule(
                        'mail.mail_activity_data_todo',
                        deadline=rec.deadline,
                        user_id=rec.user_id.id,
                        summary="任务即将到期",
                        note=f"任务:{rec.task} 即将到期,截止时间:{rec.deadline}"
                    )
方式二:无代码自动化规则(适合非开发人员)

进入设置 -> 自动化 -> 自动化规则,创建两条规则:

  • 新任务提醒规则:
    • 触发条件:当记录创建,且状态为new
    • 动作:选择「创建活动」,设置活动类型为待办、分配用户为user_id、截止日期为deadline、备注填写新任务提示
  • 即将到期提醒规则:
    • 触发条件:当记录满足「截止日期在未来24小时内」且状态为new
    • 动作:选择「创建活动」,设置活动类型为待办、分配用户为user_id、备注填写即将到期提示

3. 标记任务为已读时关闭活动

当用户把任务状态改为seen后,要自动关闭对应活动,避免通知一直显示:

@api.onchange('status')
    def _close_activity_when_seen(self):
        for rec in self:
            if rec.status == 'seen':
                rec.activity_ids.action_done()  # 标记所有关联活动为已完成

4. 通知框自动展示

配置完成后,用户登录后就能在右上角铃铛里看到:

  • 新任务的未读活动通知,会高亮显示
  • 即将到期/已逾期的活动会有对应的时间标识(逾期会显示红色标记)

备注:内容来源于stack exchange,提问作者NqanVo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 10:32:56