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); }
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); }
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); }
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); }
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); }