@Override protected AbstractSetProcessInstanceStateCmd getProcessInstanceChangeStateCmd(ProcessInstance processInstance) { return new ActivateProcessInstanceCmd(processInstance.getId()); } }
protected void copyResultToCamel(Exchange exchange, ProcessInstance pi) { exchange.setProperty(PROCESS_ID_PROPERTY, pi.getProcessInstanceId()); Map<String, Object> returnVars = getFlowableEndpoint().getReturnVarMap(); if (returnVars != null && returnVars.size() > 0) { Map<String, Object> processVariables = null; if (repositoryService.isFlowable5ProcessDefinition(pi.getProcessDefinitionId())) { Flowable5CompatibilityHandler compatibilityHandler = Flowable5Util.getFlowable5CompatibilityHandler(); processVariables = compatibilityHandler.getVariables(pi); } else { processVariables = ((ExecutionEntity) pi).getVariables(); } if (processVariables != null) { for (String variableName : returnVars.keySet()) { if (processVariables.containsKey(variableName)) { exchange.setProperty(variableName, processVariables.get(variableName)); } } } } }
public boolean isProcessInstanceSuspended(String processInstanceId) { ProcessInstance processInstance = getProcessInstance(processInstanceId); return processInstance != null && processInstance.isSuspended(); }
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)); } } } }
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());
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); ProcessEngineConfiguration processEngineConfiguration = processEngine.getProcessEngineConfiguration(); ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
protected void createDerivedProcessDefinition(CommandContext commandContext, ProcessInstance processInstance) { ProcessDefinitionEntity originalProcessDefinitionEntity = CommandContextUtil.getProcessDefinitionEntityManager(commandContext).findById(processInstance.getProcessDefinitionId()); DeploymentEntity deploymentEntity = createDerivedDeployment(commandContext, originalProcessDefinitionEntity); BpmnModel bpmnModel = createBpmnModel(commandContext, originalProcessDefinitionEntity, deploymentEntity); storeBpmnModelAsByteArray(commandContext, bpmnModel, deploymentEntity, originalProcessDefinitionEntity.getResourceName()); ProcessDefinitionEntity derivedProcessDefinitionEntity = deployDerivedDeploymentEntity(commandContext, deploymentEntity, originalProcessDefinitionEntity); updateExecutions(commandContext, derivedProcessDefinitionEntity, (ExecutionEntity) processInstance, bpmnModel); }
@Override public void processIsActive(final String processInstanceId) { // Assert there is a running process instance callback.trace(LogMessage.PROCESS_2, processInstanceId); final ProcessInstance processInstance = getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); Assert.assertThat(processInstance, is(notNullValue())); callback.trace(LogMessage.PROCESS_7, processInstanceId); Assert.assertThat(processInstance.isEnded(), is(false)); callback.trace(LogMessage.PROCESS_8, processInstanceId); Assert.assertThat(processInstance.isSuspended(), is(false)); // Assert that the historic process instance is not ended callback.trace(LogMessage.PROCESS_3, processInstanceId); final HistoricProcessInstance historicProcessInstance = getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(processInstanceId) .singleResult(); historicProcessInstanceNotEnded(historicProcessInstance); }
private State getActiveProcessState(ProcessInstance processInstance) { String processInstanceId = processInstance.getProcessInstanceId(); if (isProcessInstanceAtReceiveTask(processInstanceId)) { return State.ACTION_REQUIRED; } if (hasDeadLetterJobs(processInstanceId)) { return State.ERROR; } return State.RUNNING; }
BpmnModel pojoModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId()); throw new InternalServerErrorException("Process definition could not be found with id " + processInstance.getProcessDefinitionId());
@Override public Response startMtaOperation(Operation operation, SecurityContext securityContext, String spaceGuid) { String userId = getAuthenticatedUser(securityContext); String processDefinitionKey = operationsHelper.getProcessDefinitionKey(operation); Set<ParameterMetadata> predefinedParameters = operationMetadataMapper.getOperationMetadata(operation.getProcessType()) .getParameters(); addServiceParameters(operation, spaceGuid); addDefaultParameters(operation, predefinedParameters); addParameterValues(operation, predefinedParameters); ensureRequiredParametersSet(operation, predefinedParameters); ProcessInstance processInstance = flowableFacade.startProcess(userId, processDefinitionKey, operation.getParameters()); AuditLoggingProvider.getFacade() .logConfigCreate(operation); return Response.accepted() .header("Location", getLocationHeader(processInstance.getProcessInstanceId(), spaceGuid)) .build(); }
@Override protected AbstractSetProcessInstanceStateCmd getProcessInstanceChangeStateCmd(ProcessInstance processInstance) { return new SuspendProcessInstanceCmd(processInstance.getId()); }
@Override public boolean isSuspended(Job job) { if (StringUtils.isEmpty(job.getProcessInstanceId())) { throw new FlowableIllegalArgumentException("Job " + job.getId() + " parent is not process instance"); } ProcessInstance processInstance = this.processEngineConfiguration.getRuntimeService().createProcessInstanceQuery().processInstanceId(job.getProcessInstanceId()).singleResult(); return processInstance.isSuspended(); } }
@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(); }
@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 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)); } } } } }
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)); } } } } }
@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; }