官术网_书友最值得收藏!

Converting a WF program instance to XAML

In real applications, we would like to write and test WF programs in imperative code, while storing, running, and transmitting workflow as an XAML string or file. In this task, we will convert a WF program instance to an XAML string.

How to do it...

  1. Create a workflow project:

    Create a new Workflow Console Application under the Chapter01 solution and name the project ConvertWFInstanceToXML. Delete the Workflow1.xaml file that is created by default.

  2. Write code to create the workflow and its host:

    Open Program.cs file and change the code as follows:

    using System;
    using System.Activities;
    using System.Activities.Statements;
    using System.Text;
    using System.Xaml;
    using System.Activities.XamlIntegration;
    using System.IO;
    
    namespace ConvertWFObjectToXML {
        class Program {
            static void Main(string[] args) {
                //Create a Workflow instance object
                ActivityBuilder ab = new ActivityBuilder();
                ab.Implementation = new Sequence() 
                {
                    Activities =
                    {
                        new WriteLine{Text="Message from Workflow"}
                    }
                };
    
                //Convert Workflow instance to xml string
                StringBuilder sb = new StringBuilder();
                StringWriter sw = new StringWriter(sb);
                XamlWriter xw = 
                    ActivityXamlServices.CreateBuilderWriter(
                    new XamlXmlWriter(sw, 
                                      new XamlSchemaContext()));
                XamlServices.Save(xw, ab);
                Console.WriteLine(sb.ToString());
            }
        }
    }
  3. Run it:

    Set ConvertWFInstanceToXML 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 to do it...

Consider the following XML string reformatted from the screenshot:

<?xml version="1.0" encoding="utf-16"?>
<Activity  x:Class="{x:Null}" 
                  xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" 
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
       <Sequence>
            <WriteLine Text="Hello" />
       </Sequence>
</Activity>

How it works...

Consider the following code line:

XamlServices.Save(xw, ab);

XamlServices provides services for the common XAML tasks of reading XAML and writing an object graph, or reading an object and writing out an XAML file. This statement reads an ActivityBuilder object and writes XAML to an XamlWriter object.

We use ActivityBuilder as an activity wrapper so that the output XAML is a loadable workflow. In other words, if we save, say, a Sequence activity to an XamlWriter directly, then the output XML workflow will be unloadable for further use.

主站蜘蛛池模板: 百色市| 荥经县| 西昌市| 阿合奇县| 西藏| 平昌县| 哈尔滨市| 冀州市| 石台县| 蒲江县| 镇巴县| 高邑县| 南昌县| 北碚区| 枝江市| 武汉市| 东乡族自治县| 凤阳县| 蕉岭县| 湖南省| 成武县| 江津市| 成武县| 安福县| 伊春市| 盖州市| 宿松县| 邳州市| 吉林市| 罗定市| 永济市| 揭西县| 鄂州市| 望都县| 桑植县| 怀仁县| 萨嘎县| 乌拉特前旗| 渭源县| 双鸭山市| 西乌珠穆沁旗|