Odoo任务管理系统定制:看板视图与自动化规则配置
你是否还在为团队任务跟踪混乱而烦恼?项目进度不透明、任务状态更新滞后、重复性操作占用大量时间?本文将带你从零开始定制Odoo任务管理系统的看板视图与自动化规则,让团队协作效率提升50%。读完本文后,你将能够:自定义任务看板布局、设置自动化工作流规则、实现任务状态自动流转,并掌握高级配置技巧。
看板视图定制基础
Odoo的看板视图(Kanban View)是一种直观的任务可视化工具,通过拖拽操作即可轻松管理任务状态。在Odoo中,看板视图的定义主要通过XML文件实现,位于各模块的views目录下。
看板视图文件结构
Odoo的看板视图定义通常包含在XML文件中,如addons/project/views/project_task_views.xml。一个基本的看板视图定义结构如下:
<record id="project_kanban_view_group_stage" model="ir.ui.view">
<field name="name">project.task.kanban</field>
<field name="model">project.task</field>
<field name="arch" type="xml">
<kanban string="Tasks" class="o_kanban_mobile">
<!-- 看板列定义 -->
<field name="stage_id" />
<!-- 看板卡片内容 -->
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_card">
<field name="name" />
<field name="user_ids" widget="many2many_tags" />
</div>
</t>
</templates>
</kanban>
</field>
</record>
上述代码定义了一个任务看板视图,包含阶段字段(stage_id)和卡片模板,显示任务名称和负责人信息。
自定义看板列与卡片
要定制看板视图,首先需要了解看板列的定义方式。在Odoo中,看板列通常对应任务的"阶段"(Stage),通过修改阶段字段的上下文可以自定义列的显示方式:
<field name="stage_id" context="{'group_by': 'stage_id'}"/>
你可以通过继承现有看板视图来添加自定义字段。例如,在任务卡片中显示优先级和截止日期:
<record id="project_task_kanban_view_inherit" model="ir.ui.view">
<field name="name">project.task.kanban.inherit</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.project_kanban_view_group_stage"/>
<field name="arch" type="xml">
<xpath expr="//templates/t/t[@name='kanban-box']/div" position="inside">
<div class="oe_kanban_bottom">
<field name="priority" widget="priority"/>
<field name="date_deadline" widget="date"/>
</div>
</xpath>
</field>
</record>
自动化规则配置详解
Odoo的自动化规则(Automation Rules)功能允许用户设置当特定条件满足时自动执行某些操作,无需人工干预。这一功能通过base_automation模块实现,配置界面位于设置 > 技术 > 自动化 > 自动化规则。
自动化规则基本结构
一个完整的自动化规则包含三个核心部分:触发条件(Trigger)、过滤条件(Filter)和执行动作(Action)。在Odoo的XML定义中,自动化规则通过base.automation模型记录实现:
<record id="auto_assign_task_rule" model="base.automation">
<field name="name">Auto Assign Task</field>
<field name="model_id" ref="project.model_project_task"/>
<field name="trigger">on_create</field>
<field name="filter_domain">[('user_ids', '=', False)]</field>
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Assign to Team Lead',
'model_id': ref('project.model_project_task'),
'state': 'code',
'code': 'record.user_ids = record.project_id.user_id',
})]"/>
</record>
上述代码定义了一个自动化规则:当创建新任务且未分配负责人时,自动将任务分配给项目负责人。
常用触发条件
Odoo提供了多种触发条件(Trigger),适用于不同场景:
| 触发条件 | 说明 | 使用场景 |
|---|---|---|
| on_create | 记录创建时触发 | 新任务自动分配 |
| on_write | 记录更新时触发 | 任务状态变更通知 |
| on_unlink | 记录删除时触发 | 任务删除日志 |
| on_time | 定时触发 | 逾期任务提醒 |
| on_change | 字段值变更时触发 | 优先级变更通知 |
你可以在addons/base_automation/views/base_automation_views.xml中查看所有触发条件的定义。
配置执行动作
自动化规则可以执行多种动作,包括更新记录、发送邮件、创建关联记录等。以下是一些常用动作类型:
- 更新记录:修改当前记录的字段值
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Set High Priority',
'type': 'ir.actions.server',
'model_id': ref('project.model_project_task'),
'state': 'values',
'values': "{'priority': '2'}"
})]"/>
- 发送邮件:当任务逾期时发送提醒邮件
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Send Overdue Reminder',
'type': 'ir.actions.server',
'model_id': ref('project.model_project_task'),
'state': 'email',
'template_id': ref('project.mail_template_task_overdue'),
})]"/>
- 创建记录:当任务完成时自动创建后续任务
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Create Follow-up Task',
'type': 'ir.actions.server',
'model_id': ref('project.model_project_task'),
'state': 'object_create',
'model': 'project.task',
'fields_lines': [
('field_name', 'name', 'Follow-up: ' + record.name),
('field_name', 'project_id', record.project_id.id),
('field_name', 'stage_id', record.project_id.type_ids[0].id),
]
})]"/>
实战案例:任务状态自动流转
下面通过一个完整案例演示如何配置看板视图和自动化规则,实现任务状态的自动流转和通知。
步骤1:自定义任务看板视图
首先,我们需要自定义任务看板,添加"优先级"和"截止日期"字段。创建一个新的XML文件addons/project/views/project_task_kanban_custom.xml:
<odoo>
<record id="project_task_kanban_custom" model="ir.ui.view">
<field name="name">project.task.kanban.custom</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.project_kanban_view_group_stage"/>
<field name="arch" type="xml">
<xpath expr="//templates/t/t[@name='kanban-box']/div" position="inside">
<div class="d-flex justify-content-between align-items-center mt-2">
<field name="priority" widget="priority" class="mr-2"/>
<field name="date_deadline" widget="date" class="text-muted"/>
</div>
<div class="oe_kanban_bottom">
<field name="tag_ids" widget="many2many_tags" class="oe_kanban_list_many2many"/>
</div>
</xpath>
</field>
</record>
</odoo>
步骤2:配置自动化规则
接下来,我们配置两个自动化规则:
- 当任务标记为"已完成"时,自动发送通知给项目负责人
- 当任务逾期未完成时,自动将优先级提升为"高"
创建自动化规则定义文件addons/project/data/automation_rules.xml:
<odoo>
<!-- 规则1:任务完成通知 -->
<record id="task_completed_notification" model="base.automation">
<field name="name">Task Completed Notification</field>
<field name="model_id" ref="project.model_project_task"/>
<field name="trigger">on_create_or_write</field>
<field name="trigger_field_ids" eval="[(4, ref('project.field_project_task__stage_id'))]"/>
<field name="filter_domain">[('stage_id.is_closed', '=', True)]</field>
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Send Completion Email',
'model_id': ref('project.model_project_task'),
'state': 'email',
'template_id': ref('project.mail_template_task_completed'),
'email_from': '${object.user_id.email or user.email}',
'email_to': '${object.project_id.user_id.email}',
})]"/>
</record>
<!-- 规则2:逾期任务优先级提升 -->
<record id="overdue_task_priority" model="base.automation">
<field name="name">Overdue Task Priority Boost</field>
<field name="model_id" ref="project.model_project_task"/>
<field name="trigger">on_time</field>
<field name="trg_date_id" ref="project.field_project_task__date_deadline"/>
<field name="trg_date_range">1</field>
<field name="trg_date_range_type">day</field>
<field name="trg_date_range_mode">before</field>
<field name="filter_domain">
[('stage_id.is_closed', '=', False), ('priority', '!=', '2')]
</field>
<field name="action_server_ids" eval="[(0, 0, {
'name': 'Set High Priority',
'model_id': ref('project.model_project_task'),
'state': 'values',
'values': "{'priority': '2'}"
})]"/>
</record>
</odoo>
步骤3:应用配置
最后,更新模块清单文件addons/project/manifest.py,添加新创建的视图和数据文件:
{
'name': 'Project Management',
'version': '17.0.1.0.0',
'depends': ['base', 'mail', 'rating', 'base_automation'],
'data': [
'views/project_task_views.xml',
'views/project_task_kanban_custom.xml', # 添加自定义看板视图
'data/automation_rules.xml', # 添加自动化规则
# 其他数据文件...
],
# 其他配置...
}
高级配置技巧与最佳实践
使用域名过滤条件
Odoo的自动化规则支持复杂的域名(Domain)过滤条件,使用Python表达式可以实现更灵活的过滤逻辑。例如,只对特定项目应用自动化规则:
<field name="filter_domain">[('project_id.id', 'in', [ref('project.project_project_1'), ref('project.project_project_2')])]</field>
调试自动化规则
如果自动化规则不按预期执行,可以通过以下方式进行调试:
- 检查规则的触发条件和过滤条件是否正确
- 在动作中添加日志记录:
<field name="code">
log('Task %s updated to stage %s' % (object.name, object.stage_id.name))
record.priority = '2'
</field>
- 查看Odoo服务器日志文件,位于
/var/log/odoo/odoo-server.log
性能优化建议
对于包含大量任务的系统,不当的自动化规则可能会影响性能。以下是一些优化建议:
- 限制触发字段:只在必要字段变更时触发规则
<field name="trigger_field_ids" eval="[(4, ref('project.field_project_task__stage_id'))]"/>
- 使用高效的过滤条件,避免全表扫描
- 对于定时触发的规则,合理设置执行频率
- 合并相似规则,减少重复执行
总结与展望
通过本文的介绍,你已经掌握了Odoo任务管理系统中看板视图定制和自动化规则配置的核心技能。从基本的看板视图修改到复杂的自动化工作流设置,这些工具可以帮助你构建高效的任务管理流程。
未来,你可以进一步探索:
- 结合Odoo的报表功能,创建自定义任务分析仪表板
- 使用Odoo Studio模块进行可视化配置,无需编写代码
- 开发自定义插件,扩展自动化规则的触发条件和动作类型
要深入学习Odoo的视图定制和自动化功能,可以参考以下资源:
- 官方文档:addons/base_automation/views/base_automation_views.xml
- 社区教程:README.md
- 示例代码:addons/project/views/project_task_views.xml
希望本文能够帮助你构建更高效的任务管理系统,提升团队协作效率。如有任何问题,欢迎在社区论坛提问交流。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



