Workflow Windows工作流-IfElse分支

Workflow Windows工作流-IfElse分支,workflow,workflow-foundation,Workflow,Workflow Foundation,我正在尝试使用Windows工作流,并且有一个与下面链接中的图像相似的模型: 在每个发送活动(GetSomthing,GetSomthingElse,getsometorestuff)之后,将调用相同的自定义活动(logsomthingbad) 虽然在我的真实模型中,这张图片中的自定义活动可能没有那么糟糕,但它是一个SequenceActivty,有很多节点,当它重复3次时,开始使工作流看起来非常难看。 我想这样做: IfElse分支可以这样合并吗? 我是否应该改为使用状态机工作流(尚未解决

我正在尝试使用Windows工作流,并且有一个与下面链接中的图像相似的模型:

在每个发送活动(
GetSomthing
GetSomthingElse
getsometorestuff
)之后,将调用相同的自定义活动(
logsomthingbad

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

我想这样做:

IfElse
分支可以这样合并吗?

我是否应该改为使用状态机工作流(尚未解决这些问题)?

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

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


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

另一种可行的方法是将您的日志SomthingBadOccessed活动放入自定义工作流中,并多次包含该活动。需要注意的几件事:执行子工作流时,如果LogSomThingBadOccessed活动需要来自主工作流的状态信息,那么将其复制到子工作流可能会很困难


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

我认为邦菲尔的答案指向了正确的方向

概括而言,我将问题定义为:

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

  • 活动组应仅在XAML中定义,即不使用代码
  • 当然,该组的输入类型是固定的,但实际值应取决于调用(如调用函数)
  • 也许这样做的方法是定义子工作流并构建自定义活动,该活动将实例化子工作流并等待其完成后再继续

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