RuleAction 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示抽象類別 (Abstract Class),定義如果相關聯的 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
,並採用單一參數,此參數必須評估為字串。 這個動作會輸出字串至主控台。
若要使用這個程式碼,請將它加入類別庫 (Class Library) 專案,並參考工作流程專案中的程式庫。
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 類別從中衍生的基底型別 (Base Type)。 這些類別的用法如下:
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 已正確設定,而且沒有任何錯誤。 |