是否可以在文件中指定工作流,而不是使用Visual Studio中提供的设计器

时间:2016-05-19 05:50:21

标签: windows workflow workflow-foundation-4 workflow-foundation

在Windows工作流基础中, 是否可以从外部文件加载工作流程?目的是创建一个通用的工作流控制器,它从文件中获取状态机工作流并加载它。如果我去使用VS中提供的设计器,工作流程图将变得固定,并且只能用于特定用例,但是,我需要制作一个通用工具。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用var searchString = '2016'; vm.usersList = $filter('filter')(UserResolve, function(value, index, array){ if(value.name == searchString || value.rut == searchString) { return true; } }); XamlActivityServices类型将XAML工作流保存到文件或从文件加载XAML工作流。您可以在代码中动态构建工作流,然后使用该服务将其序列化为XML以便稍后使用。

如果您希望允许用户创建和编辑工作流程,您可以根据需要直接在应用程序中重新托管设计师。

  

将工作流程保存到文件

以下是将工作流程保存到文件的快速示例:

ActivityBuilder

上面应该生成如下所示的XML文件:

var activityBuilder = new ActivityBuilder();
activityBuilder.Name = "HelloWorldApp";
activityBuilder.Properties.Add(new DynamicActivityProperty { Name = "UserName", Type = typeof(InArgument<string>) });
activityBuilder.Implementation = new Sequence
{
    Activities =
    {
        new WriteLine
        {
            Text = new CSharpValue<string>("\"Hello, \" + UserName + \", how are you?\"")
        }
    }
};

using (var streamWriter = File.CreateText(@"C:\Temp\MyWorkflow.xaml"))
{
    using (var xamlWriter = new XamlXmlWriter(streamWriter, new XamlSchemaContext()))
    {
        using (var builderWriter = ActivityXamlServices.CreateBuilderWriter(xamlWriter))
        {
            XamlServices.Save(builderWriter, activityBuilder);
        }
    }
}
  

从文件加载XAML工作流程

以下代码段显示从文件加载工作流程,然后运行水合工作流程。

<?xml version="1.0" encoding="utf-8"?>
<Activity x:Class="HelloWorld" 
          xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" 
          xmlns:mca="clr-namespace:Microsoft.CSharp.Activities;assembly=System.Activities" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <x:Members>
    <x:Property Name="UserName" Type="InArgument(x:String)" />
  </x:Members>
  <Sequence>
    <WriteLine>
      <InArgument x:TypeArguments="x:String">
        <mca:CSharpValue x:TypeArguments="x:String">
          "Hello, " + UserName + ", how are you?"
        </mca:CSharpValue>
      </InArgument>
    </WriteLine>
  </Sequence>
</Activity>