Flowable26待签、待办、转办、委派-------------持续更新中

1. 待签 (Candidate Task / 任务池)

概念解读:
“待签”指的是一个任务已经被创建,但还没有分配给一个具体的人,而是分配给了一组人或多个候选人。这组人中的任何一个都有资格去“签收”(或称为“认领”)这个任务。一旦有人签收,任务就从“待签”状态变为这个人的“待办”状态,其他人就无法再处理了。
这就像一个公共任务池,大家都可以从池子里捞任务。
Flowable 实现:
在 BPMN 模型中,通过 candidateUsers 或 candidateGroups 属性来定义。
flowable:candidateUsers=“user1,user2,user3”:指定多个候选用户。
flowable:candidateGroups=“managers,hr_group”:指定候选用户组。
核心 API 操作:
查询待签任务:查询某个用户或用户组可以认领的任务。

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery()
                              .taskCandidateUser("张三") // 查询张三作为候选人的任务
                              .list();
// 或者查询 "managers" 组的所有待签任务
List<Task> groupTasks = taskService.createTaskQuery()
                                   .taskCandidateGroup("managers")
                                   .list();

签收/认领任务 (Claim):将任务从任务池中拿出来,分配给自己。

String taskId = "some-task-id";
String userId = "张三";
taskService.claim(taskId, userId);

操作效果:任务的 assignee 字段会从 null 变为 张三。任务从 张三 的待签列表消失,出现在他的待办列表中。
应用场景:
客服派单:所有客服都能看到新来的工单,谁有空谁就接单。
部门经理审批:部门内有多个经理(正/副职),任何一个经理处理都可以。

2. 待办 (Assigned Task / 个人任务)

概念解读:
“待办”指的是一个任务已经明确地分配给了某一个具体的用户。只有这个被指定的办理人(Assignee)才能看到并处理这个任务。
Flowable 实现:
在 BPMN 模型中,通过 assignee 属性来定义。
flowable:assignee=“张三”:直接指定办理人。
flowable:assignee=“${starter}”:使用表达式动态指定,例如指定为流程发起人。
任务也可以通过“签收”操作从“待签”变为“待办”。
核心 API 操作:
查询待办任务:查询分配给某个用户的所有任务。

TaskService taskService = processEngine.getTaskService();
String userId = "张三";
List<Task> tasks = taskService.createTaskQuery()
                              .taskAssignee(userId) // 精确查询办理人是张三的任务
                              .list();

完成任务 (Complete):办理人处理完任务,推动流程往下个节点走。

String taskId = "some-task-id";
// 可以传入流程变量
Map<String, Object> variables = new HashMap<>();
variables.put("approved", true);
taskService.complete(taskId, variables);

操作效果:任务被完成,从运行时任务表 (ACT_RU_TASK) 中删除,记录到历史任务表 (ACT_HI_TASKINST)。流程引擎会根据定义的流向继续执行。
应用场景:
直线汇报:员工提交报销,直接由其直属上级审批。
任务签收后:客服A签收了工单,这个工单就成了客服A的个人待办。

3. 转办 (Transfer / Reassign)

概念解读:
“转办”是一个权责转移的操作。当任务的当前办理人(Assignee)因为某些原因(如休假、离职、非其职责范围)无法处理该任务时,可以将任务完全转交给另一个人。
转办后,原办理人不再对该任务有任何关系,新的办理人成为唯一的负责人。
Flowable 实现:
本质上就是修改任务的 assignee 字段。
核心 API 操作:
设置新的办理人 (setAssignee)

TaskService taskService = processEngine.getTaskService();
String taskId = "some-task-id";
String originalAssignee = "张三"; // 当前办理人
String newAssignee = "李四";      // 新的办理人

// 假设张三要把任务转给李四
taskService.setAssignee(taskId, newAssignee);

操作效果:任务的 assignee 字段从 张三 变为 李四。任务从 张三 的待办列表消失,出现在 李四 的待办列表中。任务的所有权彻底转移。

应用场景:
审批人休假:经理A休假,将手头所有紧急审批任务转办给代理经理B。
职责划分错误:一个IT问题被错误地分配给了前端开发,前端开发发现是后端问题,于是转办给后端开发。

4. 委派 (Delegate)

概念解读:
“委派”是一个协同请求的操作。任务的原始办理人(Owner)仍然是这个任务的负责人,但他/她需要另一个人(Assignee)的协助来完成部分工作。
委派后,任务会临时出现在被委派人的待办列表中。被委派人处理完毕后,需要将任务“归还”给原始办理人,由原始办理人最终完成(Complete)该任务。
Flowable 实现:
Flowable 通过 owner 和 assignee 两个字段来精巧地实现委派。
Owner:任务的真正主人,拥有最终决定权。
Assignee:当前临时的办理人,即被委派者。

核心 API 操作:
委派任务 (Delegate)

TaskService taskService = processEngine.getTaskService();
String taskId = "some-task-id";
String owner = "张三"; // 任务原主
String delegatedUser = "王五"; // 被委派者

// 张三将任务委派给王五去处理
taskService.delegateTask(taskId, delegatedUser);

操作效果:
任务的 owner 字段被设置为 张三。
任务的 assignee 字段被设置为 王五。
任务出现在 王五 的待办列表中。
解决/归还任务 (Resolve):被委派者完成其辅助工作后,将任务归还。

// 王五处理完后,归还任务
taskService.resolveTask(taskId);

操作效果:
任务的 assignee 字段恢复为 owner 的值(即 张三)。
任务的 owner 字段变回 null。
任务重新回到 张三 的待办列表中,等待他最终 complete。
应用场景:
财务审批需要补充材料:财务经理在审批报销单时,发现发票不清晰,于是将任务委派给申请人,让他重新上传发票。申请人上传后,任务回到财务经理处继续审批。
技术评审:架构师在评审一个方案时,不确定某个细节,将任务委派给一位资深开发,让他调研并给出意见。资深开发回复意见后,任务回到架构师处,由架构师最终拍板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值