2

我正在尝试使用 Windows Workflow 并拥有一个与以下链接中的图像相似的模型:
工作流屏幕截图

在每个发送活动 ( GetSomthing, GetSomthingElse, GetSomeMoreStuff) 之后调用相同的自定义活动 ( LogSomthingBadHappened)。

虽然在我的真实模型中的这张图片中它可能看起来并不那么糟糕,但自定义活动是一个 SequenceActivty,有很多节点,当它重复 3 次时开始使工作流看起来很丑陋。

我想做这样的事情:
编辑的工作流屏幕截图

分支可以IfElse这样合并吗?
我应该改用状态机工作流程吗(还没有弄清楚这些)?

4

4 回答 4

1

在工作流上使用 FaultHandler 并引发处理程序将捕获的特定异常类型。不是最优雅的,但我认为它应该工作。

于 2009-01-08T21:48:45.367 回答
1

在顺序工作流中,所有步骤都必须以特定顺序出现,并且执行路径由控制结构(IF、WHILE)专门调节。
以您描述的方式更改执行路径就像在命令式代码中使用 GOTO 语句一样,我们知道这会导致不必要的复杂性。

如果您需要在工作流的不同阶段执行的SequenceActivity中包含的活动完全相同,您可以将它们嵌入到自定义活动中。这种方式更容易管理它们,因为它们包含在单个逻辑单元中。
在命令式代码中,这就像将一部分重复代码重构为一个方法,然后在多个地方调用该方法。

于 2009-01-08T22:18:25.480 回答
1

另一种可能可行的方法是将您的LogSomthingBadHappened活动放入自定义工作流程中并多次包含该活动。需要注意的几点: 子工作流是异步执行的,如果 LogSomthingBadHappened 活动需要来自主工作流的状态信息,将其复制到子工作流可能会很困难。

我没有尝试过这个,所以它甚至可能不起作用。

于 2009-01-08T23:03:17.557 回答
0

我认为 gbanfill 的答案指向了正确的方向。

概括地说,我将问题定义为:

有没有办法定义一组将在工作流的多个位置执行的活动?
进一步的要求是:

  1. 活动组应仅在 XAML 中定义,即没有代码。
  2. 当然,该组的输入类型是固定的,但实际值应取决于调用(如调用函数)。

也许这样做的方法是定义子工作流并构建一个自定义活动,该活动将实例化子工作流并等待它完成后再继续。

此自定义活动应至少具有两个参数:子工作流 id 和输入参数。

于 2009-02-28T09:19:47.697 回答