【问题标题】:Should I use a state machine or a sequence workflow in WF?我应该在 WF 中使用状态机还是序列工作流?
【发布时间】:2010-09-09 12:23:30
【问题描述】:

我有一个可重复的业务流程,作为我的配置管理职责的一部分,我每周都会执行该流程。流程没有改变:我将更改详细信息下载到 Excel,打开电子表格并基于宏复制详细信息,从议程模板创建 Word 文档,使用 Excel 数据更新议程,从 Word 文档创建 PDF,以及通过电子邮件发送给他们。

这个过程很容易在序列工作流中表示,这就是我到目前为止的方式,使用 COM 自动化来自动处理 Excel 和 Word 片段。齿轮的扳手是在“创建议程”和“发送它”之间有一个人为的步骤,在其中我审查更改细节并制定有关它们的问题,这些问题被添加到议程中。我目前有一个暂停活动来暂停工作流程,同时我手动执行这部分流程。

我的问题是,我应该重写我的工作流程,使其成为一个状态机,以遵循业务流程中人机交互的最佳实践,还是暂停活动是一个合理的解决方案?

【问题讨论】:

    标签: .net-3.5 com interop workflow business-process-management


    【解决方案1】:

    不,我认为您不必为此工作流程使用状态机。但是,我建议更改暂停活动,因为:

    SuspendActivity 活动 暂时停止执行 当前的工作流程。通常,您使用 SuspendActivity 活动 反映错误条件 需要引起注意 行政人员。

    当工作流 实例被挂起,错误是 记录。您可以指定一条消息 伴随错误的字符串以提供帮助 管理员诊断问题 出现 SuspendActivity 错误 财产。暂停的工作流程 实例仍然可以接收消息 排队等待工作流 重新启动。所有的状态 工作流实例的信息 保存并恢复时 实例被恢复(使用 Resume)。

    来源:MSDN

    在工作流(序列或状态机)中添加人工任务的典型方法是定义外部数据交换接口并使用 HandleExternalEvent 活动(可能还有 CallExternalMethod 活动)。更多详情请看以下文章:

    【讨论】:

      【解决方案2】:

      更新:Panos 对暂停活动提出了很好的观点。我同意它在工作流自动机中有不同的用途。

      如果您觉得自己更担心各种状态之间的工作流转换,那么状态机工作流是理想的选择。否则,顺序就好了。

      您应该尝试解决的主要问题是工作流不应该在等待人工交互时占用线程(线程敏捷性)。如果工作流在此期间处于空闲状态并持续存在(例如使用 SqlWorkflowPersistenceService),则应该没有问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        相关资源
        最近更新 更多