我正在使用activiti 6为我们的一个项目设计业务流程。这个过程非常简单,它由多个“用户任务”或“服务任务”以及基于角色的分配组成。但是,我们的客户希望管理员用户应该能够在任何时间重新运行以前的“用户任务”或“服务任务”中的任何一个。
例如,以下是我的过程:
开始–>服务任务1 –>用户任务2 –>服务任务3 –>用户任务4 –>服务任务5->用户任务6->服务任务7->用户任务8->结束
客户端希望在流程执行过程中的任何时间点,管理员用户都应该能够将工作流执行方式从:例如,状态“ User-Task8”更改为Service-Task1或User-Task2或Service-Task3中的任何一个或User-Task4或Service-Task5或User-Task6或Service-Task7。
根据Alfresco社区线程:用户任务回滚
我已经创建了一个自定义命令
public class RestartInstanceActivitiCommand implements Command<Void> {
private final String executionId;
private final FlowElement flowElement;
public RestartInstanceActivitiCommand(String executionId, FlowElement flowElement) {
this.executionId = executionId;
this.flowElement = flowElement;
}
public Void execute(CommandContext commandContext) {
ExecutionEntity execution = commandContext.getExecutionEntityManager().findById(this.executionId);
execution.setCurrentFlowElement(flowElement);
return null;
}
}
并使用:
执行它 BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
FlowElement flowElement = bpmnModel.getFlowElement("Service-Task1");
commandExecutor.execute(new RestartInstanceActivitiCommand(processInstanceId, flowElement));
runtimeService.trigger(processInstanceId);
通过此操作,当前任务被设置为Service-Task1,但是它不会像通常的流程那样自动执行。另外,我可以看到User-Task8也处于活动状态并分配给了我不希望的用户,因为我想取消当前任务并从所需步骤中重新运行它。
通过代码示例感谢您的帮助。
关于桑迪普