Activiti7减签
2023-09-10 本文已影响0人
木子苇苇
对应之前的加签命令,减就是将有审批能力的审批员删除掉。这个也是activiti7没有的指令。需要我们自己来实现。
一、实现思路
- 判断节点是否可以减签,该步骤比较机动,按照我们的业务需求实现即可。
- 删除任务执行实例
- 修改节点变量
二、实现代码片段
下面是基于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);
减签比较简单,删除加签的数据即可。
如果摸不准也可以不删除执行实例,设置任务的执行人为空也行。但是节点的完成变量是必须要设置的
。