如何在不检查 sy-subrc 的情况下创建有效引用?

How can I create valid reference without checking sy-subrc?

在这个 READ 语句中,如果 table 中没有行,我有一个转储。

read table it_example reference into data(lr_example) with key matnr = '22000000'.

这也发生在 OPTIONAL 语句中。

DATA(ls_konp) = REF #( lt_konp[ knumh = <fs_a305>-knumh ] OPTIONAL ).

如何在不检查的情况下使用引用 sy-subrc?我经常在 select 语句中使用 table 的内联声明。

谢谢。

您似乎正在解除对未初始化引用的引用。如果您不想使用 sy-subrc 然后使用 IF lr_example IS BOUND. 并首先尝试取消引用您的对象。

您可以创建一个伪造的空引用并使用 REF 语句的 DEFAULT 谓词来使引用从不初始。

DATA: ls_konp TYPE konp.

DATA(ref) = REF #( ls_konp ).

DATA(lr_konp) = REF #( lt_konp[ knumh = <fs_a305>-knumh ] DEFAULT ref ).
DATA(ls_konp) = REF #( lt_konp[ knumh = <fs_a305>-knumh ] DEFAULT NEW konp( ) ).

如果您的代码完全适合 ls_konp 可能是空行的情况,请首选此方法。

TRY.
    DATA(ls_konp) = REF #( lt_konp[ knumh = <fs_a305>-knumh ] ).
    ls_konp->...
    " in this block, ignore that ls_konp might not be BOUND
  CATCH cx_sy_itab_line_not_found.
    " in this block, focus exclusively on the case ls_konp IS NOT BOUND
ENDTRY.

如果您需要显式处理 ls_konp 未绑定的情况,请首选此方法。