美文网首页Activiti7
Activiti7获取节点全部执行人

Activiti7获取节点全部执行人

作者: 木子苇苇 | 来源:发表于2023-09-04 14:00 被阅读0次

如果有加签的需求,第一步应该是获取当前的节点所有的执行,已经是执行人的用户就不应该再次被加签。

演示地址

前端流程编辑器

一、实现思路

  1. 根据当前任务获取节点执行实例
  2. 根据节点执行实例获取所有的任务执行实例。
  3. 遍历任务执行实例,获取所有的任务执行人。

二、实现代码片段

下面是基于activiti7的代码片段
注意 实现代码都是需要写到activiti的CMD实现类中的

// 根据当前任务获取节点执行实例
ExecutionEntityManager executionEntityManager = commandContext.getExecutionEntityManager();
String executionId = task.getExecutionId();
ExecutionEntity currentExecutionEntity = executionEntityManager.findById(executionId);
ExecutionEntity miExecution = currentExecutionEntity.getParent();

// 获取当前BpmnModel对象,判读节点的类型
String processDefinitionId = task.getProcessDefinitionId();
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
String taskDefinitionKey = task.getTaskDefinitionKey();
Activity miActivityElement = (Activity) bpmnModel.getFlowElement(taskDefinitionKey);
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = miActivityElement.getLoopCharacteristics();

// 判断节点是否为顺序审批
if (multiInstanceLoopCharacteristics.isSequential()) {
    // 如果是顺序审批,取出执行人表达式,然后执行获取所有的执行人
    // 表达式
    String exp = multiInstanceLoopCharacteristics.getInputDataItem();
    // 变量
    Map<String, Object> variables = miExecution.getProcessInstance().getVariables();
    // 执行表达式,解析执行人
    // 执行表达式可以使用三方的,springboot可以使用tomcat-embed-el包
    // ...
} else {
    // 根据节点执行实例获取所有的任务执行实例。
    List<? extends ExecutionEntity> subExecutionEntities = miExecution.getExecutions();
    subExecutionEntities.stream().map(ExecutionEntity::getTasks).flatMap(List::stream).forEach(task -> {
        // 当前任务执行人
        task.getAssignee();
        task.getIdentityLinks().forEach(identityLink -> {
            // 候选执行人
            identityLink.getUserId();
            // 候选执行组
            identityLink.getGroupId();
        });
    });
}

相关文章

网友评论

    本文标题:Activiti7获取节点全部执行人

    本文链接:https://www.haomeiwen.com/subject/mofcvdtx.html