Example #1
0
        public IContainerStepBuilder <TData, When, OutcomeSwitch> When(Expression <Func <TData, object> > outcomeValue, string label = null)
        {
            var newStep = new WorkflowStep <When>();
            Expression <Func <When, object> > inputExpr = (x => x.ExpectedOutcome);

            newStep.Inputs.Add(new MemberMapParameter(outcomeValue, inputExpr));

            IStepBuilder <TData, OutcomeSwitch> switchBuilder;

            if (Step.BodyType != typeof(OutcomeSwitch))
            {
                var switchStep = new WorkflowStep <OutcomeSwitch>();
                WorkflowBuilder.AddStep(switchStep);
                Step.Outcomes.Add(new StepOutcome()
                {
                    NextStep = switchStep.Id,
                    Label    = label
                });
                switchBuilder = new StepBuilder <TData, OutcomeSwitch>(WorkflowBuilder, switchStep);
            }
            else
            {
                switchBuilder = (this as IStepBuilder <TData, OutcomeSwitch>);
            }

            WorkflowBuilder.AddStep(newStep);
            var stepBuilder = new ReturnStepBuilder <TData, When, OutcomeSwitch>(WorkflowBuilder, newStep, switchBuilder);

            switchBuilder.Step.Children.Add(newStep.Id);

            return(stepBuilder);
        }
Example #2
0
        public IContainerStepBuilder <TData, Recur, TStepBody> Recur(Expression <Func <TData, TimeSpan> > interval, Expression <Func <TData, bool> > until)
        {
            var newStep = new CancellableStep <Recur, TData>(until);
            Expression <Func <Recur, TimeSpan> > intervalExpr = (x => x.Interval);
            Expression <Func <Recur, bool> >     untilExpr    = (x => x.StopCondition);

            newStep.Inputs.Add(new DataMapping()
            {
                Source = interval, Target = intervalExpr
            });
            newStep.Inputs.Add(new DataMapping()
            {
                Source = until, Target = untilExpr
            });

            WorkflowBuilder.AddStep(newStep);
            var stepBuilder = new ReturnStepBuilder <TData, Recur, TStepBody>(WorkflowBuilder, newStep, this);

            Step.Outcomes.Add(new StepOutcome()
            {
                NextStep = newStep.Id
            });

            return(stepBuilder);
        }
Example #3
0
        public IContainerStepBuilder <TData, Schedule, TStepBody> Schedule(Expression <Func <TData, TimeSpan> > time)
        {
            var newStep = new WorkflowStep <Schedule>();
            Expression <Func <Schedule, TimeSpan> > inputExpr = (x => x.Interval);

            newStep.Inputs.Add(new MemberMapParameter(time, inputExpr));

            WorkflowBuilder.AddStep(newStep);
            var stepBuilder = new ReturnStepBuilder <TData, Schedule, TStepBody>(WorkflowBuilder, newStep, this);

            Step.Outcomes.Add(new ValueOutcome {
                NextStep = newStep.Id
            });

            return(stepBuilder);
        }
Example #4
0
        public IContainerStepBuilder <TData, Recur, TStepBody> Recur(Expression <Func <TData, TimeSpan> > interval, Expression <Func <TData, bool> > until)
        {
            var newStep = new WorkflowStep <Recur>();

            newStep.CancelCondition = until;

            Expression <Func <Recur, TimeSpan> > intervalExpr = (x => x.Interval);
            Expression <Func <Recur, bool> >     untilExpr    = (x => x.StopCondition);

            newStep.Inputs.Add(new MemberMapParameter(interval, intervalExpr));
            newStep.Inputs.Add(new MemberMapParameter(until, untilExpr));

            WorkflowBuilder.AddStep(newStep);
            var stepBuilder = new ReturnStepBuilder <TData, Recur, TStepBody>(WorkflowBuilder, newStep, this);

            Step.Outcomes.Add(new ValueOutcome {
                NextStep = newStep.Id
            });

            return(stepBuilder);
        }
Example #5
0
        public IContainerStepBuilder <TData, Schedule, TStepBody> Schedule(Expression <Func <TData, TimeSpan> > time)
        {
            var newStep = new WorkflowStep <Schedule>();
            Expression <Func <Schedule, TimeSpan> > inputExpr = (x => x.Interval);

            var mapping = new DataMapping()
            {
                Source = time,
                Target = inputExpr
            };

            newStep.Inputs.Add(mapping);

            WorkflowBuilder.AddStep(newStep);
            var stepBuilder = new ReturnStepBuilder <TData, Schedule, TStepBody>(WorkflowBuilder, newStep, this);

            Step.Outcomes.Add(new StepOutcome()
            {
                NextStep = newStep.Id
            });

            return(stepBuilder);
        }