RuleAction Класс

Определение

Представляет абстрактный класс, определяющий действие, которое следует выполнить, если связанное условие Condition оказывается равным true для свойства ThenActions или false для свойства ElseActions. Этот класс должен наследоваться.

public ref class RuleAction abstract
[System.Serializable]
public abstract class RuleAction
[<System.Serializable>]
type RuleAction = class
Public MustInherit Class RuleAction
Наследование
RuleAction
Производный
Атрибуты

Примеры

Следующий код создает действие, которое можно использовать в наборах правил. Действие имеет имя Log и принимает единственный параметр строкового типа. Это действие выводит на консоль строку.

Чтобы использовать этот код, необходимо добавить его в проект библиотеки классов и создать ссылку на библиотеку из проекта рабочего процесса.

using System;  
using System.CodeDom;  
using System.Collections.Generic;  
using System.Text;  
using System.Workflow.Activities.Rules;  
using System.Workflow.ComponentModel.Compiler;  

namespace LogRuleAction  
{  
    public class Log : RuleAction  
    {  
        CodeExpression message;  

        public CodeExpression Message  
        {  
            get { return message; }  
            set { message = value; }  
        }  

        public Log()  
        {  
            // constructor required for deserialization  
        }  

        public Log(CodeExpression expression)  
        {  
            // constructor required by parser  
            message = expression;  
        }  

        public override bool Validate(RuleValidation validator)  
        {  
            ValidationError error;  
            if (message == null)  
            {  
                error = new ValidationError("Message cannot be null", 123);  
                validator.Errors.Add(error);  
                return false;  
            }  
            else  
            {  
                RuleExpressionInfo result = RuleExpressionWalker.Validate(validator, message, false);  
                if ((result == null) || (result.ExpressionType != typeof(string)))  
                {  
                    error = new ValidationError("Message must return string result", 123);  
                    validator.Errors.Add(error);  
                    return false;  
                }  
            }  
            return (validator.Errors.Count == 0);  
        }  

        public override RuleAction Clone()  
        {  
            Log result = new Log();  
            result.Message = RuleExpressionWalker.Clone(message);  
            return result;  
        }  

        public override void Execute(RuleExecution context)  
        {  
            RuleExpressionResult result = RuleExpressionWalker.Evaluate(context, message);  
            if (result != null)  
                Console.WriteLine(result.Value);  
        }  

        public override ICollection<string> GetSideEffects(RuleValidation validation)  
        {  
            RuleAnalysis analysis = new RuleAnalysis(validation, true);  
            if (message != null)  
                RuleExpressionWalker.AnalyzeUsage(analysis, message, true, false, null);  
            return analysis.GetSymbols();  
        }  

        public override string ToString()  
        {  
            // what should be displayed by the parser  
            StringBuilder result = new StringBuilder("Log(");  
            RuleExpressionWalker.Decompile(result, message, null);  
            result.Append(")");  
            return result.ToString();  
        }  
    }  
}  

Комментарии

Объекты RuleStatementAction (которые можно использовать как в качестве свойства ThenActions, так и в качестве свойства ElseActions) обычно устанавливают значение переменной для одного из свойств действия, вызывают метод действия или вызывают статические методы для типов из доступных по ссылкам сборок.

RuleAction является базовым классом, на основе которого создаются производные классы RuleStatementAction, RuleHaltAction и RuleUpdateAction. Эти классы используются следующим образом.

  • Класс RuleStatementAction изменяет свойство или вызывает метод.

  • Класс RuleHaltAction вызывает прекращение выполнения набора правил RuleSet и возвращает управление вызывающему методу.

  • Класс RuleUpdateAction явным образом указывает, что правило обновляет переменную. Это вызывает повторное вычисление всех связанных правил.

Конструкторы

RuleAction()

При реализации в производном классе инициализирует новый экземпляр класса RuleAction.

Методы

Clone()

Создает глубокую копию текущего объекта RuleAction.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Execute(RuleExecution)

Выполняет действие RuleAction с использованием указанного экземпляра RuleExecution.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetSideEffects(RuleValidation)

Возвращает поля и свойства, обновленные с помощью действия RuleAction.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Validate(RuleValidation)

Проверяет, что действие RuleAction настроено правильно и не содержит ошибок.

Применяется к