예제 #1
0
        public void SimpleCountingLoop( )
        {
            using (new WorkflowRunContext {
                RunTriggersInCurrentThread = true
            })
            {
                var wf = new Workflow()
                {
                    Name = "Simple Counting " + DateTime.Now
                };

                wf.AddDefaultExitPoint();

                var input = new ResourceListArgument
                {
                    Name = "in"
                };

                wf.InputArguments.Add(input.As <ActivityArgument>());

                var output = new IntegerArgument
                {
                    Name = "out"
                };

                wf.OutputArguments.Add(output.As <ActivityArgument>());

                var employeeType = Entity.Get <EntityType>(new EntityRef("test", "employee"));

                wf.AddVariable <IntegerArgument>("Count")
                .AddAssignToVar("Assign To Count", "0", "Count")
                .AddForEach("foreach1", "in", "test:employee")
                .AddAssignToVar("Assign To Count 2", "[Count] + 1", "Count", "foreach1", "Loop")
                .AddTransition("Assign To Count 2", "foreach1");

                ActivityTestHelper.AddAssignToVar(wf, "AssignOutput", "Count", "out");

                ActivityTestHelper.AddMissingExpressionParametersToWorkflow(wf);

                wf.Save();

                var createdCount = 15;
                var resources    = Enumerable.Range(0, createdCount).Select(v => new Person()
                {
                    Name = v.ToString()
                }).ToList();
                Entity.Save(resources);

                var wfInput = new Dictionary <string, object>
                {
                    {
                        "in", resources
                    }
                };

                var run = (RunWorkflow(wf, wfInput));

                IDictionary <string, object> outputs = run.GetOutput();

                Assert.AreEqual(1, outputs.Count, "There is one output argument");

                var result = (int)outputs["out"];

                Assert.AreEqual(createdCount, result, "The loop ran the correct number of times");
            }
        }
        public void SetVariableTest( )
        {
            using (new WorkflowRunContext {
                RunTriggersInCurrentThread = true
            })
            {
                var workflow = new Workflow
                {
                    Name = "Wf" + DateTime.Now
                };

                workflow.AddDefaultExitPoint();

                var v1 = Entity.Create <IntegerArgument>().As <ActivityArgument>();
                v1.Name = "v1";
                ActivityTestHelper.AddVariableToWorkflow(workflow, v1);

                var v2 = Entity.Create <ResourceArgument>().As <ActivityArgument>();
                v2.Name = "v2";
                ActivityTestHelper.AddVariableToWorkflow(workflow, v2);

                var v3 = Entity.Create <ResourceListArgument>().As <ActivityArgument>();
                v3.Name = "v3";
                ActivityTestHelper.AddVariableToWorkflow(workflow, v3);

                // set starting values
                workflow.AddExpressionToWorkflowVariable("v1", "111", false);
                workflow.AddEntityExpressionToVariable("v2", new EntityRef("core:person"));
                //ActivityHelper.AddExpressionToWorkflowVariable(workflow, "v3", "[Resource Type]", false);

                // assign 222 to v1
                var setV1   = Entity.Create <AssignToVariable>();
                var setV1As = setV1.Cast <WfActivity>();
                setV1.TargetVariable = v1;
                ActivityTestHelper.AddExpressionToActivityArgument(workflow, setV1As, "Value", "222", false);
                workflow.FirstActivity = setV1As;
                workflow.ContainedActivities.Add(setV1As);
                ActivityTestHelper.AddTermination(workflow, setV1As);
                // output
                var v1Out   = Entity.Create <StringArgument>();
                var v1OutAs = v1Out.Cast <ActivityArgument>();
                v1Out.Name = "v1Out";

                workflow.OutputArguments.Add(v1OutAs);

                ActivityTestHelper.AddAssignToVar(workflow, "set out", "'output is ' + v1", "v1Out");
                ActivityTestHelper.AddMissingExpressionParametersToWorkflow(workflow);

                workflow.Save();

                ToDelete.Add(workflow.Id);

                var run = (RunWorkflow(workflow));

                Assert.IsTrue(run.WorkflowRunStatus_Enum == WorkflowRunState_Enumeration.WorkflowRunCompleted, "Run Completed");


                IDictionary <string, object> outputs = run.GetOutput();

                Assert.IsTrue(outputs.ContainsKey("v1Out"), "Output has the result.");
                Assert.AreEqual("output is 222", outputs["v1Out"], "Ensure the variable was updated and sent to the output");
            }
        }
예제 #3
0
        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.");
            }
        }