RuleAction 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示一个抽象类,该抽象类定义关联的 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 是否已正确配置且没有错误。 |