Editar

Partilhar via


RuleAction Class

Definition

Represents an abstract class that defines an action to be executed if the associated Condition evaluates to true, for ThenActions, or false, for ElseActions. This class must be inherited.

public ref class RuleAction abstract
[System.Serializable]
public abstract class RuleAction
[<System.Serializable>]
type RuleAction = class
Public MustInherit Class RuleAction
Inheritance
RuleAction
Derived
Attributes

Examples

The following code creates an action that can be used in rule sets. The action is named Log, and takes a single parameter, which must evaluate to a string. This action outputs the string to the Console.

To use this code, add it to a Class Library project and reference the library from your workflow project.

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

Remarks

RuleStatementAction objects (which can be used as both ThenActions and ElseActions) typically set a variable value on one of the properties of the activity, call a method of the activity, or call static methods on types in referenced assemblies.

RuleAction is the base type that RuleStatementAction, RuleHaltAction, and RuleUpdateAction classes derive from. The uses of these classes is as follows:

  • A RuleStatementAction modifies a property or calls a method.

  • A RuleHaltAction causes the RuleSet to stop executing and returns control to the calling method.

  • A RuleUpdateAction explicitly indicates that a rule is updating a variable. This causes the re-evaluation of any affected rules.

Constructors

RuleAction()

When implemented in a derived class, initializes a new instance of the RuleAction class.

Methods

Clone()

Creates a deep copy of the current RuleAction.

Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
Execute(RuleExecution)

Executes the RuleAction using the specified RuleExecution instance.

GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetSideEffects(RuleValidation)

Returns the fields and properties updated by a RuleAction.

GetType()

Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
ToString()

Returns a string that represents the current object.

(Inherited from Object)
Validate(RuleValidation)

Verifies that the RuleAction is configured correctly and has no errors.

Applies to