覆盖工作流程中的活动?

时间:2011-05-26 17:49:38

标签: workflow-foundation-4 workflow-activity

我有一个复杂的工作流程,用于向客户发送营销电子邮件。有20个活动决定谁会收到什么样的电子邮件。

我的活动中有95%是在二元活动库中定义的。我在视觉工作室组织了我的主要活动。

对于某些类型的客户,我想让(例如)步骤25a中的活动与我构建它时的定义不同。我们可以从托管在数据库中的xaml加载活动。

一种选择是为这些客户克隆整个工作流程,但这是很多代码重复。

是否有可能覆盖运行时用于定位和编组活动的任何内容,以便如果我的客户是左撇子,则工作流中的一个活动被替换而不是我在IDE中定义的活动?

我正在考虑如何在mvc中覆盖ViewEngine以动态加载ipad视图或其他任何东西。装载活动有类似的东西吗?

2 个答案:

答案 0 :(得分:1)

如果编译到程序集中,则无法替换工作流本身中的活动。您可以使用以下几种方法:

  • 使用ActivityXamlServices.Load()使用动态加载的活动,而XAML只是XML,在加入之前更改XAML。
  • 在工作流中使用包装器活动,该活动仅在运行时加载实际活动,并使用WorkflowInvoker执行它。
  • 使用活动和扩展程序将意图与实现分开。活动仅捕获所有输入和扩展,并在其上调用函数。在运行时,您可以根据需要改变工作流扩展的实际实现。

答案 1 :(得分:0)

好消息......我已经在Microsoft.Activities中构建了您需要的内容。有关详细信息,请参阅WF4 How To Invoke a Child Workflow as XAML,就在昨天,我添加了对跟踪子工作流程的支持,请参阅Tracking Child Workflow with InvokeWorkflow