@Override public Void execute(CommandContext commandContext) { if (currentTaskEntity != null) { ExecutionEntity execution = commandContext .getExecutionEntityManager() .findExecutionById(currentTaskEntity.getExecutionId()); execution.setActivity(activity); execution.performOperation(AtomicOperation.TRANSITION_CREATE_SCOPE); if (variables != null) { if (currentTaskEntity.getExecutionId() != null) { currentTaskEntity.setExecutionVariables(variables); } else { currentTaskEntity.setVariables(variables); } } // 删除当前的任务,不能删除当前正在执行的任务,所以要先清除掉关联 Context.getCommandContext() .getTaskEntityManager() .deleteTask(currentTaskEntity, TaskEntity.DELETE_REASON_DELETED, false); } return null; }
public void handleEvent( EventSubscriptionEntity eventSubscription, Object payload, CommandContext commandContext) { String configuration = eventSubscription.getConfiguration(); if (configuration == null) { throw new ActivitiException( "Compensating execution not set for compensate event subscription with id " + eventSubscription.getId()); } ExecutionEntity compensatingExecution = commandContext.getExecutionEntityManager().findExecutionById(configuration); ActivityImpl compensationHandler = eventSubscription.getActivity(); if ((compensationHandler.getProperty(BpmnParse.PROPERTYNAME_IS_FOR_COMPENSATION) == null || !(Boolean) compensationHandler.getProperty(BpmnParse.PROPERTYNAME_IS_FOR_COMPENSATION)) && compensationHandler.isScope()) { // descend into scope: List<CompensateEventSubscriptionEntity> eventsForThisScope = compensatingExecution.getCompensateEventSubscriptions(); ScopeUtil.throwCompensationEvent(eventsForThisScope, compensatingExecution, false); } else { try { if (commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) { commandContext .getProcessEngineConfiguration() .getEventDispatcher() .dispatchEvent( ActivitiEventBuilder.createActivityEvent( ActivitiEventType.ACTIVITY_COMPENSATE, compensationHandler.getId(), compensatingExecution.getId(), compensatingExecution.getProcessInstanceId(), compensatingExecution.getProcessDefinitionId())); } compensatingExecution.setActivity(compensationHandler); // executing the atomic operation makes sure activity start events are fired compensatingExecution.performOperation(AtomicOperation.ACTIVITY_START); } catch (Exception e) { throw new ActivitiException( "Error while handling compensation event " + eventSubscription, e); } } }
/** 根据任务历史,创建待办任务. */ public void processHistoryTask( HistoricTaskInstanceEntity historicTaskInstanceEntity, HistoricActivityInstanceEntity historicActivityInstanceEntity) { /* * historicTaskInstanceEntity.setEndTime(null); historicTaskInstanceEntity.setDurationInMillis(null); * historicActivityInstanceEntity.setEndTime(null); historicActivityInstanceEntity.setDurationInMillis(null); */ // 创建新任务 TaskEntity task = TaskEntity.create(new Date()); task.setProcessDefinitionId(historicTaskInstanceEntity.getProcessDefinitionId()); // task.setId(historicTaskInstanceEntity.getId()); // task.setAssigneeWithoutCascade(historicTaskInstanceEntity.getAssignee()); task.setAssigneeWithoutCascade(this.userId); task.setParentTaskIdWithoutCascade(historicTaskInstanceEntity.getParentTaskId()); task.setNameWithoutCascade(historicTaskInstanceEntity.getName()); task.setTaskDefinitionKey(historicTaskInstanceEntity.getTaskDefinitionKey()); task.setExecutionId(historicTaskInstanceEntity.getExecutionId()); task.setPriority(historicTaskInstanceEntity.getPriority()); task.setProcessInstanceId(historicTaskInstanceEntity.getProcessInstanceId()); task.setExecutionId(historicTaskInstanceEntity.getExecutionId()); task.setDescriptionWithoutCascade(historicTaskInstanceEntity.getDescription()); task.setTenantId(historicTaskInstanceEntity.getTenantId()); Context.getCommandContext().getTaskEntityManager().insert(task); // 把流程指向任务对应的节点 ExecutionEntity executionEntity = Context.getCommandContext() .getExecutionEntityManager() .findExecutionById(historicTaskInstanceEntity.getExecutionId()); executionEntity.setActivity(getActivity(historicActivityInstanceEntity)); // 创建HistoricActivityInstance Context.getCommandContext().getHistoryManager().recordActivityStart(executionEntity); // 创建HistoricTaskInstance Context.getCommandContext().getHistoryManager().recordTaskCreated(task, executionEntity); Context.getCommandContext().getHistoryManager().recordTaskId(task); // 更新ACT_HI_ACTIVITY里的assignee字段 Context.getCommandContext().getHistoryManager().recordTaskAssignment(task); try { // humanTask this.createHumanTask(task, historicTaskInstanceEntity); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } }
public void processHistoryTask( HistoricTaskInstanceEntity historicTaskInstanceEntity, HistoricActivityInstanceEntity historicActivityInstanceEntity) { historicTaskInstanceEntity.setEndTime(null); historicTaskInstanceEntity.setDurationInMillis(null); historicActivityInstanceEntity.setEndTime(null); historicActivityInstanceEntity.setDurationInMillis(null); TaskEntity task = TaskEntity.create(new Date()); task.setProcessDefinitionId(historicTaskInstanceEntity.getProcessDefinitionId()); task.setId(historicTaskInstanceEntity.getId()); task.setAssigneeWithoutCascade(historicTaskInstanceEntity.getAssignee()); task.setParentTaskIdWithoutCascade(historicTaskInstanceEntity.getParentTaskId()); task.setNameWithoutCascade(historicTaskInstanceEntity.getName()); task.setTaskDefinitionKey(historicTaskInstanceEntity.getTaskDefinitionKey()); task.setExecutionId(historicTaskInstanceEntity.getExecutionId()); task.setPriority(historicTaskInstanceEntity.getPriority()); task.setProcessInstanceId(historicTaskInstanceEntity.getProcessInstanceId()); task.setDescriptionWithoutCascade(historicTaskInstanceEntity.getDescription()); task.setTenantId(historicTaskInstanceEntity.getTenantId()); Context.getCommandContext().getTaskEntityManager().insert(task); try { HumanTaskConnector humanTaskConnector = ApplicationContextHelper.getBean(HumanTaskConnector.class); // humantask humanTaskConnector.removeHumanTaskByTaskId(historicTaskInstanceEntity.getId()); this.createHumanTask(task); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } ExecutionEntity executionEntity = Context.getCommandContext() .getExecutionEntityManager() .findExecutionById(historicTaskInstanceEntity.getExecutionId()); executionEntity.setActivity(getActivity(historicActivityInstanceEntity)); }