In this task, we will create a WF program using InOutArgument. This type of argument is used to receive values and is also used to pass values out to the caller (WF host).
How to do it…
Create a workflow project:
Create a new Workflow Console Application under the Chapter01 solution and name the project as UseInOutArgument.
Author a workflow:
Create an InOutArgument type argument: InOutMessage. Author a WF program as shown in the following screenshot. In the Assign activity textbox, type InOutMessage = "Now, I am an OutMessage".
Write code to host the workflow:
Open the Program.cs file and alter the code as shown:
using System;
using System.Activities;
using System.Activities.Statements;
using System.Collections.Generic;
namespace UseInOutArgument{
class Program{
static void Main(string[] args){
IDictionary<string, object> input =
new Dictionary<string, object>()
{
{"InOutMessage","Now, I am InMessage"}
};
IDictionary<string,object> output=
WorkflowInvoker.Invoke(new Workflow1(),input);
Console.WriteLine(output["InOutMessage"]);
}
}
}
Run it:
Set UseInOutArgument as Startup project. Press Ctrl+F5 to build and run the workflow without debugging. The application should run in a console window and print the message as shown in the following screenshot:
How it works...
The following code block initializes the InArgument value:
IDictionary<string, object> input =
new Dictionary<string, object>()
{
{"InOutMessage","Now, I am InMessage"}
};
This statement will run the workflow program with the input dictionary.
The string Now, I am InMessage is printed by the workflow. The string Now, I am an OutMessage is a message altered in the workflow and passed to the host and then printed by the host program.
There's more...
We cannot assign a string to InOutArgument directly, and the following style of parameter initialization is not allowed: