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

如何在Camunda并行用户任务中按指定经办人完成任务?

解决方案:Camunda 指定经办人完成并行用户任务

核心问题根源

你当前的问题在于没有针对具体经办人对应的独立任务实例操作——并行多实例任务中,每个经办人对应一个独立的任务实例,直接调用批量taskIds完成时,Camunda会按任务创建顺序默认处理第一个实例,导致无论谁操作都标记John的任务完成。


步骤1:确保多实例任务模型配置正确

首先要在Camunda Modeler里把并行用户任务的分配逻辑配置正确,让每个实例绑定对应的经办人:

  • 多实例设置:
    • 类型:并行
    • 集合:填写流程变量名(比如${userList},启动流程时传入值为["John", "Max", "Jessica"]的列表)
    • 元素变量:设为assignee
  • 用户任务的Assignee字段:填写${assignee}

这样每个并行任务实例会自动把assignee设为列表中的对应用户,后续才能通过用户身份区分任务。


步骤2:获取指定用户的待办任务列表

通过TaskQuery过滤出指定用户的专属任务,而不是拿通用的任务ID:

// 获取Max的待办任务列表
List<Task> maxTasks = taskService.createTaskQuery()
    .taskAssignee("Max") // 如果是候选人分配,换成taskCandidateUser("Max")
    // 可选:限定特定流程实例,避免跨流程查询
    // .processInstanceId("你的流程实例ID")
    .list();

// 获取待办任务数量
long maxTaskCount = taskService.createTaskQuery()
    .taskAssignee("Max")
    .count();

步骤3:指定经办人完成任务

拿到该用户对应的任务实例ID后,单独调用complete方法,还可以添加变量记录实际完成人:

if (!maxTasks.isEmpty()) {
    // 处理第一个待办任务(如有多个可循环遍历)
    Task targetTask = maxTasks.get(0);
    
    // 可选:添加变量记录完成人,便于流程追溯
    Map<String, Object> processVariables = new HashMap<>();
    processVariables.put("completedBy", "Max");
    
    // 完成该用户的专属任务
    taskService.complete(targetTask.getId(), processVariables);
}

关键注意事项

  • 绝对不要用批量任务ID完成操作,必须针对特定用户对应的任务实例ID执行complete
  • 如果你的任务是候选人模式(而非直接分配assignee),把查询条件中的taskAssignee替换为taskCandidateUser即可
  • 完成任务时添加completedBy变量,能在流程历史中追溯每个任务的实际处理人

内容的提问来源于stack exchange,提问作者Yuvaraj Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:32:52