Introduction : In Windows Workflow Foundation, arguments represent the flow of data into and out of an activity. An activity has a set of arguments and they make up the signature of the activity. An argument is bound using an expression that returns value.

Let see how to create FlowDecision activity.

Step : 1 Create an Workflow Console Application.

work11.gif

Define the Class.

Step : 2 Goto Solution Explorer and right-click.


order.gif

Step : 3 Go to Solution Explorer and see.

solution.gif

Step : 4 Go to order.cs Class and write a code.

Code :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace op1
{

public class OrderItem
{
public int ID { get; set; }
public int Quantity { get; set; }
public string Code { get; set; }
public string Description { get; set; }
}
public class order
{
public order()
{
Items = new List<OrderItem>();
}
public int orderid { get; set; }
public string Description { get; set; }
public decimal Weight { get; set; }
public string ShippingMethod { get; set; }
public List<OrderItem> Items { get; set; }
}
}

Implementing the Workflow.

Solution template created a Workflow file name Workflow1.xaml.

Step : 5 Solution Explorer->right-click

Defining the Arguments.

Step : 6 Open the OrderWF.xaml file and define the arguments.


img.gif

Step : 7 Designing the Workflow.

Switch<T> activity works like a switch statement in c#. it allows we to execute a sequence activities.

sequence.gif
Step : 8
Select Switch<T>->Expression property.

Step : 9 Go to Solution Explorer->right-click.

Code :

<Switch x:TypeArguments="x:String" DisplayName="Handling charges" Expression="[orderinfo.ShippingMethod]"
sap:VirtualizedContainerService.HintSize="473,256"
>
<Switch.Default>
<
Add x:TypeArguments="x:Decimal, x:Decimal, x:Decimal" DisplayName="Add 8" Left="[Amount]" Result="[Amount]" Right="[9.0D]" />
</Switch.Default>
<
Add x:TypeArguments="x:Decimal, x:Decimal, x:Decimal" x:Key="Day" DisplayName="Add 8" sap:VirtualizedContainerService.HintSize="453,100"
Left="[Amount]" Result="[Amount]" Right="[18.0D]"
/>
<Add x:TypeArguments="x:Decimal, x:Decimal, x:Decimal" x:Key="firstday" DisplayName="Add 9" sap:VirtualizedContainerService.HintSize="453,100"
Left="[Amount]" Result="[Amount]" Right="[17.0D]"
/>
</Switch>
<
Assign DisplayName="charges" sap:VirtualizedContainerService.HintSize="473,57">
<Assign.To>
<
OutArgument x:TypeArguments="x:Decimal">[amount]</OutArgument>
</Assign.To>
<
Assign.Value>
<
InArgument x:TypeArguments="x:Decimal">[amount + (orderinfo.Weight * 0.8D)]</InArgument>

Step : 10 Drag Assign activity and set the DisplayName and write a code for value property.

Code :

"The total amount is : "
amount.ToString();

Step : 11 Go to program.cs file and write a code for Workflow.

Code :


using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Collections.Generic;
namespace op1
{
class Program
{
static void Main(string[] args)
{
order myOrder = new order()
{
orderid = 1,
Description = "Need some stuff",
ShippingMethod = "firstday",
Weight = 90
};
IDictionary<string, object> input = new Dictionary<string, object> { { "orderinfo", myOrder } };
IDictionary<string, object> output = WorkflowInvoker.Invoke(new orderWF(), input);
decimal amount = (decimal)output["amount"];
Console.WriteLine("Workflow returned ${0} for my order amount", amount);
Console.WriteLine("Hi");
Console.ReadLine();
}
}
}

Step : 12 Press F5 and run it.

resultc1.gif