0

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

我 95% 的活动是在二进制活动库中定义的。我在视觉工作室组装了我的主要活动。

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

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

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

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

4

2 回答 2

1

如果将活动编译到程序集中,则无法替换工作流本身中的活动。不过,您可以使用几个选项:

  • 使用 ActivityXamlServices.Load() 使用动态加载的活动,因为 XAML 只是 XML,所以在加载之前更改 XAML。
  • 在您的工作流中使用包装器活动,该活动仅在运行时加载实际活动并使用 WorkflowInvoker 执行它。
  • 通过使用活动和扩展将意图与实现分开。该活动仅获取所有输入和扩展并在其上调用函数。在运行时,您可以根据需要改变工作流扩展的实际实现。
于 2011-05-26T18:04:24.683 回答
0

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

于 2011-05-27T14:15:50.797 回答