在执行之前确定运行时的工作流参数

时间:2012-02-27 13:49:55

标签: workflow-foundation-4

有没有办法在执行工作流之前确定工作流的参数?

我开发了一个重新托管设计器的应用程序,因此最终用户可以开发自己的工作流程。在此过程中,用户可以将自己的参数添加到工作流程中。

我正在寻找一种在执行之前检查工作流的方法,并尝试解决这些参数。我查看过WorkflowInspectionServices课程,但我似乎无法从中询问特定类型的项目。

理想情况下,我想使用以下内容从数据库中存储的元数据构建工作流程:

var workflow = ActivityXamlServices.Load(new XamlReader(new StringReader(xamlText)));
var metadata = SomeUnknownMagicClass.Inspect(workflow);

var inputs = new Dictionary<string, object>()
forreach(var argument in metadata.Arguments)
{
    inputs.Add(argument.Name, MagicArgumentResolver.Resolve(argument.Name));
}

WorflowInvoker.Invoke(workflow, inputs);

我可能会遗漏一些东西,但WorkflowInspectionServices似乎没有这样做。它有CacheMetadata方法,当你阅读MSDN文档时听起来很有希望,但基本上没有任何内容。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我想当你谈到存储在数据库中的元数据时,你指的是设计师的XAML。

您可以将此XAML加载为 DynamicActivity ,如下所示:

using (var reader = new StringReader(xamlString))
{
    var dynActivity = 
        ActivityXamlServices.Load(reader) as DynamicActivity;
}

然后您可以通过 DynamicActivity.Properties 访问其所有参数。