处理服务中的错误

对于服务,您可以使用错误中间事件来捕获错误,使用错误结束事件来抛出错误。

表 1. 错误事件在服务中的使用
服务事件 描述
连接到步骤边界的错误中间事件 icon (错误边界事件) 从步骤捕获错误。
错误中间事件 icon 作为服务流的一部分 捕获服务流步骤所引发的、未在步骤边界处由错误中间事件处理的所有错误。 此事件只能具有出站链接。
错误结束事件 icon 抛出错误并结束此服务的处理。 例如,如果需要特定 coach 结果来结束人员服务,那么可以使用错误结束事件。

要确定是否在服务中使用错误事件,请考虑以下几点:

  • 必须将错误中间事件连接到服务中的步骤。 所连接的错误事件称为错误边界事件。
  • 在服务流中包含错误中间事件,使其可以在服务中充当全局错误处理程序。
  • 确定是否可以立即处理错误,正常的处理是否可以继续,或者,是否可以在另一级别抛出另一错误。 然后自底向上实现错误处理。
  • 使用错误结束事件抛出特定错误。 您可以为错误指定错误代码和错误数据。
  • 考虑指定错误数据来捕获特定错误。 例如,您可以基于错误代码过滤捕获到的错误类型,并在捕获错误后将错误代码映射到变量。 捕获到所有错误后,或如果仅指定了错误代码,错误数据将捕获到 tw.system.error 变量中的 XMLElement

在服务流中使用错误中间事件

在服务流中使用错误中间事件可为错误处理提供多个选项,但是必须小心操作,以防止发生意外行为。

服务流中的错误中间事件可以在服务中充当全局错误处理程序。 它可以捕获尚未经过边界错误事件处理的错误。 错误中间事件无法捕获特定错误;它是一个 catchAll 错误事件。 它主要用于处理可以在特定服务流内处理的错误。 建议您不要重新连线到正常流中。 而是在处理错误之后,通过结束事件结束逻辑。 处理错误之后,您需要重新进入服务,并使用纠正过的数据运行正常流。

要处理共享业务对象的保存服务中的验证错误,可捕获特定错误列表中提供的错误 BPMBOSaveFailedError。 此错误仅在自动(例如 Coach)或通过启用保存执行上下文选项显式保存执行上下文的节点上可用。 有关更多信息,请参阅 保存共享业务对象的服务

要在服务中处理错误并重新连线到同一服务中的正常流,请使用一个或多个带有特定错误和 catchAll 选项的错误边界事件。

此截屏显示上述段落中描述的服务图。

注: 服务流中的错误中间事件还会捕获通过该服务流的错误结束事件抛出的错误。
重要信息: 如果事件后的后续活动抛出运行时或已建模的错误,那么错误中间事件可能会导致无限循环。 服务引擎可防止这些循环。 在某些情况下,通过中间错误结束事件对循环进行建模十分有用。 要允许循环进行,请将以下条目添加到 100Custom.xml 文件:
<server>   <!-- insert if not already present -->
       <execution-context> <!-- insert if not already present -->
            <prevent-intermediate-error-loop  merge="replace">false</prevent-intermediate-error-loop>
        </execution-context> <!-- insert if not already present -->  
</server> <!-- insert if not already present -->

更改此属性将在全局范围内禁止服务引擎检测错误循环。 仅当所有模型均未出现无限错误循环时才更改此属性。