예제 #1
0
        private async Task ExecuteTriggerActions(IEnumerable <Trigger> triggers, IEntity source)
        {
            foreach (var trigger in triggers)
            {
                if (trigger.Disabled)
                {
                    logger.LogInformation($"Trigger.Fire :: {trigger.ID} :: Status:Disabled");
                    continue;
                }

                bool meetConditions = await evaluateConditionService.MeetConditions(trigger, trigger.Conditions);

                if (!meetConditions)
                {
                    logger.LogInformation($"Trigger.Fire :: {trigger.ID} :: Status:ConditionsNotMet");
                    continue;
                }

                logger.LogInformation($"Trigger.Fire :: {trigger.ID}");

                List <Task> triggerActionTasks = new(trigger.Actions.Length);
                foreach (int action in trigger.Actions)
                {
                    triggerActionTasks.Add(actionExecutionService.Execute(action, source ?? trigger));
                }

                await Task.WhenAll(triggerActionTasks);
            }
        }
예제 #2
0
        void IActionCoordinationService.Run(Dictionary <string, Configuration.Action> declaredActions, XmlElement coordinationData)
        {
            IActionExecutionService execution = GetService <IActionExecutionService>(true);

            foreach (Config.Action config in declaredActions.Values)
            {
                execution.Execute(config.Name);
            }
        }
예제 #3
0
        /// <exclude />
        public void ExecuteAction(EntityToken entityToken, ActionToken actionToken)
        {
            var flowControllerServicesContainer = GetFlowControllerServicesContainer();

            IActionExecutionService actionExecutionService = flowControllerServicesContainer.GetService <IActionExecutionService>();

            var taskManagerEvent = new WorkflowCreationTaskManagerEvent(_instanceId);

            actionExecutionService.Execute(entityToken, actionToken, taskManagerEvent);
        }
예제 #4
0
        /// <exclude />
        protected void ExecuteAction(EntityToken entityToken, ActionToken actionToken)
        {
            FlowControllerServicesContainer flowControllerServicesContainer = WorkflowFacade.GetFlowControllerServicesContainer(WorkflowEnvironment.WorkflowInstanceId);

            IActionExecutionService actionExecutionService = flowControllerServicesContainer.GetService <IActionExecutionService>();

            var taskManagerEvent = new WorkflowCreationTaskManagerEvent(_instanceId);

            actionExecutionService.Execute(entityToken, actionToken, taskManagerEvent);
        }
        /// <summary>
        /// Runs the coordination using the configuration data specified in the configuration file.
        /// </summary>
        /// <param name="declaredActions">Actions defined in the package configuration file for the currently executing recipe.</param>
        /// <param name="coordinationData">The configuration data used to setup the coordination.</param>
        public void Run(Dictionary <string, Microsoft.Practices.RecipeFramework.Configuration.Action> declaredActions,
                        XmlElement coordinationData)
        {
            IActionExecutionService exec = GetService <IActionExecutionService>(true);
            int amountCompleted          = 0;

            try
            {
                foreach (Microsoft.Practices.RecipeFramework.Configuration.Action action in declaredActions.Values)
                {
                    amountCompleted++;
                    visualStudio.StatusBar.Progress(true, Properties.Resources.StatusBarProgressMessage, amountCompleted, declaredActions.Values.Count);

                    bool execute = (action.AnyAttr == null || action.AnyAttr.Length == 0);

                    if (!execute)
                    {
                        IDictionaryService          dictservice = (IDictionaryService)GetService(typeof(IDictionaryService));
                        ExpressionEvaluationService evaluator   = new ExpressionEvaluationService();
                        execute = true;
                        foreach (XmlAttribute att in action.AnyAttr)
                        {
                            if (att.Name.Equals(ConditionalCoordinator.ConditionalAttributeName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                try
                                {
                                    execute = (bool)evaluator.Evaluate(att.Value, new ServiceAdapterDictionary(dictservice));
                                }
                                catch (Exception e)
                                {
                                    execute = false;
                                    System.Diagnostics.Trace.TraceWarning(Properties.Resources.InvalidConditionException, e.Message, e.StackTrace);
                                }
                                break;
                            }
                        }
                    }

                    if (execute)
                    {
                        Trace.TraceInformation(Properties.Resources.ExecutingAction, action.Name);
                        exec.Execute(action.Name);
                    }
                }
            }
            finally
            {
                visualStudio.StatusBar.Progress(false, "", 0, 0);
            }
        }
예제 #6
0
        /// <exclude />
        protected sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            FormsWorkflow formsWorkflow = this.GetRoot <FormsWorkflow>();

            FlowControllerServicesContainer flowControllerServicesContainer = WorkflowFacade.GetFlowControllerServicesContainer(WorkflowEnvironment.WorkflowInstanceId);

            IActionExecutionService actionExecutionService = flowControllerServicesContainer.GetService <IActionExecutionService>();

            WorkflowActionToken workflowActionToken = new WorkflowActionToken(this.ChildWorkflowType)
            {
                Payload = this.ChildWorkflowPayload,
                ParentWorkflowInstanceId = formsWorkflow.InstanceId
            };

            actionExecutionService.Execute(formsWorkflow.EntityToken, workflowActionToken, null);

            return(ActivityExecutionStatus.Closed);
        }
        public void Run(Dictionary <string, Microsoft.Practices.RecipeFramework.Configuration.Action> declaredActions, XmlElement coordinationData)
        {
            IActionExecutionService service = base.GetService <IActionExecutionService>(true);
            int amountCompleted             = 0;

            try
            {
                foreach (Microsoft.Practices.RecipeFramework.Configuration.Action action in declaredActions.Values)
                {
                    amountCompleted++;
                    bool flag = (action.AnyAttr == null) || (action.AnyAttr.Length == 0);
                    if (!flag)
                    {
                        IDictionaryService          serviceToAdapt = (IDictionaryService)this.GetService(typeof(IDictionaryService));
                        ExpressionEvaluationService service3       = new ExpressionEvaluationService();
                        flag = true;
                        foreach (XmlAttribute attribute in action.AnyAttr)
                        {
                            if (attribute.Name.Equals("Condition", StringComparison.InvariantCultureIgnoreCase))
                            {
                                try
                                {
                                    flag = (bool)service3.Evaluate(attribute.Value, new ServiceAdapterDictionary(serviceToAdapt));
                                }
                                catch (Exception exception)
                                {
                                    flag = false;
                                    Trace.TraceWarning("InvalidConditionException", new object[] { exception.Message, exception.StackTrace });
                                }
                                break;
                            }
                        }
                    }
                    if (flag)
                    {
                        service.Execute(action.Name);
                    }
                }
            }
            finally
            {
                this.visualStudio.StatusBar.Progress(false, "", 0, 0);
            }
        }
예제 #8
0
        /// <summary>
        /// Runs the coordination using the configuration data specified in the configuration file.
        /// </summary>
        /// <param name="declaredActions">Actions defined in the package configuration file for the currently executing recipe.</param>
        /// <param name="coordinationData">The configuration data used to setup the coordination.</param>
        public void Run(Dictionary <string, Config.Action> declaredActions, XmlElement coordinationData)
        {
            IActionExecutionService exec = GetService <IActionExecutionService>(true);
            string currentAction         = null;

            try
            {
                foreach (Config.Action action in declaredActions.Values)
                {
                    currentAction = action.Name;
                    exec.Execute(action.Name);
                }
            }
            catch (Exception e)
            {
                IConfigurationService config = GetService <IConfigurationService>(true);
                DteHelperEx.ShowMessageInOutputWindow(
                    GetService <DTE>(true),
                    string.Format(CultureInfo.CurrentCulture,
                                  Properties.Resources.FailSafeCoordinatorExceptionMessage,
                                  config.CurrentRecipe.Caption, config.CurrentRecipe.Name, currentAction, e.Message),
                    DteHelperEx.GetPackageFriendlyName(this.Site));
            }
        }