首页 > 解决方案 > 如何将本地异常对象传递给类

问题描述

我想在类方法中传递一个错误本地对象,该对象将向用户显示详细错误。

这是当前代码:

CATCH cx_root INTO lcx_general_error.
  DATA(lv_longtext) = lcx_general_error->get_longtext( ).
  lcx_general_error->get_source_position(
            IMPORTING
                program_name    = lv_program_name
                include_name    = lv_include_name
                source_line    = lv_program_line
                ).
  DATA(lv_program_include) = |{ lv_program_name }/ { lv_include_name }|.
  DATA(lv_length_message) = strlen( lv_longtext ).
  DATA(lv_error_message1) = lv_longtext(50).
  IF lv_length_message > 50.
    DATA(lv_remaining) = lv_length_message - 50.
    DATA(lv_error_message2) = lv_longtext+50(lv_remaining).
  ENDIF.

  MESSAGE e001 WITH lv_error_message1 lv_error_message2
                    lv_program_include
                    lv_program_line.

相反,我想创建一个类方法并传递任何引用任何错误的本地对象并显示错误详细信息:

CATCH cx_root INTO lcx_general_error.
  lo_fi_uploads->display_error( lcx_general_error ).  

如何在本地类中创建和使用该参数?

标签: exceptionabap

解决方案


异常是具有常规对象实例的常规类,因此像任何其他对象参数一样声明它们:

METHODS display_error
  IMPORTING
    exception TYPE REF TO cx_root.

在方法的实现中,您可以粘贴已有的代码:

METHOD display_error.

  DATA(lv_longtext) = exception->get_longtext( ).
  exception->get_source_position(
        IMPORTING
            program_name    = DATA(lv_program_name)
            include_name    = DATA(lv_include_name)
            source_line    = DATA(lv_program_line)
            ).
  DATA(lv_program_include) = |{ lv_program_name }/ { lv_include_name }|.
  DATA(lv_length_message) = strlen( lv_longtext ).
  DATA(lv_error_message1) = lv_longtext(50).
  IF lv_length_message > 50.
    DATA(lv_remaining) = lv_length_message - 50.
    DATA(lv_error_message2) = lv_longtext+50(lv_remaining).
  ENDIF.

  MESSAGE e001 WITH lv_error_message1 lv_error_message2
                lv_program_include
                lv_program_line.

ENDMETHOD.

人们经常担心处理异常可能会意外触发它们。那不会发生。只要您不调用 RAISE 语句,异常实际上就是非常普通的对象。你甚至可以用 NEW 实例化它们而不触发它们。


推荐阅读