internal static DataAssociation ParseDataAssociation(XmlNode node) { var result = new DataAssociation(); if (node != null) { long id1, id2; if (long.TryParse(XmlHelper.GetNodeText(node, "id1"), out id1)) { result.ID1 = id1; } if (long.TryParse(XmlHelper.GetNodeText(node, "id2"), out id2)) { result.ID2 = id2; } result.Data = XmlHelper.GetNodeText(node, "data"); result.Name = XmlHelper.GetNodeText(node, "name"); double timeStamp; if (double.TryParse(XmlHelper.GetNodeText(node, "time"), out timeStamp)) { var createTime = DateHelper.ConvertDoubleToDate(timeStamp); result.Time = createTime; } } return(result); }
public void UpdateTheDataInputCurrentValue() { var output = new DataOutput("a"); var element1 = new NullElement(); element1.Outputs.Add(output); var input = new DataInput("a"); var element2 = new NullElement(); element2.Inputs.Add(input); var model = ProcessModel.Create() .AddNullElement("element1", element1) .AddNullElement("element2", element2) .AddDataAssociation("assoc", DataAssociation.Create("element1", "a", "element2", "a")); var models = new InMemoryProcessModelsStore(); models.Store(model); var manager = new ProcessManager( models, new InMemoryProcessInstancesStore() ); var instance = ProcessInstance.Create(model); manager.Attach(instance); var context = new ExecutionContext(manager, model, instance, instance.Token, null); output.Update(context, "element1", "Hello World"); input.GetCurrentValue(context, "element2").Should().Be("Hello World"); }
public override void ParseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) { if (!(parentElement is Activity)) { return; } DataAssociation dataAssociation = new DataAssociation(); BpmnXMLUtil.AddXMLLocation(dataAssociation, xtr); DataAssociationParser.parseDataAssociation(dataAssociation, ElementName, xtr); ((Activity)parentElement).DataInputAssociations.Add(dataAssociation); }
public void UsingDataReceivedInStartEventInTheFollowingAction() { var input = "Hello World"; string output = null; var start = CatchAnyEventCatcher.Create(); start.SetEventDataOutput("o"); var activity = LambdaActivity.Create((la, ctx) => { var i = la.GetDataInputByName("i"); output = (string)i.GetCurrentValue(ctx, "middle"); }); activity.Inputs.Add("i"); var model = ProcessModel.Create() .AddEventCatcher("start", start) .AddActivity("middle", activity) .AddEventThrower("end", SilentEventThrower.Instance) .AddSequenceFlow("start", "middle", "end") .AddDataAssociation("startToMiddle", DataAssociation.Create("start", "o", "middle", "i")); var models = new InMemoryProcessModelsStore(); models.Store(model); var instances = new InMemoryProcessInstancesStore(); var pm = new ProcessManager(models, instances); pm.HandleEvent(input); output.Should().Be(input); }
public static void parseDataAssociation(DataAssociation dataAssociation, string elementName, XMLStreamReader xtr) { bool readyWithDataAssociation = false; Assignment assignment = null; try { dataAssociation.Id = xtr.GetAttributeValue("id"); while (!readyWithDataAssociation && xtr.HasNext()) { //xtr.next(); if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_SOURCE_REF.Equals(xtr.LocalName)) { string sourceRef = xtr.ElementText; if (!string.IsNullOrWhiteSpace(sourceRef)) { dataAssociation.SourceRef = sourceRef.Trim(); } } else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TARGET_REF.Equals(xtr.LocalName)) { string targetRef = xtr.ElementText; if (!string.IsNullOrWhiteSpace(targetRef)) { dataAssociation.TargetRef = targetRef.Trim(); } } else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TRANSFORMATION.Equals(xtr.LocalName)) { string transformation = xtr.ElementText; if (!string.IsNullOrWhiteSpace(transformation)) { dataAssociation.Transformation = transformation.Trim(); } } else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_ASSIGNMENT.Equals(xtr.LocalName)) { assignment = new Assignment(); BpmnXMLUtil.AddXMLLocation(assignment, xtr); } else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_FROM.Equals(xtr.LocalName)) { string from = xtr.ElementText; if (assignment != null && !string.IsNullOrWhiteSpace(from)) { assignment.From = from.Trim(); } } else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TO.Equals(xtr.LocalName)) { string to = xtr.ElementText; if (assignment != null && !string.IsNullOrWhiteSpace(to)) { assignment.To = to.Trim(); } } else if (xtr.EndElement && BpmnXMLConstants.ELEMENT_ASSIGNMENT.Equals(xtr.LocalName)) { if (!string.IsNullOrWhiteSpace(assignment.From) && !string.IsNullOrWhiteSpace(assignment.To)) { dataAssociation.Assignments.Add(assignment); } } else if (xtr.EndElement && elementName.Equals(xtr.LocalName)) { readyWithDataAssociation = true; } if (xtr.IsEmptyElement && elementName.Equals(xtr.LocalName, StringComparison.OrdinalIgnoreCase)) { readyWithDataAssociation = true; } } } catch (Exception e) { log.LogWarning(e, "Error parsing data association child elements"); } }
protected internal virtual AbstractDataAssociation CreateDataOutputAssociation(DataAssociation dataAssociationElement) { if (!string.IsNullOrWhiteSpace(dataAssociationElement.SourceRef)) { return(new MessageImplicitDataOutputAssociation(dataAssociationElement.TargetRef, dataAssociationElement.SourceRef)); } else { ExpressionManager expressionManager = Context.ProcessEngineConfiguration.ExpressionManager; IExpression transformation = expressionManager.CreateExpression(dataAssociationElement.Transformation); AbstractDataAssociation dataOutputAssociation = new TransformationDataOutputAssociation(null, dataAssociationElement.TargetRef, transformation); return(dataOutputAssociation); } }
protected internal virtual AbstractDataAssociation CreateDataInputAssociation(DataAssociation dataAssociationElement) { if (dataAssociationElement.Assignments.Count == 0) { return(new MessageImplicitDataInputAssociation(dataAssociationElement.SourceRef, dataAssociationElement.TargetRef)); } else { SimpleDataInputAssociation dataAssociation = new SimpleDataInputAssociation(dataAssociationElement.SourceRef, dataAssociationElement.TargetRef); ExpressionManager expressionManager = Context.ProcessEngineConfiguration.ExpressionManager; foreach (Assignment assignmentElement in dataAssociationElement.Assignments) { if (!string.IsNullOrWhiteSpace(assignmentElement.From) && !string.IsNullOrWhiteSpace(assignmentElement.To)) { IExpression from = expressionManager.CreateExpression(assignmentElement.From); IExpression to = expressionManager.CreateExpression(assignmentElement.To); Datas.Assignment assignment = new Datas.Assignment(from, to); dataAssociation.AddAssignment(assignment); } } return(dataAssociation); } }
// validate null public ProcessModel AddDataAssociation( string name, DataAssociation association ) => AddElement( NamedProcessElement <DataAssociation> .Create(name, association) );