工作流程WF 4.5在异常后重新运行

时间:2014-05-22 17:59:26

标签: workflow-foundation-4

1)我有一个UI页面,它调用一个Workflow服务(比如通过一个名为Invoke的按钮),它有5个步骤。步骤1,3,5实现为代码活动,而步骤2和4实现为活动(即xaml文件)和每个活动都有内部步骤,这些步骤再次作为代码活动实现。现在用户在UI中输入数据并按下调用服务的按钮,但服务可能会在任何步骤中抛出Business异常如果发生任何此类错误,将向用户提供一个带有重新运行选项的链接,单击该选项将使用相同的wf实例ID加载WF服务实例,但我想要的是现在WF服务应该从抛出错误的步骤开始处理?

可能这可以通过使用书签来实现,但我只知道静态使用书签。有没有什么方法可以在工作流定义中的某个特定实例的某个地方动态插入一些书签?如果没有,那么我该如何实现以上功能?

我正在为上述场景寻找一些通用的可维护解决方案。

谢谢和问候,

的Sandip

1 个答案:

答案 0 :(得分:1)

一种方法是在您期望业务异常的每个Activity之前放置一个Persist活动(来自Toolbox | Runtime | Persist)。 现在,当您加载工作流程时,它将加载到上一个Persist活动,然后继续下一个活动。

您只需要确保在商业异常之后不要继续工作流程。

我喜欢使用的另一种方法是将回调PersistableIdleAction附加到工作流程。然后在工作流程中,我有一个活动,即“准备持久性”#34;然后是延迟(触发持续),然后是#34;从持久性返回"活动。 "从坚持中回归"是在workflow.Load之后运行的第一个活动 优点是我可以清除"从持久性返回"或读取一个标志来卸载工作流程,我可以在PersistableIdleAction回调中做额外的工作(比如告知UI发生了错误)