コード例 #1
0
        public ActivityResult ProcessWorkFlow(FuzeActivity container, FuzeActivity currentActivity, ActivityInput input)
        {
            Contracts.ActivityResult activityResult = null;
            container.CurrentActivityID = currentActivity.ActivityID;

            // map all input to the activity for activity execution.
            SetInputMappingsFromWorkFlow(container, currentActivity);

            // execute the workflow
            currentActivity.Execute();

            // map if the item has any output mappings.
            SetOutputMappingsToWorkFlow(container, currentActivity);

            // check the activity type
            if (currentActivity.ActivityType == "FORM")
            {
                // map all output to the activity result.
                activityResult = new ActivityResult();
                activityResult.Results = new Dictionary<string, object>();
              //  activityResult.Results.Add("FormResult", currentActivity.GetType().GetProperty("ActivityResult").GetValue(currentActivity, null));
                MapOutPutMappingToActivityResult(container, currentActivity, activityResult);
                activityResult.ValidationResults = currentActivity.ValidationErros.ToDictionary(c => c.ValidationKey, x => x.ValidationResult);

                // check for persistance
                PersistActivity(container, input);
                activityResult.WorkflowInstanceID = input.WorkflowInstanceID;
                if (currentActivity.OutComes == null || currentActivity.OutComes.Count() == 0)
                {
                    RemoveActivityInstance(input.WorkflowInstanceID);
                }

                return activityResult;
            }
            else if (currentActivity.ActivityType == "CUSTOM")
            {
                if (currentActivity.OutComes == null || currentActivity.OutComes.Count() == 0)
                {
                    RemoveActivityInstance(input.WorkflowInstanceID);
                    return activityResult;
                }

                container.NextActivityID = currentActivity.OutComes.First().Activity.ActivityID;
                return ProcessWorkFlow(container, currentActivity.OutComes.First().Activity, input);
            }
            return activityResult;
        }