Я использую activiti 6 для разработки бизнес-процесса для одного из наших проектов. Процесс довольно прост, он состоит из нескольких «пользовательских задач» или «служебных задач» с назначениями на основе ролей. Однако наш Клиент хочет, чтобы пользователь с правами администратора мог в любой момент повторно выполнить любую из предыдущих «Задач пользователя» или «Задачи обслуживания».
Например, мой процесс выглядит следующим образом:
Пуск -> Сервис-задача1 -> Пользователь-задача2 -> Сервис-задача3 -> Пользователь-задача4 -> Сервис-задача5 -> Пользователь-задача6 -> Сервис-задача7 -> Пользователь-задача8 -> Конец
Клиент хочет, чтобы в любой момент времени во время выполнения процесса пользователь-администратор мог иметь возможность изменять выполнение рабочего процесса с: например, состояния «Пользователь-Задача8» на любое из 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 также активен и назначен пользователю, которого я не хочу, потому что я хочу отменить текущее задание и повторно запустить его с нужного шага.
Оцените вашу помощь с примером кода.
С уважением, Сандип