public override void Execute(IExecutionEntity execution) { StartEvent startEvent = (StartEvent)execution.CurrentFlowElement; EventSubProcess eventSubProcess = (EventSubProcess)startEvent.SubProcess; execution.IsScope = true; // initialize the template-defined data objects as variables IDictionary <string, object> dataObjectVars = ProcessDataObjects(eventSubProcess.DataObjects); if (dataObjectVars != null) { execution.VariablesLocal = dataObjectVars; } }
public override void Execute(IExecutionEntity execution) { StartEvent startEvent = (StartEvent)execution.CurrentFlowElement; EventSubProcess eventSubProcess = (EventSubProcess)startEvent.SubProcess; execution.CurrentFlowElement = eventSubProcess; execution.IsScope = true; // initialize the template-defined data objects as variables IDictionary <string, object> dataObjectVars = ProcessDataObjects(eventSubProcess.DataObjects); if (dataObjectVars != null) { execution.VariablesLocal = dataObjectVars; } IExecutionEntity startSubProcessExecution = Context.CommandContext.ExecutionEntityManager.CreateChildExecution(execution); startSubProcessExecution.CurrentFlowElement = startEvent; Context.Agenda.PlanTakeOutgoingSequenceFlowsOperation(startSubProcessExecution, true); }
public virtual void Parse(XMLStreamReader xtr, IList <SubProcess> activeSubProcessList, Process activeProcess) { SubProcess subProcess; if (BpmnXMLConstants.ELEMENT_TRANSACTION.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase)) { subProcess = new Transaction(); } else if (BpmnXMLConstants.ELEMENT_ADHOC_SUBPROCESS.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase)) { AdhocSubProcess adhocSubProcess = new AdhocSubProcess(); string orderingAttributeValue = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_ORDERING); if (!string.IsNullOrWhiteSpace(orderingAttributeValue)) { adhocSubProcess.Ordering = orderingAttributeValue; } if (BpmnXMLConstants.ATTRIBUTE_VALUE_FALSE.Equals(xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_CANCEL_REMAINING_INSTANCES), StringComparison.CurrentCultureIgnoreCase)) { adhocSubProcess.CancelRemainingInstances = false; } subProcess = adhocSubProcess; } else if (BpmnXMLConstants.ATTRIBUTE_VALUE_TRUE.Equals(xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_TRIGGERED_BY), StringComparison.CurrentCultureIgnoreCase)) { subProcess = new EventSubProcess(); } else { subProcess = new SubProcess(); } BpmnXMLUtil.AddXMLLocation(subProcess, xtr); activeSubProcessList.Add(subProcess); subProcess.Id = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_ID); subProcess.Name = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_NAME); bool async = false; string asyncString = xtr.GetAttributeValue(BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE, BpmnXMLConstants.ATTRIBUTE_ACTIVITY_ASYNCHRONOUS); if (BpmnXMLConstants.ATTRIBUTE_VALUE_TRUE.Equals(asyncString, StringComparison.CurrentCultureIgnoreCase)) { async = true; } bool notExclusive = false; string exclusiveString = xtr.GetAttributeValue(BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE, BpmnXMLConstants.ATTRIBUTE_ACTIVITY_EXCLUSIVE); if (BpmnXMLConstants.ATTRIBUTE_VALUE_FALSE.Equals(exclusiveString, StringComparison.CurrentCultureIgnoreCase)) { notExclusive = true; } bool forCompensation = false; string compensationString = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_ACTIVITY_ISFORCOMPENSATION); if (BpmnXMLConstants.ATTRIBUTE_VALUE_TRUE.Equals(compensationString, StringComparison.CurrentCultureIgnoreCase)) { forCompensation = true; } subProcess.Asynchronous = async; subProcess.NotExclusive = notExclusive; subProcess.ForCompensation = forCompensation; if (!string.IsNullOrWhiteSpace(xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DEFAULT))) { subProcess.DefaultFlow = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_DEFAULT); } if (activeSubProcessList.Count > 1) { SubProcess parentSubProcess = activeSubProcessList[activeSubProcessList.Count - 2]; parentSubProcess.AddFlowElement(subProcess); } else { activeProcess.AddFlowElement(subProcess); } }