private static IWorkflowNode CompressTree(WorkflowParser.Workflow workflow, ParseAs parseAs) { if (parseAs == ParseAs.RollUp) { return(CompressRollUp(workflow.Activities[0] as WorkflowParser.ActivitySequence)); } if (parseAs == ParseAs.Workflow) { return(new ActivityList(CompressActivityCollection(workflow.Activities).ToArray())); } throw new NotImplementedException("No logic for parsing that kind of xaml in workflowconstructor"); }
public static WorkflowTree Parse(Entity workflow, Dictionary <string, CodeActivity> codeActivites, ParseAs parseAs) { if (workflow == null || workflow.LogicalName != LogicalNames.Workflow) { throw new WorkflowException($"Entity had logicalname '{LogicalNames.Workflow}' instead of workflow"); } var parsed = Parser.Parse(workflow.GetAttributeValue <string>("xaml")); var triggerFields = new HashSet <string>(); if (workflow.GetAttributeValue <string>("triggeronupdateattributelist") != null) { foreach (var field in workflow.GetAttributeValue <string>("triggeronupdateattributelist").Split(',')) { triggerFields.Add(field); } } var arguments = parsed.Members.Properties.Where(p => p.Attributes != null).Select(p => ConvertToArgument(p)); var input = arguments.Where(a => a.Direction == WorkflowArgument.DirectionType.Input && !a.IsTarget).ToList(); var output = arguments.Where(a => a.Direction == WorkflowArgument.DirectionType.Output && !a.IsTarget).ToList(); return(new WorkflowTree(CompressTree(parsed.Workflow, parseAs), workflow.GetAttributeValue <bool?>("triggeroncreate"), workflow.GetAttributeValue <bool?>("triggerondelete"), triggerFields, workflow.GetOptionSetValue <workflow_runas>("runas"), workflow.GetOptionSetValue <Workflow_Scope>("scope"), workflow.GetOptionSetValue <workflow_stage>("createstage"), workflow.GetOptionSetValue <workflow_stage>("updatestage"), workflow.GetOptionSetValue <workflow_stage>("deletestage"), workflow.GetOptionSetValue <Workflow_Mode>("mode"), workflow.GetAttributeValue <EntityReference>("ownerid").Id, workflow.GetAttributeValue <string>("primaryentity"), codeActivites, input, output)); }