我正在尝试使用Windows Workflow,并且其模型看起来类似于以下链接中的图像:
在每个发送活动(GetSomthing
,GetSomthingElse
,GetSomeMoreStuff
)之后,将调用相同的自定义活动(LogSomthingBadHappened
)。
虽然在我的真实模型中这张图片看起来可能不那么糟糕,但自定义活动是一个SequenceActivty,有相当多的节点,当它重复3次开始使工作流看起来非常难看。
< / p>
我想做这样的事情:
IfElse
分支可以像这样合并吗?
我应该使用状态机工作流程(还没有想出这些)吗?
答案 0 :(得分:1)
在工作流上使用FaultHandler并抛出处理程序将捕获的特定异常类型。不是最优雅的,但我认为它应该有效。
答案 1 :(得分:1)
在顺序工作流程中,所有步骤必须以特定顺序出现,执行路径仅由控制结构(IF,WHILE)调节。
以您描述的方式改变执行路径就像使用GOTO命令式代码中的陈述,我们知道这会导致不必要的复杂性。
如果您需要在工作流程的不同阶段执行的 SequenceActivity 中包含的活动完全相同,则可以将它们嵌入自定义活动中。这样就可以更容易地管理它们,因为它们包含在一个逻辑单元中。
在命令式代码中,这就像将重复代码的一部分重构为一个方法,然后在多个位置调用。
答案 2 :(得分:1)
可能有效的另一种方法是将 LogSomthingBadHappened 活动放入自定义工作流程并包含多次。需要注意的几件事情:子工作流程执行asynchronously,如果LogSomthingBadHappened活动需要主工作流程中的状态信息,则将其复制到子工作流程可能很难。
我没有试过这个,所以它甚至可能都不起作用。
答案 3 :(得分:0)
我认为gbanfill的答案指向了正确的方向。
为了概括,我将问题定义为:
有没有办法定义一组将在工作流程的多个位置执行的活动? 进一步的要求是:
也许这样做的方法是定义子工作流并构建一个自定义活动,该实例将实例化子工作流并等待它继续之前完成。
此自定义活动应至少包含两个参数:子工作流ID和输入参数。