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

时间:2008-09-16 14:08:50

标签: .net-3.5 com interop workflow bpm

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

这个过程非常容易在序列工作流程中表示,到目前为止我是这样做的,COM自动化可以自动处理Excel和Word片段。齿轮中的扳手是“创建议程”和“发送它”之间的人为步骤,其中我查看更改细节并制定有关它们的问题,这些问题已添加到议程中。我现在有一个Suspend活动来暂停工作流程,同时我手动完成这一过程。

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

2 个答案:

答案 0 :(得分:2)

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

  

SuspendActivity活动   暂时停止执行   目前的工作流通常,您使用   SuspendActivity活动   反映出错误的情况   需要注意的是   管理员。

     

当工作流程   实例被暂停,错误是   登录。您可以指定消息   字符串伴随错误来帮助   管理员诊断问题   与SuspendActivity错误   属性。暂停的工作流程   实例仍然可以接收消息   排队等到工作流程   重新启动。所有的州   工作流实例的信息   保存并在恢复时恢复   实例恢复(使用Resume)。

     

来源:MSDN

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

答案 1 :(得分:2)

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

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

您应该尝试解决的主要问题是工作流不应该在等待人工交互(线程敏捷性)时占用线程。如果工作流在此期间闲置并保持不变(例如使用SqlWorkflowPersistenceService),则应该不会出现问题。