项目任务

Odoo 项目任务为什么不只是一列列看板:Stage、Personal Stage 和任务状态到底怎么理解

很多人以为 Odoo 项目任务就是拖看板列,但源码层其实把公共阶段、个人阶段和依赖关系拆得很开。本文把它讲清楚。

Odoo 开发 项目
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

Odoo 项目里的任务状态,早就不是一个简单 state 字段在撑着了。

官方现在的核心思路是:

团队协作状态看 stage_id,个人处理状态看 personal stage,任务推进还会受依赖关系影响。

所以你在界面上看到的是看板列,底层表达的却是几层不同语义。


为什么官方不再强调单一 state

项目模块文档里就明确写过:project.task 不再靠旧式 state 驱动,而是以 stage_id 为主。

这背后的设计思想很实用:

  • 团队任务往往不是简单几种固定状态
  • 不同项目的阶段列可能不同
  • 看板列天然更适合协作流程

所以 stage_id 本质上是“团队流程阶段”,不是传统枚举状态。


stage_id 真正在表达什么

在源码里:

  • project.task.stage 通过 group_expand 支持完整看板列展示
  • stage_id 决定任务当前落在哪个团队流程阶段
  • fold 等属性又决定列展示行为

这说明 stage 不是装饰字段,而是项目流程骨架。


为什么还会有 Personal Stage

很多团队协作里,会出现一个常见矛盾:

  • 团队层面任务还在“进行中”
  • 但某个具体成员其实已经“我做完了”或“我先阻塞了”

所以 Odoo 额外设计了:

  • project.task.stage.personal
  • personal_stage_id
  • personal_stage_type_id

这说明系统在承认:

团队共享流程,和个人处理感知,不一定是一回事。

这个设计比很多看起来简单的项目系统更细。


依赖关系为什么会影响你对状态的理解

project.task 里还有:

  • depend_on_ids
  • dependent_ids

这表示任务推进不只取决于它被拖进哪一列,还取决于它是否被前置任务卡住。

所以有些任务“看起来在进行中”,但业务上其实还没真正可执行。


为什么 Odoo 的项目任务不只是看板拖拽

因为除了 stage 之外,它还同时管理:

  • 负责人
  • 子任务
  • 依赖
  • recurrence
  • 附件/封面
  • 活动/协作消息

也就是说,看板只是入口,不是全部。


新手最容易误解的 4 件事

1. 以为 stage 就是 old-school state

它更偏团队流程列,而不是死枚举。

2. 以为个人状态和团队状态必须一致

Odoo 专门拆出了 personal stage,说明两者本来就可能不同。

3. 以为拖进下一列就代表任务一定可做

依赖关系可能还没满足。

4. 以为项目模块只是轻量看板

其实它已经在往协作执行系统走。


一句话记忆法

Stage 负责团队流程,Personal Stage 负责个人视角,依赖关系决定任务是不是真的能往前走。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。