Introduction: A rule condition is a condition that can be evaluated to a Boolean value.
It features validation and cloning facilities, as well as a dependency
management mechanism. A rule action represents an action to be executed. A rule
set is a collection of rules that can be executed and validated as a group. Rule
or a Rule condition is involved as a property in an activity or a workflow, the
design-time editors for the rule or rule condition use these dialogs.
Step 1 : Open Visual Studio2010.
- Go to File->New->Project.
- Select Sequential Workflow Console
Application.
When we click in OK button then following
[Design] window opens.
Step 2 : Drag activity from Toolbox and
define activity name.
- Drag CodeActivity from Toolbox.
Step 3 : Now we double-click in
CodeActivity and write the below code.
Code :
using
System;
using
System.ComponentModel;
using
System.ComponentModel.Design;
using
System.Collections;
using
System.Collections.Generic;
using
System.Linq;
using
System.Workflow.ComponentModel.Compiler;
using
System.Workflow.ComponentModel.Serialization;
using
System.Workflow.ComponentModel;
using
System.Workflow.ComponentModel.Design;
using
System.Workflow.Runtime;
using
System.Workflow.Activities;
using
System.Workflow.Activities.Rules;
namespace
my_workflow
{
public sealed
partial class
Workflow1 :
SequentialWorkflowActivity
{
public
Dictionary<int,
string> cities = new
Dictionary<int,
string>();
public string
FromCity;
public string
ToCity;
public Workflow1()
{
InitializeComponent();
cities.Add(1, "allahabad");
cities.Add(2, "london");
cities.Add(3, "india");
cities.Add(4, "noida");
cities.Add(5, "delhi");
cities.Add(6, "banglore");
cities.Add(7, "istanbul");
cities.Add(8, "japan");
}
private void
codeActivity1_ExecuteCode(object sender,
EventArgs e)
{
Console.WriteLine("Enter
Passenger Name : ");
string passengerName =
Console.ReadLine();
Console.WriteLine("Enter
Departure City :");
this.FromCity =
Console.ReadLine();
Console.WriteLine("Enter
Destination City :");
this.ToCity =
Console.ReadLine();
}
The first activity of our workflow is
complete. Now as per scenario specified above, we will 'check' the user's
entered city names in our dictionary collection to ascertain do we have flights
available as per user's requirement, and on the basis of this 'condition check',
we will either display 'flight confirmed or not.
Step 4 : Drag If ElseActivity from
Toolbox for the condition because after the condition check display the message
in user console.
Step 5 : Now define Rule Condition
Editor for each branch.
- Select If Else condition and right-click.
- Select properties define Condition-Name and
Expression.
- When we click Condition-Name then open Rule
Condition Editor open.
- Click New option and define condition.
Condition :
this.cities.ContainsValue(this.FromCity.ToLower()) == True &&
this.cities.ContainsValue(this.ToCity.ToLower()) == True
Step 6 : Define same as IfElseActivity2
give condition in Rule Condition Editor.
Condition :
!this.cities.ContainsValue(this.FromCity.ToLower()) == True && !this.cities.ContainsValue(this.ToCity.ToLower())
== True
Step 7 : Now again drag
CodeActivity from Toolbox and double-click and write the below code.
Code :
private
void codeActivity2_ExecuteCode(object
sender, EventArgs e)
{
Console.WriteLine("Flight
Booking Confirmed!");
Console.ReadKey();
}
private void
codeActivity3_ExecuteCode(object sender,
EventArgs e)
{
Console.WriteLine("Sorry,
No Such Flight Exists!");
Console.ReadKey();
}
Step 8 : Now go to Program.cs
file and write the below code.
Code :
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading;
using
System.Workflow.Runtime;
using
System.Workflow.Runtime.Hosting;
namespace
my_workflow
{
class Program
{
static void
Main(string[] args)
{
using (WorkflowRuntime
workflowRuntime = new
WorkflowRuntime())
{
AutoResetEvent waitHandle =
new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted +=
delegate(object sender,
WorkflowCompletedEventArgs e) {
waitHandle.Set(); };
workflowRuntime.WorkflowTerminated +=
delegate(object sender,
WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance =
workflowRuntime.CreateWorkflow(typeof(my_workflow.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
}
}
}
Step 9 : Now press F5 and run
the application.