/// <summary> /// Add a assign to var activity /// </summary> public static Workflow AddAssignToVar(this Workflow wf, string name, string expression, string targetVarName, string fromNamed = null, string fromExit = null) { var targetVar = wf.Variables.Union(wf.OutputArguments).First(v => v.Name == targetVarName); var assign = new AssignToVariable() { Name = name, TargetVariable = targetVar }; var assignAs = assign.As <WfActivity>(); AddExpressionToActivityArgument(wf, assignAs, "Value", expression); wf.AddActivity(assignAs, fromNamed, fromExit); AddMissingExpressionParametersToWorkflow(wf); return(wf); }
public void LoopWithinLoop_bug_17651() { using (new WorkflowRunContext { RunTriggersInCurrentThread = true }) { var wf = new Workflow() { Name = "LoopWithinLoop_bug_17651" }; wf.AddDefaultExitPoint(); var count = new IntegerArgument() { Name = "count" }; ActivityTestHelper.AddVariableToWorkflow(wf, count.As <ActivityArgument>()); wf.AddExpressionToWorkflowVariable("count", "0"); var foreachX = new ForEachResource() { Name = "ForEachX" + DateTime.Now }; var foreachXAs = foreachX.As <WfActivity>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, foreachXAs, "List", "all([Workflow Event])"); wf.FirstActivity = foreachXAs; wf.ContainedActivities.Add(foreachXAs); var foreachY = new ForEachResource() { Name = "ForEachY" + DateTime.Now }; var foreachYAs = foreachY.As <WfActivity>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, foreachYAs, "List", "all([Event Email Priority Enum])"); wf.ContainedActivities.Add(foreachYAs); ActivityTestHelper.AddTransition(wf, foreachXAs, foreachYAs, "Loop"); ActivityTestHelper.AddTermination(wf, foreachXAs, "Finished"); var assign = new AssignToVariable() { Name = "Assign" }; var assignAs = assign.As <WfActivity>(); assign.TargetVariable = count.As <ActivityArgument>(); ActivityTestHelper.AddExpressionToActivityArgument(wf, assignAs, "Value", "count + 1"); wf.ContainedActivities.Add(assignAs); ActivityTestHelper.AddTransition(wf, foreachYAs, assignAs, "Loop"); ActivityTestHelper.AddTransition(wf, foreachYAs, foreachXAs, "Finished"); ActivityTestHelper.AddTransition(wf, assignAs, foreachYAs); var output = new IntegerArgument() { Name = "out" }; var outputAs = output.As <ActivityArgument>(); wf.OutputArguments.Add(outputAs); ActivityTestHelper.AddAssignToVar(wf, "Set Output", "count", "out"); ActivityTestHelper.AddMissingExpressionParametersToWorkflow(wf); wf.Save(); ToDelete.Add(wf.Id); var run = (RunWorkflow(wf)); var outputs = run.GetOutput(); Assert.AreEqual(1, outputs.Count, "There is one output argument"); var result = (int)outputs["out"]; var triggeredOnCount = Entity.GetInstancesOfType <WorkflowEventEnum>(false).Count(); var runStateCount = Entity.GetInstancesOfType <EventEmailPriorityEnum>(false).Count(); Assert.AreEqual(triggeredOnCount * runStateCount, result, "The nested loops ran the correct number of times."); } }