Book Image

Microsoft Windows Workflow Foundation 4.0 Cookbook

By : Andrew Zhu
Book Image

Microsoft Windows Workflow Foundation 4.0 Cookbook

By: Andrew Zhu

Overview of this book

Windows Workflow Foundation 4.0 (WF) is a significant part of .NET Framework 4.0. WF makes workflow technology available to every single programmer that uses the .NET Framework 4.0. It is easy to create long running and distributed programs using WF with the right knowledge. With this book, you will discover that working with workflows is easy. This book provides both step-by-step recipes and relevant background information. It covers all the important aspects of Windows Workflow Foundation 4.0. The best thing about this book is that all recipes are based on real-world experiences of Andrew Zhu. Andrew is a global WF and BizTalk technology support engineer for Microsoft. This book covers everything you need to know, when working with workflows. Get to grips with flow control activities, messaging, and transaction processes with easy to understand steps followed by explanations. You will quickly learn to use collection and custom WF activities and WF services.You will see recipes that illustrate integration of Windows Workflow with other applications such as WPF, ASP.NET, WCF service.Lastly, you will discover how easily you can customize W4 Designer with WF rule engine and others.
Table of Contents (15 chapters)
Microsoft Windows Workflow Foundation 4.0 Cookbook
Credits
About the Author
About the Reviewers
Foreword
Preface
Index

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...

  1. Create a workflow project:

    Create a new Workflow Console Application under the Chapter01 solution and name the project as LoadUpWorkflowFromXML.

  2. Author a workflow:

    Author the Workflow1.xaml file; this workflow will print a string to console as shown in the following screenshot:

  3. 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.

  4. 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()));