Windows Workflow - IfElse分支

时间:2009-01-08 20:37:38

标签: workflow workflow-foundation

我正在尝试使用Windows Workflow,并且其模型看起来类似于以下链接中的图像:
Workflow screen shot

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

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

我想做这样的事情:
Edited Workflow screen shot

IfElse分支可以像这样合并吗? 我应该使用状态机工作流程(还没有想出这些)吗?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

可能有效的另一种方法是将 LogSomthingBadHappened 活动放入自定义工作流程并包含多次。需要注意的几件事情:子工作流程执行asynchronously,如果LogSomthingBadHappened活动需要主工作流程中的状态信息,则将其复制到子工作流程可能很难。

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

答案 3 :(得分:0)

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

为了概括,我将问题定义为:

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

  1. 活动组应仅在XAML中定义,即无代码。
  2. 此组的输入类型当然是固定的,但实际值应取决于调用(如调用函数)。
  3. 也许这样做的方法是定义子工作流并构建一个自定义活动,该实例将实例化子工作流并等待它继续之前完成。

    此自定义活动应至少包含两个参数:子工作流ID和输入参数。