WF4.0 Beta2:关于动态保存和装载XAML工作流

简介:

1.ActivityXamlServices类的主要功能是从XAML文件创建活动树的实例。提供了下面四个方法:

CreateBuilderReader:Overloaded. Maps an x:Class activity tree to an ActivityBuilder or ActivityBuilder<(Of <(TResult>)>).
CreateBuilderWriter:Maps an ActivityBuilder or ActivityBuilder<(Of <(TResult>)>) from the specified writer to an
x:Class activity tree.
CreateReader:Overloaded. Maps an x:Class activity tree to an DynamicActivity or DynamicActivity<(Of <(TResult>)>).
Load:Overloaded. Creates an instance of a declarative workflow.
Load方法遇到标记有<Activity x:Class的XAML会返回一个DynamicActivity. 
 
 2.下面一个具体的例子:
ActivityBuilder ab1 = new ActivityBuilder();
 ab1.Name = "HelloWorldCary";
 ab1.Properties.Add(new DynamicActivityProperty { Name = "input1", Type = typeof(InArgument<string>) });
 ab1.Properties.Add(new DynamicActivityProperty { Name = "input2", Type = typeof(InArgument<string>) });
 ab1.Properties.Add(new DynamicActivityProperty { Name = "output", Type = typeof(OutArgument<string>) });
 ab1.Implementation = new Sequence
 {
     Activities = 
     {
         new WriteLine{Text="Getting Started"},
         new Delay{Duration=TimeSpan.FromSeconds(4)},
         new WriteLine{Text=new VisualBasicValue<string>{ExpressionText="input1+input2"}},
         new Assign<string>{To=new VisualBasicReference<string>{ExpressionText="output"},
                 Value=new VisualBasicValue<string>{ExpressionText="input1+input2+\"  that's ok!\""}}
     }
 };
 StringBuilder sb = new StringBuilder();
 StringWriter tw = new StringWriter(sb);
 XamlWriter xw = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(tw,new XamlSchemaContext()));
 XamlServices.Save(xw,ab1);
 string serializedAB = sb.ToString();

 DynamicActivity da2 = ActivityXamlServices.Load(new StringReader(serializedAB)) as DynamicActivity;
 var result = WorkflowInvoker.Invoke(da2, new Dictionary<string, object> { {"input1","hello"},{"input2","world"}});
 Console.WriteLine("result text is {0}",result["output"]);

 ActivityBuilder ab = XamlServices.Load(
     ActivityXamlServices.CreateBuilderReader(
         new XamlXmlReader(new StringReader(serializedAB)))) as ActivityBuilder;
 Console.WriteLine("there are {0} arguments in the activity builder",ab.Properties.Count);
 Console.WriteLine("press enter to exit");
 Console.WriteLine(sb.ToString());
 Console.ReadLine();

 

3.执行的结果如下:
--------------------------------------------------------------------------------------------
Getting Started
helloworld
result text is helloworld  that's ok!
there are 3 arguments in the activity builder
press enter to exit
--------------------------------------------------------------------------------------------

4.生成的XAML如下:

<?xml version="1.0" encoding="utf-16"?>
<Activity x:Class="HelloWorldCary" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <x:Members>
        <x:Property Name="input1" Type="InArgument(x:String)" />
        <x:Property Name="input2" Type="InArgument(x:String)" />
        <x:Property Name="output" Type="OutArgument(x:String)" />
    </x:Members>
    <Sequence>
        <WriteLine Text="Getting Started" />
        <Delay Duration="00:00:04" />
        <WriteLine Text="[input1+input2]" />
        <Assign x:TypeArguments="x:String" To="[output]" Value="[input1+input2+&quot;  that's ok!&quot;]" />
    </Sequence>
</Activity>

本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2009/10/24/1589076.html,如需转载请自行联系原作者
相关文章
|
Cloud Native Devops Shell
ArgoWorkflow教程(六)---无缝实现步骤间参数传递
本文为ArangoWorkflow系列教程第六篇,详细介绍了在同一Workflow中不同步骤间如何实现参数传递,避免了通过文件传递的不便。文章重点讲解了导出结果和导入参数的方法,并演示了如何将上一步骤的输出参数作为下一步骤的输入参数。此外,还介绍了ArgoWorkflow内置的`result`参数,可用于捕获容器的标准输出。通过具体示例和代码片段,读者可轻松掌握这一重要功能。
263 0
|
机器学习/深度学习 供应链 安全
量子计算在物流中的应用前景?
【8月更文挑战第4天】量子计算在物流中的应用前景?
367 2
|
存储 机器学习/深度学习 人工智能
一文读懂ChatGPT的工作原理
【7月更文挑战第24天】.一文读懂ChatGPT的工作原理
683 2
GB28181 基于osip和exosip 环境搭建
GB28181 基于osip和exosip 环境搭建
486 0
|
XML 运维 网络协议
一个DNS解析引发的“血案”
在复杂网络环境中,面对问题时,我们需要借助数据包分析技术来定位和解决。虽然没有固定的分析流程,但通常会通过排除法,从网络层、设备层和应用层指标入手。
|
机器学习/深度学习 SQL 人工智能
《阿里云AI产品必知必会系列电子书》——机器学习平台PAI——DesignerQuickStart使用教程(1)
《阿里云AI产品必知必会系列电子书》——机器学习平台PAI——DesignerQuickStart使用教程(1)
1391 1
|
API C# Windows
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#对Windows窗口或窗口句柄的操作,都是通过 P/Invoke Win32 API 实现的,DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口...
5947 0
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
|
开发者
《钉钉应用开发者速成手册》之“注册钉钉开发者”
在开始使用开放平台提供的能力进行应用开发前,需要先完成钉钉开发者注册。
1416 0
《钉钉应用开发者速成手册》之“注册钉钉开发者”
|
NoSQL 关系型数据库 MySQL
为互联网业务而生:阿里云全球首发云Cassandra服务!
引言:十年沉淀、全球宽表排名第一、阿里云首发云Cassandra服务 ApsaraDB for Cassandra是基于开源Apache Cassandra,融合阿里云数据库DBaaS能力的分布式NoSQL数据库。
|
前端开发 JavaScript 开发工具
TypeScript的前世今生
(本文首发于[ayqy.net](http://www.ayqy.net/blog/typescript%e7%ae%80%e4%bb%8b_typescript%e7%ac%94%e8%ae%b01/),用️原创系列。) ## 一.背景 > 2010 – 微软团队开始开发 > 2012 – 第一个公开版本发布(TypeScript 0.8) > 2013 – TypeS
1760 0