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 настроено правильно и не содержит ошибок. |