使用错误事件处理错误

设计流程或服务时,请提供逻辑以从运行时应用程序中可能生成的错误中恢复。

开发应用程序时,将错误处理构建到流程和服务中以执行以下操作:
  • 检测错误。
  • 指定如何在运行时环境中抛出和捕获错误。
  • 以可预测方式进行恢复。
例如,如果流程涉及填写订单,那么在流程的一个实例期间可能会出现项目库存不足,这会导致错误。 您构建到流程中的错误处理可以创建通知以补充库存不足的项目。
有三种类型的错误事件:
  • 流程和服务中抛出错误的错误结束事件。 您可以为错误结束事件抛出的错误指定错误代码和错误数据。
  • 流程和服务中捕获错误的错误中间事件
  • 流程事件子流程中捕获错误的错误开始事件

要使用错误中间事件捕获特定错误,请从之前定义的错误列表中选择一个错误代码,然后将错误数据映射到变量。 错误中间事件是边界事件,意思是这些事件与活动的边界相连。 只能在正在运行活动时才会触发所有边界事件,这样会中断活动。 从流程或服务图中,可以使用附加到活动边界的错误中间事件来捕获链接流程,子流程或服务中的特定错误和错误数据。

另一种捕获错误的方式是使用服务中的错误中间事件,此类事件可以捕获所有错误。 在构建服务时,可以将错误中间事件连接到步骤的边界,以捕获该步骤的所有错误,并可使用错误中间事件作为服务的一部分,来捕获所有该服务的步骤引起的、在步骤边界处未得到错误中间事件处理的错误。

在流程中,还可使用错误事件子流程来捕获错误。 在此子流程中,可使用错误开始事件,此事件会在触发开始事件后捕获错误。

但是,您决定捕获错误,并在图中事件属性下的常规属性选项卡上指定事件的错误行为:
  • 捕获所有错误或特定错误。 要捕获特定错误,可以选择错误代码和/或映射错误数据,如以下几点中所述。
  • 从链接流程、子流程或服务的所有抛出错误的列表中选择错误代码,从而对捕获的错误进行过滤。
  • 选择先前在变量选项卡上定义的错误映射变量,从而将错误数据映射到变量。 如果错误代码已发生更改,请确保再次选择该变量以使其得到正确的映射。
    注: 无法将错误数据映射到列表类型的变量。 如果要将具有序列结构的信息作为错误数据传递,请创建一个包含列表类型参数的业务对象,然后将该业务对象用作变量的类型。

如果定义了多个错误事件来捕获链接流程、子流程或服务中抛出的错误,那么捕获事件由优先顺序规则(按这些规则在错误事件组件表中的列出顺序)确定。

在运行时环境中按以下顺序捕获错误:
  1. 边界事件会捕获连接的活动导致的错误,如下表中所述。
  2. 如果不存在处理错误的错误边界事件,并且有子流程位于流程或服务中未连接的中间错误事件中,那么将在错误事件子流程中捕获错误,如下表中所述。
  3. 如果事件子流程、链接流程或服务中没有处理错误的错误事件子流程,错误将传播到下一个级别。
表 1. 错误事件组件
指定 捕获的错误

错误代码和错误数据

仅限具有相同代码和数据类型的错误

错误代码

具有相同代码的错误,除非按之前规则中指定的,某个事件已捕获这些错误

错误数据

具有相同数据类型的错误,除非按之前规则中指定的,某个事件已捕获这些错误

既非代码也非错误数据

错误属性上的捕获所有错误选项

按之前规则中指定的,尚未由某个事件捕获的所有错误

注: 在同一上下文中定义且具有相同约束的多个事件会导致非确定性运行时行为。

在映射中指定变量名称可控制按错误数据类型过滤。 如果变量类型与属性选项卡上显示的错误数据类型不匹配,那么变量类型将决定行为。