2

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

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

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

4

2 回答 2

2

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

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

当工作流实例被挂起时,会记录一个错误。您可以指定伴随错误的消息字符串,以帮助管理员使用 SuspendActivity Error 属性诊断问题。暂停的工作流实例仍然可以接收排队的消息,直到重新启动工作流。工作流实例的所有状态信息都会保存并在实例恢复时恢复(使用 Resume)。

资料来源:MSDN

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

于 2008-09-16T14:29:44.890 回答
2

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

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

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

于 2008-09-16T14:31:42.330 回答