在 ABAP 里处理异常,不能只理解成给危险代码外面套一层TRY CATCH。在真实的 S/4HANA 项目里,异常处理其实是一种边界设计。它决定了一个采购订单创建失败时,是把失败原因沉默吞掉,还是把错误明确返回给前端。它决定了一个 RAP 保存逻辑中发现数据不合法时,是抛出短转储,还是通过%msg给 Fiori Elements 页面返回可读的消息。它也决定了一个批量接口处理一万条物料主数据时,是一条坏数据拖垮整批任务,还是让错误被记录、被解释、被隔离、被继续处理。
ABAP 的现代异常体系以 class-based exception 为核心。异常对象来自异常类,系统预定义异常类通常以CX_开头,自定义全局异常类通常使用ZCX_或YCX_,局部异常类则常见LCX_。SAP 的材料明确说明,现代 ABAP 中异常应设计为 class-based exceptions,非 class-based exceptions 属于旧式写法,新开发里不推荐继续使用。(GitHub)
从 CX_ROOT 看懂异常类体系
所有 ABAP class-bas