Exemplo n.º 1
0
        public void Test___Method_Stop___Status_Created()
        {
            var variable1 = new AnyVariable <int>();
            var variable2 = new AnyVariable <int>();

            var testee = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    new AssignActivity()
                    {
                        To = variable1, Value = new AnyVariable <int>()
                        {
                            Value = 10
                        }
                    },
                    new AssignActivity()
                    {
                        To = variable2, Value = new AnyVariable <int>()
                        {
                            Value = 20
                        }
                    }
                }
            };

            testee.Stop();

            Assert.AreEqual(ActivityStatus.Stopped, testee.Status);
            Assert.IsNull(variable1.GetValueAsObject());
            Assert.IsNull(variable2.GetValueAsObject());
        }
Exemplo n.º 2
0
        public async Task Test___Method_Stop___Status_Executing()
        {
            var duration = new AnyVariable <int>()
            {
                Value = 1000
            };

            var testee = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    new DelayActivity()
                    {
                        Duration = duration
                    },
                    new DelayActivity()
                    {
                        Duration = duration
                    }
                }
            };

            var task = testee.Start();

            Assert.AreEqual(ActivityStatus.Executing, testee.Status);

            testee.Stop();

            await task;

            Assert.AreEqual(ActivityStatus.Stopped, testee.Status);
        }
Exemplo n.º 3
0
        static async Task Main(string[] args)
        {
            var statusCode = new AnyVariable <HttpStatusCode>();
            var data       = new AnyVariable <string>();

            var activity = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    // start WFLite.AspNetCore.HelloWorld first.
                    new RestAsyncActivity <string>()
                    {
                        BaseUrl = new AnyVariable("http://localhost:51115/"),
                        Request = new RequestVariable()
                        {
                            Resource = new AnyVariable("api/values")
                        },
                        Response = new ResponseVariable <string>()
                        {
                            StatusCode = statusCode,
                            Data       = data
                        }
                    },
                    new ConsoleWriteLineActivity()
                    {
                        Value = data
                    }
                }
            };

            await activity.Start();

            Console.ReadKey();
        }
Exemplo n.º 4
0
        static async Task Main(string[] args)
        {
            var greeting = new AnyVariable <string>();

            var activity = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    new AssignActivity <string, int>()
                    {
                        To        = greeting,
                        Value     = new NowHourVariable(),
                        Converter = new HourToGreetingConverter()
                    },
                    new ConsoleWriteLineActivity()
                    {
                        Value = greeting
                    }
                }
            };

            await activity.Start();

            Console.ReadKey();
        }
Exemplo n.º 5
0
        public async Task Test___Method_Start___Status_Created()
        {
            var variable1 = new AnyVariable <int>();
            var variable2 = new AnyVariable <int>();

            var testee = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    new AssignActivity()
                    {
                        To = variable1, Value = new AnyVariable <int>()
                        {
                            Value = 10
                        }
                    },
                    new AssignActivity()
                    {
                        To = variable2, Value = new AnyVariable <int>()
                        {
                            Value = 20
                        }
                    }
                }
            };

            await testee.Start();

            Assert.AreEqual(ActivityStatus.Completed, testee.Status);
            Assert.AreEqual(10, variable1.GetValueAsObject());
            Assert.AreEqual(20, variable2.GetValueAsObject());
        }
Exemplo n.º 6
0
        public async Task Test___Method_Start___Status_Created___Issue_2()
        {
            var lastAct = string.Empty;

            var testee = new SequenceActivity()
            {
                Activities = new List <IActivity>()
                {
                    new SequenceActivity()
                    {
                        Activities = new List <IActivity>()
                        {
                            new FuncSyncActivity()
                            {
                                Func = () =>
                                {
                                    lastAct = "Act1_1";
                                    return(true);
                                }
                            },
                            new FuncSyncActivity()
                            {
                                Func = () =>
                                {
                                    lastAct = "Act1_2";
                                    return(false);   // stopped
                                }
                            },
                            new FuncSyncActivity()
                            {
                                Func = () =>
                                {
                                    lastAct = "Act1_3";
                                    return(true);
                                }
                            }
                        }
                    },
                    new FuncSyncActivity()
                    {
                        Func = () =>
                        {
                            lastAct = "Act2_1";
                            return(true);
                        }
                    }
                }
            };

            await testee.Start();

            Assert.AreEqual("Act1_2", lastAct);
        }
Exemplo n.º 7
0
 public WriteLineActivity(IActorContext context, IActorRef self, IActorRef sender, string message)
 {
     Activity = new SequenceActivity()
     {
         Activities = new List <IActivity>()
         {
             new ConsoleWriteLineActivity(new AnyVariable(message)),
             new TellActivity()
             {
                 ActorRef = new AnyVariable <IActorRef>(sender),
                 Message  = new AnyVariable(message)
             }
         }
     };
 }
Exemplo n.º 8
0
        public void RunProgram()
        {
            var workflow = new SequenceActivity();

            // setting property values like this only works for primitive types
            //workflow.firstName = "Graham";

            IDictionary<string, object> inputs = new Dictionary<string, object>();
            inputs["firstName"] = "Graham";

            //IDictionary<string, object> outputs = WorkflowInvoker.Invoke(workflow, inputs);
            //Console.WriteLine(outputs["greeting"]);

            var app = new WorkflowApplication(workflow, inputs);
            app.Completed = e =>
                {
                    Console.WriteLine("Completed with CompletionState {0}", e.CompletionState);
                    Console.WriteLine(e.Outputs["greeting"]);
                };
            app.Run();
        }
Exemplo n.º 9
0
        void Container1()
        {
            System.Workflow.Activities.CodeCondition codecondition1 = new System.Workflow.Activities.CodeCondition();

            // <snippet180>
            // <snippet181>
            // <snippet182>
            this.WhileLoop       = new System.Workflow.Activities.WhileActivity();
            this.Parallel        = new System.Workflow.Activities.ParallelActivity();
            this.Sequence1       = new System.Workflow.Activities.SequenceActivity();
            this.Sequence2       = new System.Workflow.Activities.SequenceActivity();
            this.ConsoleMessage1 = new System.Workflow.Activities.CodeActivity();
            this.ConsoleMessage2 = new System.Workflow.Activities.CodeActivity();
            //
            // WhileLoop
            //
            this.WhileLoop.Activities.Add(this.Parallel);
            codecondition1.Condition += new System.EventHandler <System.Workflow.Activities.ConditionalEventArgs>(this.WhileCondition);
            this.WhileLoop.Condition  = codecondition1;
            this.WhileLoop.Name       = "WhileLoop";
            // </snippet182>
            //
            // Parallel
            //
            this.Parallel.Activities.Add(this.Sequence1);
            this.Parallel.Activities.Add(this.Sequence2);
            this.Parallel.Name = "Parallel";
            // </snippet181>
            //
            // Sequence1
            //
            this.Sequence1.Activities.Add(this.ConsoleMessage1);
            this.Sequence1.Name = "Sequence1";
            //
            // Sequence2
            //
            this.Sequence2.Activities.Add(this.ConsoleMessage2);
            this.Sequence2.Name = "Sequence2";
            // </snippet180>
        }
Exemplo n.º 10
0
        private void ProcessOutlookNoteActivity(ParallelActivity activityList)
        {
            OutlookNote outlookNoteActivity = new OutlookNote();

            outlookNoteActivity.Name = "CreateOutlookNote";
            SequenceActivity branch = new SequenceActivity();

            branch.Name = "branch2";
            branch.Activities.Add(outlookNoteActivity);

            if (activityList != null)
            {
                activityList.Activities.Add(branch);
            }
            else
            {
                workflowDesigner.SequentialWorkflow.Activities.Add(branch);
            }

            workflowDesigner.Host.RootComponent.Site.Container.Add(outlookNoteActivity);
            workflowDesigner.Host.RootComponent.Site.Container.Add(branch);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Execute the activity
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns>Exedcuting if any children are running, otherwise Closed</returns>
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            if (null == executionContext)
            {
                throw new ArgumentNullException("executionContext");
            }

            this.IsExecuting = true;

            for (int pos = 0; pos < base.EnabledActivities.Count; pos++)
            {
                SequenceActivity act = base.EnabledActivities[pos] as SequenceActivity;

                if (null != act)
                {
/*                    foreach (Account account in Customer.Accounts)
 *                  {
 *                      if (account.GetType() == act.AccountType)
 *                      {
 *                          act.Account = account;
 *                          act.RegisterForStatusChange(Activity.ClosedEvent, this);
 *                          executionContext.ExecuteActivity(act);
 *                      }
 *                  }*/

                    act.RegisterForStatusChange(Activity.ClosedEvent, this);
                    executionContext.ExecuteActivity(act);
                }
            }

            if (base.EnabledActivities.Count != 0)
            {
                return(ActivityExecutionStatus.Executing);
            }
            else
            {
                return(ActivityExecutionStatus.Closed);
            }
        }
Exemplo n.º 12
0
        private void ProcessAutoReplyEmailActivity(ParallelActivity activityList)
        {
            AutoReplyEmail emailActivity = new AutoReplyEmail();

            emailActivity.Name = "AutoReplyEmail";
            SequenceActivity branch = new SequenceActivity();

            branch.Name = "branch1";
            branch.Activities.Add(emailActivity);

            if (activityList != null)
            {
                activityList.Activities.Add(branch);
            }
            else
            {
                workflowDesigner.SequentialWorkflow.Activities.Add(branch);
            }

            workflowDesigner.Host.RootComponent.Site.Container.Add(emailActivity);
            workflowDesigner.Host.RootComponent.Site.Container.Add(branch);
        }
Exemplo n.º 13
0
        public void RunProgram()
        {
            var workflow = new SequenceActivity();

            // setting property values like this only works for primitive types
            //workflow.firstName = "Graham";

            IDictionary <string, object> inputs = new Dictionary <string, object>();

            inputs["firstName"] = "Graham";

            //IDictionary<string, object> outputs = WorkflowInvoker.Invoke(workflow, inputs);
            //Console.WriteLine(outputs["greeting"]);

            var app = new WorkflowApplication(workflow, inputs);

            app.Completed = e =>
            {
                Console.WriteLine("Completed with CompletionState {0}", e.CompletionState);
                Console.WriteLine(e.Outputs["greeting"]);
            };
            app.Run();
        }
Exemplo n.º 14
0
        /// <summary>
        /// Execute the activity
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns>Exedcuting if any children are running, otherwise Closed</returns>
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            if (null == executionContext)
            {
                throw new ArgumentNullException("executionContext");
            }

            this.IsExecuting = true;

            bool executingChildren = false;

            DateTime date = (this.Date == DateTime.MinValue) ? DateTime.Now : this.Date;

            // Get the day of the week from this activity & convert to a WeekdayEnum
            WeekdayEnum weekday = date.DayOfWeek == 0 ? WeekdayEnum.Sunday : (WeekdayEnum)(Convert.ToInt32(Math.Pow(2, (int)date.DayOfWeek)));

            for (int pos = 0; pos < base.EnabledActivities.Count; pos++)
            {
                SequenceActivity act = base.EnabledActivities[pos] as SequenceActivity;

                if (null != act)
                {
                    // Get the attached Weekday property for the activity
                    WeekdayEnum weekdays = (WeekdayEnum)GetWeekday(act);

                    // Now check for a match
                    if ((weekdays & weekday) != WeekdayEnum.None)
                    {
                        executingChildren = true;
                        act.RegisterForStatusChange(Activity.ClosedEvent, this);
                        executionContext.ExecuteActivity(act);
                    }
                }
            }

            return(executingChildren ? ActivityExecutionStatus.Executing : ActivityExecutionStatus.Closed);
        }
Exemplo n.º 15
0
        private void InitializeComponent()
        {
            Console.WriteLine("1");

            CanModifyActivities = true;
            CodeCondition codecondition1 = new CodeCondition();

            CodeCloseMailProgram2           = new CodeActivity();
            CodeCloseMailProgram3           = new CodeActivity();
            DelayWaitForSentMail2           = new DelayActivity();
            DelayWaitForSentMail3           = new DelayActivity();
            PrepareMail2                    = new CodeActivity();
            PrepareMail3                    = new CodeActivity();
            CodeCloseMailProgram1           = new CodeActivity();
            DelayWaitForSentMail1           = new DelayActivity();
            CodePrepareMail1                = new CodeActivity();
            SeqSendMail2                    = new SequenceActivity();
            SeqSendMail1                    = new SequenceActivity();
            SeqSendMail3                    = new SequenceActivity();
            TerminateFinishNoNeedToReadMail = new TerminateActivity();
            Parallel = new ParallelActivity();
            IfElseBranchActivityNoNeed         = new IfElseBranchActivity();
            IfElseBranchActivityNeedToSendMail = new IfElseBranchActivity();
            NeedToSendMail = new IfElseActivity();

            PrepareMail3.Name         = "PrepareMail3";
            PrepareMail3.ExecuteCode += new EventHandler(PrepareMail3_ExecuteCode);

            CodeCloseMailProgram3.Name         = "CodeCloseMailProgram3";
            CodeCloseMailProgram3.ExecuteCode += new EventHandler(CodeCloseMailProgram3_ExecuteCode);

            DelayWaitForSentMail3.Name            = "DelayWaitForSentMail3";
            DelayWaitForSentMail3.TimeoutDuration = TimeSpan.Parse("00:00:03");

            CodeCloseMailProgram2.Name         = "CodeCloseMailProgram2";
            CodeCloseMailProgram2.ExecuteCode += new EventHandler(CodeCloseMailProgram2_ExecuteCode);

            DelayWaitForSentMail2.Name            = "DelayWaitForSentMail2";
            DelayWaitForSentMail2.TimeoutDuration = TimeSpan.Parse("00:00:02");

            PrepareMail2.Name         = "PrepareMail2";
            PrepareMail2.ExecuteCode += new EventHandler(PrepareMail2_ExecuteCode);

            CodeCloseMailProgram1.Name         = "CodeCloseMailProgram1";
            CodeCloseMailProgram1.ExecuteCode += new EventHandler(CodeCloseMailProgram_ExecuteCode);

            DelayWaitForSentMail1.Name            = "DelayWaitForSentMail1";
            DelayWaitForSentMail1.TimeoutDuration = TimeSpan.Parse("00:00:05");
            CodePrepareMail1.Name         = "CodePrepareMail1";
            CodePrepareMail1.ExecuteCode += new EventHandler(CodeActivity1_ExecuteCode);

            SeqSendMail2.Activities.Add(PrepareMail2);
            SeqSendMail2.Activities.Add(DelayWaitForSentMail2);
            SeqSendMail2.Activities.Add(CodeCloseMailProgram2);
            SeqSendMail2.Name = "SeqSendMail2";

            SeqSendMail3.Activities.Add(PrepareMail3);
            SeqSendMail3.Activities.Add(DelayWaitForSentMail3);
            SeqSendMail3.Activities.Add(CodeCloseMailProgram3);
            SeqSendMail3.Name = "SeqSendMail3";

            SeqSendMail1.Activities.Add(CodePrepareMail1);
            SeqSendMail1.Activities.Add(DelayWaitForSentMail1);
            SeqSendMail1.Activities.Add(CodeCloseMailProgram1);
            SeqSendMail1.Name = "SeqSendMail1";

            TerminateFinishNoNeedToReadMail.Name = "TerminateFinishNoNeedToReadMail";

            Parallel.Activities.Add(SeqSendMail1);
            Parallel.Activities.Add(SeqSendMail2);
            Parallel.Activities.Add(SeqSendMail3);
            Parallel.Name = "Parallel";

            IfElseBranchActivityNoNeed.Activities.Add(TerminateFinishNoNeedToReadMail);
            IfElseBranchActivityNoNeed.Name = "IfElseBranchActivityNoNeed";

            IfElseBranchActivityNeedToSendMail.Activities.Add(Parallel);
            codecondition1.Condition += new EventHandler <ConditionalEventArgs>(IfElseCondition);
            IfElseBranchActivityNeedToSendMail.Condition = codecondition1;
            IfElseBranchActivityNeedToSendMail.Name      = "IfElseBranchActivityNeedToSendMail";

            NeedToSendMail.Activities.Add(IfElseBranchActivityNeedToSendMail);
            NeedToSendMail.Activities.Add(IfElseBranchActivityNoNeed);
            NeedToSendMail.Name = "NeedToSendMail";

            Activities.Add(NeedToSendMail);
            Name = "IfElseParalellWorkFlow";
            CanModifyActivities = false;
        }
        private void InitializeComponent()
        {
            parallel1             = new ParallelActivity();
            sequence1             = new SequenceActivity();
            sequence2             = new SequenceActivity();
            begin                 = new CodeActivity();
            end                   = new CodeActivity();
            increment1            = new CodeActivity();
            increment2            = new CodeActivity();
            decrement1            = new CodeActivity();
            decrement2            = new CodeActivity();
            SynchronizedDecrement = new SynchronizationScopeActivity();
            SynchronizedIncrement = new SynchronizationScopeActivity();
            System.Collections.Generic.List <string> stringCollection1 = new System.Collections.Generic.List <string>();
            System.Collections.Generic.List <string> stringCollection2 = new System.Collections.Generic.List <string>();

            this.CanModifyActivities = true;
            // parallel
            this.parallel1.Activities.Add(sequence1);
            this.parallel1.Activities.Add(sequence2);
            this.parallel1.Name = "parallel1";

            // sequences
            this.sequence1.Activities.Add(SynchronizedIncrement);
            this.sequence1.Name = "sequence1";
            this.sequence2.Activities.Add(SynchronizedDecrement);
            this.sequence2.Name = "sequence2";

            // both synchronization activities are set to  the same syncMutex string
            // in order for the parallel activity to provide synchronization guarantees for shared data access to count variable
            this.SynchronizedIncrement.Name = "SynchronizedIncrement";
            stringCollection1.Add("syncMutex");
            this.SynchronizedIncrement.SynchronizationHandles = stringCollection1;
            this.SynchronizedIncrement.Activities.Add(increment1);
            this.SynchronizedIncrement.Activities.Add(increment2);

            this.SynchronizedDecrement.Name = "SynchronizedDecrement";
            stringCollection2.Add("syncMutex");
            this.SynchronizedDecrement.SynchronizationHandles = stringCollection2;
            this.SynchronizedDecrement.Activities.Add(decrement1);
            this.SynchronizedDecrement.Activities.Add(decrement2);

            // code activities
            begin.Name         = "begin";
            begin.ExecuteCode += new EventHandler(Begin_ExecuteCode);

            end.Name         = "end";
            end.ExecuteCode += new EventHandler(End_ExecuteCode);

            increment1.Name         = "increment1";
            increment1.ExecuteCode += new EventHandler(Increment1_ExecuteCode);

            increment2.Name         = "increment2";
            increment2.ExecuteCode += new EventHandler(Increment2_ExecuteCode);

            decrement1.Name         = "decrement1";
            decrement1.ExecuteCode += new EventHandler(Decrement1_ExecuteCode);

            decrement2.Name         = "decrement2";
            decrement2.ExecuteCode += new EventHandler(Decrement2_ExecuteCode);

            // workflow activities
            this.Activities.Add(begin);
            this.Activities.Add(parallel1);
            this.Activities.Add(end);
            this.Name = "SynchronizedActivityWorkflow";
            this.CanModifyActivities = false;
        }
Exemplo n.º 17
0
        // GET: Sequences/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Sequence sequence = db.Sequences.Find(id);

            if (sequence == null)
            {
                return(HttpNotFound());
            }

            var sDisp = new SequenceDisp();

            sDisp.CopyData(sequence);
            sDisp.Region             = (from r in db.Regions where r.RegionID == sDisp.RegionID select r).First();
            sDisp.SelectedActivities = (from sa in db.SequencesToActivities
                                        join a in db.Activities on sa.ActivityID equals a.ActivityID
                                        join d1 in db.Destinations on a.Dest1ID equals d1.DestinationID
                                        join d2 in db.Destinations on a.Dest2ID equals d2.DestinationID
                                        where sa.SequenceID == id
                                        orderby sa.Seqnr
                                        select new SequenceActivity
            {
                Seqnr = sa.Seqnr,
                Id = a.ActivityID,
                Activity = a,
                Reverted = sa.Reverted,
                Dest1 = d1,
                Dest2 = d2
            }).ToList();
            if (sDisp.SelectedActivities.Count() > 0)
            {
                SequenceActivity sa = sDisp.SelectedActivities[sDisp.SelectedActivities.Count() - 1];
                int dID             = (sa.Reverted ? sa.Dest1.DestinationID : sa.Dest2.DestinationID);
                // limit Activities to those that start where the last one ended
                sDisp.AvailableActivities = (from a in db.Activities
                                             join d1 in db.Destinations on a.Dest1ID equals d1.DestinationID
                                             join d2 in db.Destinations on a.Dest2ID equals d2.DestinationID
                                             where d1.RegionID == sequence.RegionID & (a.Dest1ID == dID | a.Dest2ID == dID)
                                             orderby a.ExperienceRating descending
                                             select new SequenceActivity
                {
                    Seqnr = 0,
                    Id = a.ActivityID,
                    Activity = a,
                    Reverted = false,
                    Dest1 = d1,
                    Dest2 = d2
                }).ToList();
            }
            else
            {
                sDisp.AvailableActivities = (from a in db.Activities
                                             join d1 in db.Destinations on a.Dest1ID equals d1.DestinationID
                                             join d2 in db.Destinations on a.Dest2ID equals d2.DestinationID
                                             where d1.RegionID == sequence.RegionID
                                             orderby a.ExperienceRating descending
                                             select new SequenceActivity
                {
                    Seqnr = 0,
                    Id = a.ActivityID,
                    Activity = a,
                    Reverted = false,
                    Dest1 = d1,
                    Dest2 = d2
                }).ToList();
            }

            ViewBag.RegionID = new SelectList(db.Regions, "RegionID", "Name", sequence.RegionID);
            return(View(sDisp));
        }