Loading up a WF program from an XAML file
In this task, we will run a WF program by loading it from an XAML file.
How to do it...
Create a workflow project:
Create a new Workflow Console Application under the
Chapter01
solution and name the project asLoadUpWorkflowFromXML
.Author a workflow:
Author the
Workflow1.xaml
file; this workflow will print a string to console as shown in the following screenshot:Create code to load up the workflow instance from an XAML string:
Open
Program.cs
file and change code as follow:using System; using System.Activities; using System.Activities.Statements; using System.IO; using System.Collections; using System.Text; using System.Activities.XamlIntegration; namespace LoadUpWorkflowFromXML { class Program { static void Main(string[] args) { string filePath= @"C:\WF4Cookbook\Chapter01\LoadUpWFFromXML\Workflow1.xaml"; string tempString=""; StringBuilder xamlWFString = new StringBuilder(); StreamReader xamlStreamReader = new StreamReader(filePath); while (tempString != null){ tempString = xamlStreamReader.ReadLine(); if (tempString != null) { xamlWFString.Append(tempString); } } Activity wfInstance = ActivityXamlServices.Load( new StringReader(xamlWFString.ToString())); WorkflowInvoker.Invoke(wfInstance); } } }
Tip
We may need to change the file path according to our real environment.
Run it:
Set
LoadUpWorkflowFromXML
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...
We use the following code block to read a workflow XML string from file and store the string in xamlWFString
:
string filePath= @"C:\WF4Cookbook\Chapter01\LoadUpWFFromXML\Workflow1.xaml"; string tempString=""; StringBuilder xamlWFString = new StringBuilder(); StreamReader xamlStreamReader = new StreamReader(filePath); while (tempString != null) { tempString = xamlStreamReader.ReadLine(); if (tempString != null) { xamlWFString.Append(tempString); } }
Then, using the following statement, ActivityXamlServices
reads the XML workflow and builds up a workflow object graph:
Activity wfInstance = ActivityXamlServices.Load( new StringReader(xamlWFString.ToString()));