Activiti7

Activiti7减签

2023-09-10  本文已影响0人  木子苇苇

对应之前的加签命令,减就是将有审批能力的审批员删除掉。这个也是activiti7没有的指令。需要我们自己来实现。

演示地址

前端流程编辑器

一、实现思路

  1. 判断节点是否可以减签,该步骤比较机动,按照我们的业务需求实现即可。
  2. 删除任务执行实例
  3. 修改节点变量

二、实现代码片段

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

ExecutionEntityManager executionEntityManager = commandContext.getExecutionEntityManager();
String executionId = task.getExecutionId();
ExecutionEntity currentExecutionEntity = executionEntityManager.findById(executionId);
ExecutionEntity miExecution = currentExecutionEntity.getParent();

// 判断节点是否满足减签
...

// 删除子执行实例(如果有就删除)
executionEntityManager.deleteChildExecutions(currentExecutionEntity, "减签", false);
// 删除当前执行实例和关联数据
executionEntityManager.deleteExecutionAndRelatedData(currentExecutionEntity, "减签", false);
// 删除加签残留的identitylink
if (task instanceof TaskEntity taskEntity) {
    String userId = taskEntity.getAssignee();
    ExecutionEntity executionEntity = taskEntity.getProcessInstance();
    for (IdentityLinkEntity identityLink : executionEntity.getIdentityLinks()) {
        if (identityLink.isUser() && identityLink.getType().equals(IdentityLinkType.PARTICIPANT) && identityLink.getUserId().equals(userId)) {
            String identityLinkTaskId = identityLink.getTaskId();
            if (identityLinkTaskId == null || identityLinkTaskId.equals(taskEntity.getId())) {
                commandContext.getIdentityLinkEntityManager().delete(identityLink, false);
            }
        }
    }
}

// 设置流程变量
Integer nrOfInstances = (Integer) miExecution.getVariableLocal("nrOfInstances");
Integer nrOfActiveInstances = (Integer) miExecution.getVariableLocal("nrOfActiveInstances");
miExecution.setVariableLocal("nrOfInstances", nrOfInstances - 1);
miExecution.setVariableLocal("nrOfActiveInstances", nrOfActiveInstances - 1);

减签比较简单,删除加签的数据即可。
如果摸不准也可以不删除执行实例,设置任务的执行人为空也行。但是节点的完成变量是必须要设置的

上一篇下一篇

猜你喜欢

热点阅读