无法捕获 TYPE_NOT_FOUND 异常

问题描述 投票:0回答:3

我正在调用

cl_abap_typedescr=>describe_by_name
方法。它可能会抛出
TYPE_NOT_FOUND
异常。我来自 c#,在 c# 中很容易捕获这样的错误。但在ABAP中我无法捕获异常。

首先是我无法在代码中使用

TYPE_NOT_FOUND
异常对象。它只是不存在。事实上,抓住
CX_ROOT
也无济于事。它只是忽略我的 try catch 子句并崩溃:

TRY .
  descr_ref0 ?= cl_abap_typedescr=>describe_by_name('iabc1').
CATCH cx_root.
  BREAK-POINT.
ENDTRY.
exception try-catch abap
3个回答
8
投票

我假设您需要类型转换,因此为此提供了一个额外的步骤。

此语法不如新语法那么优雅,但这是我编译示例的唯一方法:

  data descr_ref1 type ref to cl_abap_typedescr.

  call method cl_abap_typedescr=>describe_by_name(
    exporting  p_name         = 'abc1'
    receiving  p_descr_ref    = descr_ref1
    exceptions type_not_found = 1 ).

  if sy-subrc <> 0.
    break-point.
  else.
    descr_ref0 ?= descr_ref1.
  endif. 

编辑:

通过查看方法就可以知道使用的是哪种类型的异常:

enter image description here

或者您可以使用编辑器中的“Pattern”命令来获取正确的语法。


5
投票

TYPE_NOT_FOUND
不是基于类的异常。您需要使用旧语法并为每个异常分配一个非零值,然后检查
SY-SUBRC
该值是否再次出现。


0
投票

我知道这很旧,但您不必使用 CALL METHOD 语法。

cl_abap_typedescr=>describe_by_name(
    exporting  p_name         = 'abc1'
    receiving  p_descr_ref    = descr_ref1
    exceptions type_not_found = 1 ).

这也有效(块开头没有调用方法)。

© www.soinside.com 2019 - 2024. All rights reserved.