Work with Arguments in Workflow

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.


Define the Class.

Step : 2 Goto Solution Explorer and right-click.

  • Select Add->NewItem->Class.
  • Select Class template and specify the name as order.cs.
  • Click Add option.


Step : 3 Go to Solution Explorer and see.


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

  • Select Rename and change a name.
  • Open file and change Class attribute.


Defining the Arguments.

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

  • Click the Arguments button at the bottom left of the Workflow designer.
  • Click the Create Argument Link and write Name as Orderinfo.
  • Click argument type and select Browser for types.


Step : 7 Designing the Workflow.

  • Drag a Sequence ,WriteLine, Assign activity, Switch<T> activity.
  • Right -click and write a DisplayName.

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

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

  • Write a Expression.
  • Click->Add new case link.
  • Enter the case value.

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

  • OrderWF.xaml->ViewCode and write a code.

Code :

<Switch x:TypeArguments="x:String" DisplayName="Handling charges" Expression="[orderinfo.ShippingMethod]"
Add x:TypeArguments="x:Decimal, x:Decimal, x:Decimal" DisplayName="Add 8" Left="[Amount]" Result="[Amount]" Right="[9.0D]" />
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]"
Assign DisplayName="charges" sap:VirtualizedContainerService.HintSize="473,57">
OutArgument x:TypeArguments="x:Decimal">[amount]</OutArgument>
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 : "

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

Step : 12 Press F5 and run it.