/// <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); }
/// <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); }