@Override protected AbstractSetProcessInstanceStateCmd getProcessInstanceChangeStateCmd(ProcessInstance processInstance) { return new ActivateProcessInstanceCmd(processInstance.getId()); } }
@Override protected AbstractSetProcessInstanceStateCmd getProcessInstanceChangeStateCmd(ProcessInstance processInstance) { return new SuspendProcessInstanceCmd(processInstance.getId()); }
@Override public String startProcess(String key, String parameters) { logger.debug("Starting a BPMN process by key: " + key); RuntimeService runtimeService = getProcessEngine().getRuntimeService(); Map<String, Object> variables = GsonHelper.GSON.fromJson(parameters, HashMap.class); ProcessInstance processInstance; try { processInstance = runtimeService.startProcessInstanceByKey(key, variables); } catch (Exception e) { logger.error(e.getMessage(), e); List<ProcessDefinition> processDefinitions = processEngine.getRepositoryService().createProcessDefinitionQuery().list(); logger.error("Available process definitions:"); for (ProcessDefinition processDefinition : processDefinitions) { logger.error(format("Deployment: [{0}] with key: [{1}] and name: [{2}]", processDefinition.getDeploymentId(), processDefinition.getKey(), processDefinition.getName())); } return null; } logger.debug("Done starting a BPMN process by key: " + key); return processInstance.getId(); }
protected void doMigrateProcessInstance(ProcessInstance processInstance, ProcessDefinition procDefToMigrateTo, ProcessInstanceMigrationDocument document, CommandContext commandContext) { LOGGER.debug("Start migration of process instance with Id:'" + processInstance.getId() + "' to " + printProcessDefinitionIdentifierMessage(document)); ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(commandContext); List<ChangeActivityStateBuilderImpl> changeActivityStateBuilders = prepareChangeStateBuilders((ExecutionEntity) processInstance, procDefToMigrateTo, document, commandContext); LOGGER.debug("Updating Process definition reference of process root execution with id:'" + processInstance.getId() + "' to '" + procDefToMigrateTo.getId() + "'"); ((ExecutionEntity) processInstance).setProcessDefinitionId(procDefToMigrateTo.getId()); LOGGER.debug("Resolve activity executions to migrate"); List<MoveExecutionEntityContainer> moveExecutionEntityContainerList = new ArrayList<>(); for (ChangeActivityStateBuilderImpl builder : changeActivityStateBuilders) { moveExecutionEntityContainerList.addAll(resolveMoveExecutionEntityContainers(builder, Optional.of(procDefToMigrateTo.getId()), document.getProcessInstanceVariables(), commandContext)); } ProcessInstanceChangeState processInstanceChangeState = new ProcessInstanceChangeState() .setProcessInstanceId(processInstance.getId()) .setProcessDefinitionToMigrateTo(procDefToMigrateTo) .setMoveExecutionEntityContainers(moveExecutionEntityContainerList) .setProcessInstanceVariables(document.getProcessInstanceVariables()) .setLocalVariables(document.getActivitiesLocalVariables()); doMoveExecutionState(processInstanceChangeState, commandContext); LOGGER.debug("Updating Process definition of unchanged call activity"); List<ExecutionEntity> callActivities = executionEntityManager.findChildExecutionsByProcessInstanceId(processInstance.getId()).stream() .filter(executionEntity -> executionEntity.getCurrentFlowElement() instanceof CallActivity) .collect(Collectors.toList()); callActivities.forEach(executionEntity -> executionEntity.setProcessDefinitionId(procDefToMigrateTo.getId())); LOGGER.debug("Updating process definition reference in activity instances"); CommandContextUtil.getActivityInstanceEntityManager().updateActivityInstancesProcessDefinitionId(procDefToMigrateTo.getId(), processInstance.getId()); LOGGER.debug("Updating Process definition reference in history"); changeProcessDefinitionReferenceOfHistory(processInstance, procDefToMigrateTo, commandContext); LOGGER.debug("Process migration ended for process instance with Id:'" + processInstance.getId() + "'"); }
protected String findProcessInstanceId(Exchange exchange) { String processInstanceId = exchange.getProperty(PROCESS_ID_PROPERTY, String.class); if (processInstanceId != null) { return processInstanceId; } String key = exchange.getProperty(PROCESS_KEY_PROPERTY, String.class); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(key).singleResult(); if (processInstance == null) { throw new FlowableException("Could not start process instance with business key " + key); } return processInstance.getId(); }
public void callCaseInstanceStateChangeCallbacks(CommandContext commandContext, ProcessInstance processInstance, String oldState, String newState) { if (processInstance.getCallbackId() != null && processInstance.getCallbackType() != null) { Map<String, List<RuntimeInstanceStateChangeCallback>> caseInstanceCallbacks = CommandContextUtil .getProcessEngineConfiguration(commandContext).getProcessInstanceStateChangedCallbacks(); if (caseInstanceCallbacks != null && caseInstanceCallbacks.containsKey(processInstance.getCallbackType())) { for (RuntimeInstanceStateChangeCallback caseInstanceCallback : caseInstanceCallbacks.get(processInstance.getCallbackType())) { caseInstanceCallback.stateChanged(new CallbackData(processInstance.getCallbackId(), processInstance.getCallbackType(), processInstance.getId(), oldState, newState)); } } } }
protected void assertHistoricActivitiesDeleteReason(ProcessInstance processInstance, String expectedDeleteReason, String... activityIds) { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) { for (String activityId : activityIds) { List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery() .activityId(activityId).processInstanceId(processInstance.getId()).list(); assertTrue("Could not find historic activities", historicActivityInstances.size() > 0); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { assertNotNull(historicActivityInstance.getEndTime()); if (expectedDeleteReason == null) { assertNull(historicActivityInstance.getDeleteReason()); } else { assertTrue(historicActivityInstance.getDeleteReason().startsWith(expectedDeleteReason)); } } } } }
@Override public String startProcessInstanceByKey(String processDefinitionKey, String predefinedProcessInstanceId, String planItemInstanceId, String tenantId, Boolean fallbackToDefaultTenant, Map<String, Object> inParametersMap) { ProcessInstanceBuilder processInstanceBuilder = processEngineConfiguration.getRuntimeService().createProcessInstanceBuilder(); processInstanceBuilder.processDefinitionKey(processDefinitionKey); if (tenantId != null) { processInstanceBuilder.tenantId(tenantId); processInstanceBuilder.overrideProcessDefinitionTenantId(tenantId); } processInstanceBuilder.predefineProcessInstanceId(predefinedProcessInstanceId); if (planItemInstanceId != null) { processInstanceBuilder.callbackId(planItemInstanceId); processInstanceBuilder.callbackType(CallbackTypes.PLAN_ITEM_CHILD_PROCESS); } for (String target : inParametersMap.keySet()) { processInstanceBuilder.variable(target, inParametersMap.get(target)); } if (fallbackToDefaultTenant != null && fallbackToDefaultTenant) { processInstanceBuilder.fallbackToDefaultTenant(); } ProcessInstance processInstance = processInstanceBuilder.start(); return processInstance.getId(); }
protected void assertHistoricTasksDeleteReason(ProcessInstance processInstance, String expectedDeleteReason, String... taskNames) { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) { for (String taskName : taskNames) { List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstance.getId()).taskName(taskName).list(); assertTrue(historicTaskInstances.size() > 0); for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) { assertNotNull(historicTaskInstance.getEndTime()); if (expectedDeleteReason == null) { assertNull(historicTaskInstance.getDeleteReason()); } else { assertTrue(historicTaskInstance.getDeleteReason().startsWith(expectedDeleteReason)); } } } } }
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
formService.createFormInstance(formVariables, formInfo, null, processInstance.getId(), processInstance.getProcessDefinitionId(), processInstance.getTenantId()); FormFieldHandler formFieldHandler = processEngineConfiguration.getFormFieldHandler(); formFieldHandler.handleFormFieldsOnSubmit(formInfo, null, processInstance.getId(), null, null, variables, processInstance.getTenantId());
@Override public ProcessInstanceMigrationValidationResult validateMigrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument document, CommandContext commandContext) { ProcessInstanceMigrationValidationResult validationResult = new ProcessInstanceMigrationValidationResult(); //Check that the processDefinition exists and get its associated BpmnModel ProcessDefinition processDefinition = resolveProcessDefinition(document, commandContext); if (processDefinition == null) { validationResult.addValidationMessage("Cannot find the process definition to migrate to " + printProcessDefinitionIdentifierMessage(document)); } else { BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinition.getId()); if (bpmnModel == null) { validationResult.addValidationMessage("Cannot find the Bpmn model of the process definition to migrate to, with " + printProcessDefinitionIdentifierMessage(document)); } else { ProcessInstanceQueryImpl processInstanceQueryByProcessDefinitionId = new ProcessInstanceQueryImpl().processDefinitionId(processDefinitionId); ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(commandContext); List<ProcessInstance> processInstances = executionEntityManager.findProcessInstanceByQueryCriteria(processInstanceQueryByProcessDefinitionId); for (ProcessInstance processInstance : processInstances) { doValidateProcessInstanceMigration(processInstance.getId(), processDefinition.getTenantId(), bpmnModel, document, validationResult, commandContext); } } } return validationResult; }
ProcessInstance processInstance = compatibilityHandler.getProcessInstance(processInstanceId); if (processInstance != null) { compatibilityHandler.setProcessInstanceName(processInstance.getId(), name); return null;