@Override protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) { StartEvent startEvent = (StartEvent) baseElement; if (StringUtils.isNotEmpty(startEvent.getInitiator())) { propertiesNode.put(PROPERTY_NONE_STARTEVENT_INITIATOR, startEvent.getInitiator()); } if (StringUtils.isNotEmpty(startEvent.getFormKey())) { if (formKeyMap != null && formKeyMap.containsKey(startEvent.getFormKey())) { ObjectNode formRefNode = objectMapper.createObjectNode(); ModelInfo modelInfo = formKeyMap.get(startEvent.getFormKey()); formRefNode.put("id", modelInfo.getId()); formRefNode.put("name", modelInfo.getName()); formRefNode.put("key", modelInfo.getKey()); propertiesNode.set(PROPERTY_FORM_REFERENCE, formRefNode); } else { setPropertyValue(PROPERTY_FORMKEY, startEvent.getFormKey(), propertiesNode); } } if (startEvent.getSubProcess() instanceof EventSubProcess && !startEvent.isInterrupting()) { propertiesNode.put(PROPERTY_INTERRUPTING, false); } else { propertiesNode.put(PROPERTY_INTERRUPTING, true); } addFormProperties(startEvent.getFormProperties(), propertiesNode); addEventProperties(startEvent, propertiesNode); }
protected List<FormDefinition> getFormDefinitionsFromModel(BpmnModel bpmnModel, ProcessDefinition processDefinition) { Set<String> formKeys = new HashSet<>(); List<FormDefinition> formDefinitions = new ArrayList<>(); // for all start events List<StartEvent> startEvents = bpmnModel.getMainProcess().findFlowElementsOfType(StartEvent.class, true); for (StartEvent startEvent : startEvents) { if (StringUtils.isNotEmpty(startEvent.getFormKey())) { formKeys.add(startEvent.getFormKey()); } } // for all user tasks List<UserTask> userTasks = bpmnModel.getMainProcess().findFlowElementsOfType(UserTask.class, true); for (UserTask userTask : userTasks) { if (StringUtils.isNotEmpty(userTask.getFormKey())) { formKeys.add(userTask.getFormKey()); } } for (String formKey : formKeys) { addFormDefinitionToCollection(formDefinitions, formKey, processDefinition); } return formDefinitions; }
@Override protected void writeAdditionalAttributes(BaseElement element, BpmnModel model, XMLStreamWriter xtw) throws Exception { StartEvent startEvent = (StartEvent) element; writeQualifiedAttribute(ATTRIBUTE_EVENT_START_INITIATOR, startEvent.getInitiator(), xtw); writeQualifiedAttribute(ATTRIBUTE_FORM_FORMKEY, startEvent.getFormKey(), xtw); if (startEvent.getEventDefinitions() != null && startEvent.getEventDefinitions().size() > 0) { writeDefaultAttribute(ATTRIBUTE_EVENT_START_INTERRUPTING, String.valueOf(startEvent.isInterrupting()), xtw); } }
public void setValues(StartEvent otherEvent) { super.setValues(otherEvent); setInitiator(otherEvent.getInitiator()); setFormKey(otherEvent.getFormKey()); setInterrupting(otherEvent.isInterrupting); formProperties = new ArrayList<>(); if (otherEvent.getFormProperties() != null && !otherEvent.getFormProperties().isEmpty()) { for (FormProperty property : otherEvent.getFormProperties()) { formProperties.add(property.clone()); } } } }
public void setValues(StartEvent otherEvent) { super.setValues(otherEvent); setInitiator(otherEvent.getInitiator()); setFormKey(otherEvent.getFormKey()); setInterrupting(otherEvent.isInterrupting); formProperties = new ArrayList<>(); if (otherEvent.getFormProperties() != null && !otherEvent.getFormProperties().isEmpty()) { for (FormProperty property : otherEvent.getFormProperties()) { formProperties.add(property.clone()); } } } }
protected void createStartFormHandlers(BpmnParse bpmnParse, StartEvent startEvent, ProcessDefinitionEntity processDefinition) { if (processDefinition.getInitial() != null) { if (startEvent.getId().equals(processDefinition.getInitial().getId())) { StartFormHandler startFormHandler = new DefaultStartFormHandler(); startFormHandler.parseConfiguration(startEvent.getFormProperties(), startEvent.getFormKey(), bpmnParse.getDeployment(), processDefinition); processDefinition.setStartFormHandler(startFormHandler); } } }
if (StringUtils.isNotEmpty(startEvent.getFormKey())) { FormRepositoryService formRepositoryService = CommandContextUtil.getFormRepositoryService(commandContext); formInfo = formRepositoryService.getFormModelByKey(startEvent.getFormKey()); } else { formInfo = formRepositoryService.getFormModelByKey(startEvent.getFormKey(), tenantId, processEngineConfiguration.isFallbackToDefaultTenant());
public StartFormHandler getStartFormHandler(CommandContext commandContext, ProcessDefinition processDefinition) { StartFormHandler startFormHandler = new DefaultStartFormHandler(); org.flowable.bpmn.model.Process process = ProcessDefinitionUtil.getProcess(processDefinition.getId()); FlowElement initialFlowElement = process.getInitialFlowElement(); if (initialFlowElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) initialFlowElement; List<FormProperty> formProperties = startEvent.getFormProperties(); String formKey = startEvent.getFormKey(); DeploymentEntity deploymentEntity = CommandContextUtil.getDeploymentEntityManager(commandContext).findById(processDefinition.getDeploymentId()); startFormHandler.parseConfiguration(formProperties, formKey, deploymentEntity, processDefinition); return startFormHandler; } return null; }
@Override public FormInfo execute(CommandContext commandContext) { ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext); FormService formService = CommandContextUtil.getFormService(commandContext); if (formService == null) { throw new FlowableIllegalArgumentException("Form engine is not initialized"); } FormInfo formInfo = null; ProcessDefinition processDefinition = ProcessDefinitionUtil.getProcessDefinition(processDefinitionId); BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId); Process process = bpmnModel.getProcessById(processDefinition.getKey()); FlowElement startElement = process.getInitialFlowElement(); if (startElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) startElement; if (StringUtils.isNotEmpty(startEvent.getFormKey())) { Deployment deployment = CommandContextUtil.getDeploymentEntityManager(commandContext).findById(processDefinition.getDeploymentId()); formInfo = formService.getFormInstanceModelByKeyAndParentDeploymentId(startEvent.getFormKey(), deployment.getParentDeploymentId(), null, processInstanceId, null, processDefinition.getTenantId(), processEngineConfiguration.isFallbackToDefaultTenant()); } } // If form does not exists, we don't want to leak out this info to just anyone if (formInfo == null) { throw new FlowableObjectNotFoundException("Form model for process definition " + processDefinitionId + " cannot be found"); } FormFieldHandler formFieldHandler = processEngineConfiguration.getFormFieldHandler(); formFieldHandler.enrichFormFields(formInfo); return formInfo; }
if (initialElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) initialElement; if (startEvent.getFormKey() != null) { processDefinition.setHasStartFormKey(true);
/** * Sets the version on each process definition entity, and the identifier. If the map contains an older version for a process definition, then the version is set to that older entity's version * plus one; otherwise it is set to 1. Also dispatches an ENTITY_CREATED event. */ protected void setProcessDefinitionVersionsAndIds(ParsedDeployment parsedDeployment, Map<ProcessDefinitionEntity, ProcessDefinitionEntity> mapNewToOldProcessDefinitions) { CommandContext commandContext = Context.getCommandContext(); for (ProcessDefinitionEntity processDefinition : parsedDeployment.getAllProcessDefinitions()) { int version = 1; ProcessDefinitionEntity latest = mapNewToOldProcessDefinitions.get(processDefinition); if (latest != null) { version = latest.getVersion() + 1; } processDefinition.setVersion(version); processDefinition.setId(getIdForNewProcessDefinition(processDefinition)); Process process = parsedDeployment.getProcessModelForProcessDefinition(processDefinition); FlowElement initialElement = process.getInitialFlowElement(); if (initialElement instanceof StartEvent) { StartEvent startEvent = (StartEvent) initialElement; if (startEvent.getFormKey() != null) { processDefinition.setHasStartFormKey(true); } } cachingAndArtifactsManager.updateProcessDefinitionCache(parsedDeployment); if (CommandContextUtil.getProcessEngineConfiguration(commandContext).getEventDispatcher().isEnabled()) { CommandContextUtil.getProcessEngineConfiguration(commandContext).getEventDispatcher().dispatchEvent(FlowableEventBuilder.createEntityEvent(FlowableEngineEventType.ENTITY_CREATED, processDefinition)); } } }