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,如需转载请自行联系原作者
相关文章
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
120 0
|
6月前
|
存储 缓存 运维
函数计算产品使用问题之如何将外部环境变量放到s.yaml文件中使用
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
运维 负载均衡 Serverless
函数计算产品使用问题之yaml如果写多个function,可不可以yaml在构建的时候能构建多个函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
PADS新建封装中焊盘部分修正(一)
在PADS新建封装中,需要修改焊盘参数。因为之前做板,有问题工厂都会帮忙修正,所以忽略了焊盘中阻焊层和助焊层。这里专门做一个修正。
388 0
PADS新建封装中焊盘部分修正(二)
按照同样的方法添加助焊层底层(Paste Mask Bottom),如下图所示:
260 0
UE DTDataTable 插件说明, 运行中操作CSV文件。
UE DTDataTable 插件说明, 运行中操作CSV文件。
295 0
一起谈.NET技术,WF4.0中如何实现XAML工作流的动态加载
  我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧。   1. 创建自定义的Activity using System;using System.Collections.
1125 0