我有一个可重复的业务流程,我每周都会执行,作为配置管理职责的一部分。此过程不会更改:我将更改详细信息下载到Excel中,打开电子表格并根据宏复制详细信息,从议程模板创建Word文档,使用Excel数据更新议程,从Word文档创建PDF,以及通过电子邮件发送出去。
这个过程非常容易在序列工作流程中表示,到目前为止我是这样做的,COM自动化可以自动处理Excel和Word片段。齿轮中的扳手是“创建议程”和“发送它”之间的人为步骤,其中我查看更改细节并制定有关它们的问题,这些问题已添加到议程中。我现在有一个Suspend活动来暂停工作流程,同时我手动完成这一过程。
我的问题是,我是否应该重写我的工作流程,使其成为一个状态机,以便在业务流程中遵循人工交互的最佳实践,或者Suspend活动是否是合理的解决方案?
答案 0 :(得分:2)
不,我认为您不必使用状态机来完成此工作流程。但是,我建议更改Suspend活动,因为:
SuspendActivity活动 暂时停止执行 目前的工作流通常,您使用 SuspendActivity活动 反映出错误的情况 需要注意的是 管理员。
当工作流程 实例被暂停,错误是 登录。您可以指定消息 字符串伴随错误来帮助 管理员诊断问题 与SuspendActivity错误 属性。暂停的工作流程 实例仍然可以接收消息 排队等到工作流程 重新启动。所有的州 工作流实例的信息 保存并在恢复时恢复 实例恢复(使用Resume)。
来源:MSDN
在工作流(序列或状态机)中添加人工任务的典型方法是定义外部数据交换接口并使用HandleExternalEvent活动(可能还有CallExternalMethod活动)。有关详细信息,请参阅以下文章:
答案 1 :(得分:2)
更新:Panos对暂停活动提出了一个很好的观点。我同意它在工作流自动机中有不同的用途。
如果您觉得您更担心各种状态之间的工作流转换,那么状态机工作流程是理想的。否则,序列就好了。
您应该尝试解决的主要问题是工作流不应该在等待人工交互(线程敏捷性)时占用线程。如果工作流在此期间闲置并保持不变(例如使用SqlWorkflowPersistenceService),则应该不会出现问题。