关于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、备注填写即将到期提示
- 触发条件:当记录满足「截止日期在未来24小时内」且状态为
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
相关产品推荐
相关产品推荐

