【问题标题】:Windows Workflow - IfElse branchWindows 工作流 - IfElse 分支
【发布时间】:2009-01-08 20:37:37
【问题描述】:

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

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

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

我想做这样的事情:

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

【问题讨论】:

    标签: workflow workflow-foundation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-26
            • 2013-07-10
            • 1970-01-01
            • 2012-03-05
            • 2011-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多