2009-01-08 143 views
2

我想使用Windows工作流,并有一个模型,类似于在下面的链接的图像:
Workflow screen shot
Windows工作流 - IfElse分支

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

尽管在我的真实模型中这张图片看起来并不那么糟糕,但自定义活动是一个SequenceActivty,有很多节点,并且当它重复3次时,工作流看起来非常难看。

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

能否IfElse分支这样的合并?
我应该使用状态机的工作流程(还没有弄清楚)?

回答

1

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

1

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

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

1

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

我还没有试过这个,所以它可能不工作。

0

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

一概而论,我定义问题为:

有没有一种方法来定义一组,将在工作流程的几个地方执行的活动?
更进一步的要求是:

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

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

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