/// <summary>
        /// Action implementation.
        /// </summary>
        /// <param name="ruleContext">
        /// The rule context.
        /// </param>
        public sealed override void Apply([NotNull] TRuleContext ruleContext)
        {
            Assert.IsNotNull(ruleContext, "ruleContext");
            Assert.IsNotNull(ruleContext.Item, "ruleContext.Item");
            Assert.IsNotNullOrEmpty(OperatorId, "OperatorId is null or empty");

            if (ruleContext.IsAborted)
            {
                return;
            }

            try
            {
                var msg = "RuleAction " + GetType().Name + " started for " + ruleContext.Item.Name;

                Trace.TraceInformation(msg);

                var hierarchyItems = ItemHierarchyOperatorUtils.GetHierarchyItems(ruleContext, OperatorId);
                ApplyRule(hierarchyItems, ruleContext);
            }
            catch (Exception exception)
            {
                var msg = "RuleAction " + GetType().Name + " failed.";
                Log.Error(msg, exception, this);
                Trace.TraceError(msg);
            }

            var message = "RuleAction " + GetType().Name + " ended for " + ruleContext.Item.Name;

            Trace.TraceInformation(message);
        }
예제 #2
0
        /// <summary>
        /// The execute rule.
        /// </summary>
        /// <param name="ruleContext">The rule context.</param>
        /// <returns>
        /// <c>True</c>, if the condition succeeds, otherwise <c>false</c>.
        /// </returns>
        protected override bool ExecuteRule(TRuleContext ruleContext)
        {
            Assert.IsNotNullOrEmpty(OperatorId, "OperatorId is null or empty");

            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var item in ItemHierarchyOperatorUtils.GetHierarchyItems(ruleContext, OperatorId))
            {
                if (!Condition(item))
                {
                    continue;
                }

                if (!string.IsNullOrWhiteSpace(ParameterKey))
                {
                    ruleContext.Parameters[ParameterKey] = item;
                }

                return(true);
            }

            return(false);
        }