protected void readIOParameter(XMLStreamReader xtr, boolean isInParameter, ConversionHelper conversionHelper) { if (!(conversionHelper.getCurrentCmmnElement() instanceof ProcessTask)) { return; } ProcessTask processTask = (ProcessTask) conversionHelper.getCurrentCmmnElement(); String source = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE); String sourceExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION); String target = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET); String targetExpression = xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_IOPARAMETER_TARGET_EXPRESSION); IOParameter parameter = new IOParameter(); if (StringUtils.isNotEmpty(sourceExpression)) { parameter.setSourceExpression(sourceExpression); } else { parameter.setSource(source); } if (StringUtils.isNotEmpty(targetExpression)) { parameter.setTargetExpression(targetExpression); } else { parameter.setTarget(target); } if (isInParameter) { processTask.getInParameters().add(parameter); } else { processTask.getOutParameters().add(parameter); } }
protected boolean writeIOParameters(String elementName, List<IOParameter> parameterList, boolean didWriteParameterStartElement, XMLStreamWriter xtw) throws Exception { if (parameterList == null || parameterList.isEmpty()) { return didWriteParameterStartElement; } for (IOParameter ioParameter : parameterList) { if (!didWriteParameterStartElement) { xtw.writeStartElement(ELEMENT_EXTENSION_ELEMENTS); didWriteParameterStartElement = true; } xtw.writeStartElement(FLOWABLE_EXTENSIONS_PREFIX, elementName, FLOWABLE_EXTENSIONS_NAMESPACE); if (StringUtils.isNotEmpty(ioParameter.getSource())) { xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_SOURCE, ioParameter.getSource()); } if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) { xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_SOURCE_EXPRESSION, ioParameter.getSourceExpression()); } if (StringUtils.isNotEmpty(ioParameter.getTarget())) { xtw.writeAttribute(ATTRIBUTE_IOPARAMETER_TARGET, ioParameter.getTarget()); } xtw.writeEndElement(); } return didWriteParameterStartElement; }
@Override public void onStateTransition(CommandContext commandContext, DelegatePlanItemInstance planItemInstance, String transition) { if (PlanItemInstanceState.ACTIVE.equals(planItemInstance.getState())) { // The process task plan item will be deleted by the regular TerminatePlanItemOperation if (PlanItemTransition.TERMINATE.equals(transition) || PlanItemTransition.EXIT.equals(transition)) { deleteProcessInstance(commandContext, planItemInstance); } else if (PlanItemTransition.COMPLETE.equals(transition)) { CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext); ProcessInstanceService processInstanceService = cmmnEngineConfiguration.getProcessInstanceService(); CaseInstanceEntity caseInstance = cmmnEngineConfiguration.getCaseInstanceEntityManager().findById(planItemInstance.getCaseInstanceId()); for (IOParameter ioParameter : outParameters) { String variableName = null; if (StringUtils.isNotEmpty(ioParameter.getTarget())) { variableName = ioParameter.getTarget(); } else if (StringUtils.isNotEmpty(ioParameter.getTargetExpression())) { Expression expression = cmmnEngineConfiguration.getExpressionManager().createExpression(ioParameter.getTargetExpression()); variableName = expression.getValue(planItemInstance).toString(); } Object variableValue = null; if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) { Expression expression = cmmnEngineConfiguration.getExpressionManager().createExpression(ioParameter.getSourceExpression()); variableValue = processInstanceService.getVariables(planItemInstance.getReferenceId()).get(expression.getValue(planItemInstance).toString()); } else if (StringUtils.isNotEmpty(ioParameter.getSource())) { variableValue = processInstanceService.getVariables(planItemInstance.getReferenceId()).get(ioParameter.getSource()); } caseInstance.setVariable(variableName, variableValue); } } } }
if (StringUtils.isNotEmpty(ioParameter.getTargetExpression())) { Expression expression = cmmnEngineConfiguration.getExpressionManager().createExpression(ioParameter.getTargetExpression()); variableName = expression.getValue(planItemInstanceEntity).toString(); } else if (StringUtils.isNotEmpty(ioParameter.getTarget())){ variableName = ioParameter.getTarget(); if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) { Expression expression = cmmnEngineConfiguration.getExpressionManager().createExpression(ioParameter.getSourceExpression()); variableValue = expression.getValue(planItemInstanceEntity); } else if (StringUtils.isNotEmpty(ioParameter.getSource())) { variableValue = planItemInstanceEntity.getVariable(ioParameter.getSource());
@Override public List<IOParameter> getOutputParametersOfCaseTask(String executionId) { ExecutionEntity execution = (ExecutionEntity) processEngineConfiguration.getRuntimeService().createExecutionQuery().executionId(executionId).singleResult(); if (execution == null) { throw new FlowableException("No execution could be found for id " + executionId); } FlowElement flowElement = execution.getCurrentFlowElement(); if (!(flowElement instanceof CaseServiceTask)) { throw new FlowableException("No execution could be found with a case service task for id " + executionId); } List<IOParameter> cmmnParameters = new ArrayList<>(); CaseServiceTask caseServiceTask = (CaseServiceTask) flowElement; List<org.flowable.bpmn.model.IOParameter> parameters = caseServiceTask.getOutParameters(); for (org.flowable.bpmn.model.IOParameter ioParameter : parameters) { IOParameter parameter = new IOParameter(); parameter.setSource(ioParameter.getSource()); parameter.setSourceExpression(ioParameter.getSourceExpression()); parameter.setTarget(ioParameter.getTarget()); parameter.setTargetExpression(ioParameter.getTargetExpression()); cmmnParameters.add(parameter); } return cmmnParameters; }
for (IOParameter ioParameter : processInstanceService.getOutputParametersOfCaseTask(callbackData.getCallbackId())) { Object value = null; if (StringUtils.isNotEmpty(ioParameter.getSourceExpression())) { Expression expression = cmmnEngineConfiguration.getExpressionManager().createExpression(ioParameter.getSourceExpression().trim()); value = expression.getValue(caseInstance); value = caseInstance.getVariable(ioParameter.getSource()); variables.put(ioParameter.getTarget(), value);