camunda 加签、会签
时间: 2025-01-20 20:00:53 浏览: 49
Camunda 中加签和会签的功能及实现
加签功能介绍
在实际业务场景中,某些情况下可能需要临时增加审批人员来处理特定的任务。这种需求可以通过加签机制满足,在不改变原有流程定义的情况下动态添加新的参与者。
对于Camunda而言,虽然官方文档并没有直接提及“加签”的概念,但是通过自定义任务监听器(Task Listener)的方式可以轻松实现这一特性[^1]。当某个节点触发时,可以根据具体条件创建额外的人工任务(Human Task),并将其分配给指定用户或组群。
// 创建一个新的用户任务实例
UserTask userTask = new UserTaskImpl();
userTask.setName("Additional Approval");
userTask.setAssignee(additionalApprover);
// 将新任务加入当前执行路径
ExecutionEntity execution = (ExecutionEntity) delegateExecution;
execution.addAdhocSubProcess(userTask);
上述代码片段展示了如何利用Java API向正在运行中的流程实例注入附加的审核环节。需要注意的是,这里采用adhoc子过程的形式确保新增操作不影响原定计划走向。
会签模式解析
所谓会签是指同一阶段存在多个平行的决策点,只有所有相关人员都完成了各自部分之后整个步骤才算结束。为了支持这样的协作方式,BPMN标准提供了Parallel Gateway(并行网关)[^2]作为基础构建模块之一;而在Camunda平台内部,则进一步优化了此类结构下的表现形式:
- 同步等待:默认状态下,一旦遇到并行分支就会立即分叉出去形成独立线程分别推进直至交汇处重新汇合;
- 异步继续:如果希望加快整体进度允许部分成员提前提交意见而不必等到所有人响应完毕再往下走的话,可以在设计图上标记相应的过渡边为
async=true
属性从而启用非阻塞式的流转策略。
下面给出一段简单的XML描述用来表示含有两个并发审查人的请假申请表单:
<parallelGateway id="forkGate" name="Fork"/>
<!-- ... -->
<userTask id="reviewerA" name="Review by A">
<extensionElements>
<!-- 设置候选人列表 -->
<camunda:candidateUsers>alice</camunda:candidateUsers>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="forkGate" targetRef="reviewerA"/>
<userTask id="reviewerB" name="Review by B">
<extensionElements>
<camunda:candidateUsers>bob</camunda:candidateUsers>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="forkGate" targetRef="reviewerB"/>
<parallelGateway id="joinGate" name="Join"/>
<sequenceFlow sourceRef="reviewerA" targetRef="joinGate"/>
<sequenceFlow sourceRef="reviewerB" targetRef="joinGate"/>
此模型清晰地表达了从发起分流至最终聚合的过程,并且借助于扩展元素指定了各自的候选对象名单以便系统自动匹配合适的负责人参与进来。
相关推荐

















