流程/对象—异常类型

在流程运行期间,会因各种原因而出现异常。相关的原因示例包括:

  • 流程本身存在错误(例如,在计算中输入了无效的表达式)
  • 无法匹配某个元素(例如,尝试“按下”了不存在的按钮)
  • 数据有误(例如,不知道该如何处理的帐户类型)

通常,当出现异常时,流程会停止运行,而且其在控制室中的状态会显示为“已终止”。有时,您会希望流程在出现异常时不要停止运行。在某些情况下,我们可以对异常加以处理,然后继续运行流程。例如,如果客户系统指出某个特定案例因处于锁定状态而无法处理,那么我们可以捕获所出现的异常,并将案例标记为稍后处理,这样流程就能接着运行并继续处理后续案例。

处理的层级结构

关于异常处理,最重要的一个概念是处理的层级特性。当出现异常时,会发生如下情况:

  • 如果当前环节位于某个中,而且该块包含恢复环节,那么请在这个恢复环节中实施传输控制
  • 否则,如果当前页面包含恢复环节(不在某个块中),那么请在这个恢复环节中实施传输控制
  • 如果该页面被其他对象调用了(例如,以页面引用、操作或子流程调用的形式),那就意味着是最初进行调用的环节出现了异常,应该再次运用上述规则。
  • 最后,如果上述所有步骤都无法消除这个异常,那么这个异常必定是原始父流程的主页面(不含恢复环节)上的某个环节抛出的。在这种情况下,流程本身会以异常状态停止运行,而且流程状态将被标记为“已终止”。

如果在恢复期间出现了新的异常,那么上述流程会通过层级结构中的上一个层级继续执行。

异常环节

异常环节用于在流程的整个执行过程中随时抛出异常。通过这种方式故意抛出的异常在行为表现方面与在处理期间可能会出现的所有常规异常一致。

异常环节具有以下相关详细信息:

  • 异常类型—由用户定义的用于描述异常类别的标签。用户可以自行创建类别,如“数据异常”和“超时异常”。Blue Prism 产品会自动整理并记住用户在所有流程和业务对象中创建的所有异常类型。这意味着,相同的类型能以一致的方式在所有流程/对象中进行全局复用。
  • 异常详细信息—含有异常的所有相关详细信息。
  • “保留当前异常的类型和详细信息”—此选项可与恢复环节一起使用,以保留异常的详细信息,从而确保即使在清除进程后,会话日志也能保留错误的准确说明。如果启用此选项,“异常类型”和“异常详细信息”字段将被禁用,因为类型和详细信息将从原始异常中保留下来。这有助于对异常进行故障排除并确定错误的来源。

恢复环节

恢复环节提供了一种从异常中恢复的方式。如果某个页面上出现了异常,而该页面包含恢复环节,那么流程会继续推进。在推进到恢复环节后,流程会进入并保持恢复模式,直至遇到继续环节或出现更进一步的异常。如果在仍处于恢复模式的情况下出现了另一个异常,那么该异常不会被同一恢复环节捕获,而是会“上升”到更高的一个层级。

继续环节

继续环节用于发出信号,以指明恢复已完成且可继续进行常规处理。通常,恢复环节后面会跟有多个决策/选择环节,以引导流程执行不同类型的清理(取决于异常所属的类型)。这些环节随后可以重新链接到主执行流(必须通过继续环节来实现)。如果没有继续环节,那么进一步出现的所有异常都无法由同一恢复环节来处理,但这些异常会上升到更高的一个层级,就像从未进行过异常处理一样。在继续环节完成之后,将会再次进行常规异常处理。

块就是一个矩形区域,它可以将完全落在其区域内的所有环节归为一组。块可以包含自有恢复环节,以用于处理该块中出现的异常。

块看上去就是一个内部区域带有阴影的矩形。块还会在左上角的标签中显示自己的名称。这是块的属性表单中所含的唯一一个字段。

在从工具栏中选择块之后,可以拖动鼠标将块调整成所需的大小,以创建新的块。您可以通过拖动四个边角中的一个,来调整块的大小。如果有任何重叠块将会显示在流程验证中,则切勿将块重叠。

异常函数

异常编辑器函数树视图中额外包含一个名为“异常”的分支,该分支中共有三个异常函数,即:ExceptionText()、ExceptionDetail() 和 ExceptionStage()。当流程处于恢复模式时,可以在计算或决策中使用这些函数。

此外,树视图中还存在第三个项“类型”,该项可以扩展,且包含之前使用过的所有异常类型。通过拖动树视图中的这些项,可以将字符串常量(如“UserNameTooLong”)粘贴到表达式视图中。

异常消息对话框

如果异常已在恢复环节中得到处理,就不会出现异常消息对话框(通常会在调试期间弹出)。而流程则会跳转至恢复环节继续执行。此外,原先会以对话框形式弹出的消息现会显示在 Process Studio 状态栏的上方。

日志历史记录查看器

日志历史记录查看器可通过点击状态栏右侧的按钮来访问。点击该按钮后会弹出一个文本框,其中会显示日志输出中最新的十行内容。如果您需要确定出现异常的原因,或是需要在子页面抛出异常时确定异常具体源自何处,那么日志历史记录将会非常有用。