代码之家  ›  专栏  ›  技术社区  ›  Robert S.

我应该在WF中使用状态机还是序列工作流?

  •  2
  • Robert S.  · 技术社区  · 16 年前

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

    这个过程很容易在一个序列工作流中表示出来,这就是到目前为止我所采用的方法,COM自动化可以自动处理Excel和单词片段。齿轮中的扳手是在“创建议程”和“发送议程”之间有一个人类的步骤,在这个步骤中,我审查了变更的细节,并制定了有关它们的问题,这些问题被添加到了议程中。我目前有一个挂起活动来挂起工作流,而我手动执行这一过程。

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Panos    16 年前

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

    暂停活动 临时停止执行 当前工作流。通常,您使用 SuspendActivity活动到 反映一个错误条件 需要一个 管理员。

    工作流时 实例已挂起,错误为 记录的。可以指定消息 用于帮助的错误附带字符串 管理员诊断问题 有SuspendActivity错误 财产。挂起的工作流 实例仍然可以接收消息 排队等待工作流 重新启动。所有国家 工作流实例的信息 保存并在 实例被恢复(使用恢复)。

    来源: MSDN

    在工作流(序列或状态机)中添加人工任务的典型方法是定义外部数据交换接口并使用handleExternalEvent活动(以及可能的calledExternalMethod活动)。有关详细信息,请参阅以下文章:

        2
  •  2
  •   Gulzar Nazim    16 年前

    更新:关于挂起活动,Panos是一个很好的观点。我同意它在工作流自动化中有不同的用途。

    如果您觉得您更担心工作流在不同状态之间的转换,那么状态机工作流是理想的。否则,顺序就可以了。

    您应该尝试解决的主要问题是,在等待人工交互(线程敏捷性)时,工作流不应该绑定线程。如果工作流在这段时间内处于空闲和持久状态(如使用 SqlWorkflowPersistenceService )应该不是问题。