【问题标题】:How to pass non string arguments to inner activities?如何将非字符串参数传递给内部活动?
【发布时间】:2015-10-27 07:27:29
【问题描述】:

我们希望制作由最终用户设计的工作流程。 我能够在数据库中存储一些工作流定义,重新加载它们并使它们在服务中工作。

为了让用户能够创建工作流,我们需要创建自己的活动。我想将非简单参数(即列表、列表)传递给内部活动。我阅读了许多关于传递参数的文章,但找不到适合我需要的文章,所有文章都显示了如何仅将参数传递给主工作流活动(在 WorkflowInvoker.Invoke 方法中使用 Dictionary)。

我们有一个带有参数 Arg1 (List) 的 CodeActivity Activity1 的库。 最终用户将使用这个库来创建一个新的 Activity(例如一个序列)。

Activity1 act1 = new Activity1();
act1.Arg1 = new InArgument<List<string>>(new List<string> { "a", "b", "c" });

Sequence seq = new Sequence
{
    Activities = { act1 }; 
}

// Now serialize end user workflow
Stream newStream = ...;
XamlWriter l_xamlWriter = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(newStream, new XamlSchemaContext()));

XamlServices.Save(l_xamlWriter, seq);

如何使用列表初始化参数? (以前的代码失败,出现'Literal':Literal 只支持值类型和不可变类型 System.String)。

有没有办法将这些参数传递给内部活动,或者以编程方式将这些参数转换为 VisualBasicValue 或 CSharpValue 以允许序列化工作流定义?我们不想在每次运行工作流时设置这些参数,我们希望将值存储在定义中。

任何帮助将不胜感激:-)

【问题讨论】:

    标签: .net workflow-foundation-4


    【解决方案1】:

    我发现的唯一方法是将序列包装到 DynamicActivity 并将参数传递给 WorkflowApplication(或 WorkflowInvoker):

    Activity1 act1 = new Activity1();
    act1.Arg1 = new InArgument<Collection<string>>(new VisualBasicValue<Collection<string>>("MyVals"));
    
    Sequence seq = new Sequence
    {
        Activities = { act1 }; 
    }
    
    DynamicActivity da = new DynamicActivity()
    {
        Name = "test",
        Implementation = () => seq,
        Properties = 
                 {
                     new DynamicActivityProperty()
                     {
                         Name = "MyVals",
                         Type = typeof(InArgument<Collection<string>>),
                         Value = null
                     },
                 }
    };
    
    
    
    WorkflowInvoker.Invoke(da, new Dictionary<string, object> { { "MyVals", new Collection<string>{ "a", "b", "c" } } });
    

    这么多代码只是为了传递一个列表......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-30
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多