处理异常
异常是阻止您的应用程序流程正常运行的异常情况。例如,当您的应用程序从外部系统获取数据时,该系统正在停机。
您应该仅在特殊情况下引发异常,而不是为了控制应用程序的逻辑。
当出现异常时,应用程序流程的执行将被中断。
在 OutSystems 中,您可以使用异常处理程序操作流元素处理应用程序中的异常。要在您的逻辑中引发异常,请使用 Raise Exception 操作流元素。
异常类型
有几种类型的异常,它们在引发方式以及在应用程序中如何处理方面有所不同。异常遵循确定它们如何处理的层次结构:
在这个层次结构中,一个“父节点”异常可以处理任何“子节点”异常类型。例如,如果安全异常处理程序出现在无效登录异常处理程序之前的流程中,则它会处理无效登录异常。
在 OutSystems 中,您有以下类型的异常:
所有例外
All Exceptions 是最一般的异常,包括所有剩余的。这意味着如果没有更具体的异常处理程序来处理它,则所有异常的异常处理程序都会处理任何类型的异常。
如果您希望在该特定范围内以相同方式处理所有异常,则可以使用 All Exceptions。
用户异常
您可以创建自己的用户异常并在特定条件下在您的逻辑中引发它们。例如,您可以创建一个名为 UnavailableExternalSystem 的用户异常,并在您检测到用于在应用程序中获取数据的外部系统出现停机时在您的逻辑中引发它。
您创建的用户异常是通用用户异常的“子节点”。这意味着如果通用用户异常处理程序出现在流中用于您的特定用户异常的异常处理程序之前,它将处理您自己的任何用户异常。
数据库异常
当存在与数据库管理系统相关的错误时,OutSystems 会引发数据库异常,例如:
- 由于创建已存在的记录或唯一索引中的重复信息而违反数据库约束
- 使用不正确的数据类型在某些实体中创建或更新数据
- 试图违反设置为保护的删除规则关系
每当您与数据库引擎交互时,例如使用聚合、SQL 查询或实体操作时,OutSystems 都可以引发数据库异常。
安全异常
只要您的应用程序模块中有身份验证或其他安全机制,OutSystems 就可以引发安全异常。安全例外包括:
-
登录无效
-
未注册
最终用户未注册,未注册无法访问当前屏幕。当您在模块中创建新的自定义角色时,OutSystems 在未注册异常下创建特定的角色异常:
- Not – 最终用户正在访问没有授权角色的屏幕。
OutSystems 允许您在逻辑中引发未注册异常或任何现有角色异常。
如果没有更具体的异常处理程序,安全异常处理程序将处理上述任何异常。您应该在UI 流的OnException操作中处理安全异常。
通讯异常
通信异常仅适用于响应式 Web 和移动应用程序,并且在客户端设备尝试连接到服务器时出现通信问题时引发,例如没有互联网连接。每当服务器未能在指定的超时值内回复时(您可以在模块的Server Request Timeout属性中设置默认超时),弱连接也可能导致通信异常。
通信异常仅由 OutSystems 引发——您不能在您的逻辑中引发这些异常。
中止活动更改异常
中止活动更改异常的引发在流程活动回调操作中用作防止活动前进到下一个状态的机制。
异常信息
当 OutSystems 引发异常时,异常处理程序元素的ExceptionMessage属性会自动填充问题描述。当您在逻辑中引发异常(例如用户异常)时,您必须在Raise Exception 元素的Exception Message属性中定义消息。
异常日志
当您在模块中处理异常时,您可以使用异常处理程序元素的日志错误属性来选择 OutSystems 是否应记录异常。您可以在服务中心检查记录的异常。
注意:在集成的情况下,OutSystems 记录所有异常,与您在异常处理程序的日志错误属性中设置的值无关