Beispiel #1
0
        /// <summary>
        /// Helper method to create a decision for scheduling an activity
        /// </summary>
        /// <returns>Decision with ScheduleActivityTaskDecisionAttributes</returns>
        Decision CreateActivityDecision(Common.WorkflowExecutionStartedInput startingInput, int RequestActionId)
        {
            // setup the input for the activity task.
            Common.ActivityTaskCompletedResult state = new Common.ActivityTaskCompletedResult
            {
                StartingInput = startingInput,
                RequestActionId = RequestActionId
            };

            Decision decision = new Decision()
            {
                DecisionType = DecisionType.ScheduleActivityTask,
                ScheduleActivityTaskDecisionAttributes = new ScheduleActivityTaskDecisionAttributes()
                {
                    ActivityType = new Amazon.SimpleWorkflow.Model.ActivityType()
                    {
                        Name = "MinimalWorkflowActivityType1",
                        Version = "5.0"
                    },
                    ActivityId = "MinimalWorkflowActivityType1" + DateTime.Now.TimeOfDay,
                    Input = Common.Utils.SerializeToJSON<Common.ActivityTaskCompletedResult>(state)
                }
            };
            Console.WriteLine(string.Format("Decision: Schedule Activity Task (RequestId {0} to RequestActionId {1})", state.StartingInput.RequestId, RequestActionId));
            return decision;
        }
Beispiel #2
0
        List<Decision> DecideHelper(Common.WorkflowExecutionStartedInput startingInput, List<Common.ActivityTaskCompletedResult> activityStates)
        {
            List<Decision> decisions = new List<Decision>();

            //the request should have a new state and actions...
            Request RequestCurrent = _tracker.GetRequestWithActions(startingInput.RequestId);

            IEnumerable<RequestAction> ActiveNotComplete = RequestCurrent.RequestActions.Where(x => (x.ActionTypeId == Common.Constants.AWSActivityTypeId || x.ActionTypeId == 2) && x.IsActive && !x.IsComplete);

            //if a request action was found that was "active" but not "complete" it must be run now
            if (ActiveNotComplete.Count() != 0)
            {

                //iterate through the active but not complete actions...
                foreach (RequestAction ra in ActiveNotComplete)
                {

                    if (ra.ActionTypeId == 1) //if state completed...
                    {
                        //code to tell SWF to fire activity for the new state
                        decisions.Add(CreateActivityDecision(startingInput, ra.RequestActionId ?? 0));
                    }
                    if (ra.ActionTypeId == 2) //if timer
                    {
                        // setup the input for the activity task.
                        Common.ActivityTaskCompletedResult state = new Common.ActivityTaskCompletedResult
                        {
                            StartingInput = startingInput,
                            RequestActionId = ra.RequestActionId ?? 0
                        };

                        Decision decision = new Decision()
                        {
                            DecisionType = DecisionType.StartTimer,
                            StartTimerDecisionAttributes = new StartTimerDecisionAttributes()
                            {
                                Control = Common.Utils.SerializeToJSON<Common.ActivityTaskCompletedResult>(state),
                                StartToFireTimeout = "3",
                                TimerId = DateTime.Now.Ticks.ToString()
                            }
                        };

                        decisions.Add(decision);
                    }

                }
            }
            else
            {
                Console.WriteLine("Workflow execution complete for " + startingInput.RequestId);
                //code to tell SWF to complete workflow execution
                decisions.Add(CreateCompleteWorkflowExecutionDecision(activityStates));
            }
            return decisions;
        }