RuleAction Class

 

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.

Namespace:   System.Workflow.Activities.Rules
Assembly:  System.Workflow.Activities (in System.Workflow.Activities.dll)


<SerializableAttribute>
Public MustInherit Class RuleAction

NameDescription
System_CAPS_protmethodRuleAction()

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

NameDescription
System_CAPS_pubmethodClone()

Creates a deep copy of the current RuleAction.

System_CAPS_pubmethodEquals(Object)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_pubmethodExecute(RuleExecution)

Executes the RuleAction using the specified RuleExecution instance.

System_CAPS_protmethodFinalize()

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.)

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetSideEffects(RuleValidation)

Returns the fields and properties updated by a RuleAction.

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_protmethodMemberwiseClone()

Creates a shallow copy of the current Object.(Inherited from Object.)

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

System_CAPS_pubmethodValidate(RuleValidation)

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

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.

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

.NET Framework
Available since 3.0

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: