Esempio n. 1
0
        /// <summary>
        /// 检查触发器是否达到了触发条件
        /// </summary>
        /// <param name="ivtask"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        private bool CheckTriggerConditions(TaskDefinition task, TaskTrigger trigger)
        {
            logger.DebugFormat("开始检查{0}的输出触发器", task.Name);

            IDictionary properties;

            if (!this.taskProperties.TryGetValue(task.ID, out properties))
            {
                logger.DebugFormat("流程{0}的{1}触发器失败", task.Name, trigger.Name);
                return(false);
            }

            if (!properties.Contains(trigger.Property))
            {
                logger.DebugFormat("流程{0}的{1}触发条件触发失败, PropertyKey不存在:{2}", task.Name, trigger.Name, trigger.Property);
                return(false);
            }

            // TODO: 根据不同的值类型做不同的判断,比如int,枚举
            if (properties[trigger.Property].ToString() != trigger.Value.ToString())
            {
                logger.DebugFormat("流程{0}的{1}触发条件触发失败, PropertyValue不同:{2}", task.Name, trigger.Name, properties[trigger.Property]);
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// 执行指定的触发器
        /// </summary>
        /// <param name="trigger">要执行的触发器</param>
        /// <returns>返回触发器执行是否成功</returns>
        private bool ExecuteTriggerFinal(TaskTrigger trigger)
        {
            foreach (TaskDefinition task in trigger.TaskList)
            {
                // 触发器触发的Task也执行重试逻辑
                bool ret = DelegateUtility.ContinuousInvoke <TaskDefinition>(this.ExecuteTask, task, task.RetryTimes);
                if (!ret)
                {
                    // 执行失败,
                    return(false);
                }
                else
                {
                    // 执行成功,继续执行下一个
                }
            }

            return(true);
        }