public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { SubProcessNode subProcessNode = (SubProcessNode) node; writeNode("callActivity", subProcessNode, xmlDump, metaDataType); if (subProcessNode.getProcessId() != null) { xmlDump.append("calledElement=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(subProcessNode.getProcessId()) + "\" "); } if (!subProcessNode.isWaitForCompletion()) { xmlDump.append("tns:waitForCompletion=\"false\" "); } if (!subProcessNode.isIndependent()) { xmlDump.append("tns:independent=\"false\" "); } xmlDump.append(">" + EOL); writeExtensionElements(subProcessNode, xmlDump); writeIO(subProcessNode, xmlDump); endNode("callActivity", xmlDump); }
xmlDump.append("waitForCompletion=\"false\" "); if (!subProcessNode.isIndependent()) { xmlDump.append("independent=\"false\" ");
@Test public void testLoadProcessTaskReferenceCase() throws Exception { KieBase kbase = createKnowledgeBase("CMMN-ProcessTaskReferenceCase.cmmn"); assertThat(kbase).isNotNull(); Process process = kbase.getProcess("Case_636d4bea-4d52-46fb-b1ad-9ceeddf1be69"); assertThat(process).isNotNull(); assertThat(process).isInstanceOf(RuleFlowProcess.class); RuleFlowProcess caseProcess = (RuleFlowProcess) process; assertThat(caseProcess.isDynamic()).isTrue(); assertThat(caseProcess.getId()).isEqualTo("Case_636d4bea-4d52-46fb-b1ad-9ceeddf1be69"); assertThat(caseProcess.getName()).isEqualTo("ProcessTaskCase"); Node[] nodes = caseProcess.getNodes(); assertThat(nodes).hasSize(1); SubProcessNode processNode = (SubProcessNode) nodes[0]; assertThat(processNode.getName()).isEqualTo("call my process"); assertThat(processNode.getProcessId()).isEqualTo("_4e0c5178-c886-4a14-ab6b-6ec6c940194b"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(0); assertThat(processNode.getOutAssociations()).hasSize(0); }
assertThat(processNode.getProcessId()).isEqualTo("_4e0c5178-c886-4a14-ab6b-6ec6c940194b"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(0); assertThat(processNode.getOutAssociations()).hasSize(0);
assertThat(processNode.getProcessId()).isEqualTo("subprocessId"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(1); assertThat(processNode.getInAssociations().get(0).getSources()).hasSize(1);
public void processInstanceCompleted(ProcessInstance processInstance) { removeEventListeners(); handleOutMappings(processInstance); if (processInstance.getState() == ProcessInstance.STATE_ABORTED) { String faultName = processInstance.getOutcome()==null?"":processInstance.getOutcome(); // handle exception as sub process failed with error code ExceptionScopeInstance exceptionScopeInstance = (ExceptionScopeInstance) resolveContextInstance(ExceptionScope.EXCEPTION_SCOPE, faultName); if (exceptionScopeInstance != null) { exceptionScopeInstance.handleException(faultName, processInstance.getFaultData()); if (getSubProcessNode() != null && !getSubProcessNode().isIndependent() && getSubProcessNode().isAbortParent()){ cancel(); } return; } else if (getSubProcessNode() != null && !getSubProcessNode().isIndependent() && getSubProcessNode().isAbortParent()){ ((ProcessInstance) getProcessInstance()).setState(ProcessInstance.STATE_ABORTED, faultName); return; } } // handle dynamic subprocess if (getNode() == null) { setMetaData("NodeType", "SubProcessNode"); } // if there were no exception proceed normally triggerCompleted(); }
if (!subProcess.isIndependent() && !subProcess.isWaitForCompletion()) { addErrorMessage(process, node,
public void cancel() { super.cancel(); if (getSubProcessNode() == null || !getSubProcessNode().isIndependent()) { ProcessInstance processInstance = null; InternalKnowledgeRuntime kruntime = ((ProcessInstance) getProcessInstance()).getKnowledgeRuntime(); RuntimeManager manager = (RuntimeManager) kruntime.getEnvironment().get(EnvironmentName.RUNTIME_MANAGER); if (manager != null) { try { org.kie.api.runtime.manager.Context<?> context = ProcessInstanceIdContext.get(processInstanceId); String caseId = (String) kruntime.getEnvironment().get(EnvironmentName.CASE_ID); if (caseId != null) { context = CaseContext.get(caseId); } RuntimeEngine runtime = manager.getRuntimeEngine(context); KieRuntime managedkruntime = (KieRuntime) runtime.getKieSession(); processInstance = (ProcessInstance) managedkruntime.getProcessInstance(processInstanceId); } catch (SessionNotFoundException e) { // in case no session is found for parent process let's skip signal for process instance completion } } else { processInstance = (ProcessInstance) kruntime.getProcessInstance(processInstanceId); } if (processInstance != null) { processInstance.setState(ProcessInstance.STATE_ABORTED); } } }
public void writeNode(Node node, StringBuilder xmlDump, int metaDataType) { SubProcessNode subProcessNode = (SubProcessNode) node; writeNode("callActivity", subProcessNode, xmlDump, metaDataType); if (subProcessNode.getProcessId() != null) { xmlDump.append("calledElement=\"" + XmlBPMNProcessDumper.replaceIllegalCharsAttribute(subProcessNode.getProcessId()) + "\" "); } if (!subProcessNode.isWaitForCompletion()) { xmlDump.append("tns:waitForCompletion=\"false\" "); } if (!subProcessNode.isIndependent()) { xmlDump.append("tns:independent=\"false\" "); } xmlDump.append(">" + EOL); writeExtensionElements(subProcessNode, xmlDump); writeIO(subProcessNode, xmlDump); endNode("callActivity", xmlDump); }
xmlDump.append("waitForCompletion=\"false\" "); if (!subProcessNode.isIndependent()) { xmlDump.append("independent=\"false\" ");
@Test public void testLoadProcessTaskReferenceCase() throws Exception { KieBase kbase = createKnowledgeBase("CMMN-ProcessTaskReferenceCase.cmmn"); assertThat(kbase).isNotNull(); Process process = kbase.getProcess("Case_636d4bea-4d52-46fb-b1ad-9ceeddf1be69"); assertThat(process).isNotNull(); assertThat(process).isInstanceOf(RuleFlowProcess.class); RuleFlowProcess caseProcess = (RuleFlowProcess) process; assertThat(caseProcess.isDynamic()).isTrue(); assertThat(caseProcess.getId()).isEqualTo("Case_636d4bea-4d52-46fb-b1ad-9ceeddf1be69"); assertThat(caseProcess.getName()).isEqualTo("ProcessTaskCase"); Node[] nodes = caseProcess.getNodes(); assertThat(nodes).hasSize(1); SubProcessNode processNode = (SubProcessNode) nodes[0]; assertThat(processNode.getName()).isEqualTo("call my process"); assertThat(processNode.getProcessId()).isEqualTo("_4e0c5178-c886-4a14-ab6b-6ec6c940194b"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(0); assertThat(processNode.getOutAssociations()).hasSize(0); }
assertThat(processNode.getProcessId()).isEqualTo("_4e0c5178-c886-4a14-ab6b-6ec6c940194b"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(0); assertThat(processNode.getOutAssociations()).hasSize(0);
assertThat(processNode.getProcessId()).isEqualTo("subprocessId"); assertThat(processNode.isWaitForCompletion()).isTrue(); assertThat(processNode.isIndependent()).isFalse(); assertThat(processNode.getInAssociations()).hasSize(1); assertThat(processNode.getInAssociations().get(0).getSources()).hasSize(1);
public void processInstanceCompleted(ProcessInstance processInstance) { removeEventListeners(); handleOutMappings(processInstance); if (processInstance.getState() == ProcessInstance.STATE_ABORTED) { String faultName = processInstance.getOutcome()==null?"":processInstance.getOutcome(); // handle exception as sub process failed with error code ExceptionScopeInstance exceptionScopeInstance = (ExceptionScopeInstance) resolveContextInstance(ExceptionScope.EXCEPTION_SCOPE, faultName); if (exceptionScopeInstance != null) { exceptionScopeInstance.handleException(faultName, processInstance.getFaultData()); if (getSubProcessNode() != null && !getSubProcessNode().isIndependent() && getSubProcessNode().isAbortParent()){ cancel(); } return; } else if (getSubProcessNode() != null && !getSubProcessNode().isIndependent() && getSubProcessNode().isAbortParent()){ ((ProcessInstance) getProcessInstance()).setState(ProcessInstance.STATE_ABORTED, faultName); return; } } // handle dynamic subprocess if (getNode() == null) { setMetaData("NodeType", "SubProcessNode"); } // if there were no exception proceed normally triggerCompleted(); }
if (!subProcess.isIndependent() && !subProcess.isWaitForCompletion()) { addErrorMessage(process, node,
public void cancel() { super.cancel(); if (getSubProcessNode() == null || !getSubProcessNode().isIndependent()) { ProcessInstance processInstance = null; InternalKnowledgeRuntime kruntime = ((ProcessInstance) getProcessInstance()).getKnowledgeRuntime(); RuntimeManager manager = (RuntimeManager) kruntime.getEnvironment().get(EnvironmentName.RUNTIME_MANAGER); if (manager != null) { try { org.kie.api.runtime.manager.Context<?> context = ProcessInstanceIdContext.get(processInstanceId); String caseId = (String) kruntime.getEnvironment().get(EnvironmentName.CASE_ID); if (caseId != null) { context = CaseContext.get(caseId); } RuntimeEngine runtime = manager.getRuntimeEngine(context); KieRuntime managedkruntime = (KieRuntime) runtime.getKieSession(); processInstance = (ProcessInstance) managedkruntime.getProcessInstance(processInstanceId); } catch (SessionNotFoundException e) { // in case no session is found for parent process let's skip signal for process instance completion } } else { processInstance = (ProcessInstance) kruntime.getProcessInstance(processInstanceId); } if (processInstance != null) { processInstance.setState(ProcessInstance.STATE_ABORTED); } } }