ABAP:程序终止而不会在异常处理方面提供任何错误

时间:2016-05-12 08:45:10

标签: abap

以下程序编译正常,但在执行时终止 - 没有任何错误。当引发异常并调用类时,程序终止,为什么程序终止?看起来程序在导出r_exception时终止,但不导入

*&---------------------------------------------------------------------*
*& Report  Z_TEST102
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z_test102.
TYPES: ty_fuel TYPE p DECIMALS 2,
ty_cargo TYPE p DECIMALS 2.
TYPE-POOLS icon.

*----------------------------------------------------------------------*
*       CLASS lcx_list_error DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_list_error DEFINITION INHERITING FROM cx_static_check.
  PUBLIC SECTION.
    METHODS get_exc_text
    RETURNING value(result) TYPE string.
ENDCLASS. "lcx_list_error DEFINITION
*---------------------------------------------------------------------*
* CLASS lcx_list_error IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcx_list_error IMPLEMENTATION.
  METHOD get_exc_text.
    result = 'The list contains an error.'(err).
  ENDMETHOD.                    "get_exc_text
ENDCLASS. "lcx_list_error IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_airplane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_airplane DEFINITION.
  PUBLIC SECTION.
    "---------------------------------------------
    CONSTANTS: pos_1 TYPE i VALUE 30.
    METHODS: constructor IMPORTING
    im_name TYPE string
    im_planetype TYPE saplane-planetype.
    METHODS: display_attributes
    RAISING lcx_list_error.
    CLASS-METHODS: display_n_o_airplanes.
    EVENTS: airplane_created.
  PRIVATE SECTION.
    "----------------------------------------------
    METHODS: get_technical_attributes
    IMPORTING im_type TYPE saplane-planetype
    EXPORTING ex_weight TYPE s_plan_wei
    ex_tankcap TYPE s_capacity
    RAISING cx_bc401_invalid_planetype.
    DATA: name TYPE string,
    planetype TYPE saplane-planetype.
    CLASS-DATA: n_o_airplanes TYPE i.
ENDCLASS. "lcl_airplane DEFINITION
*------------------------------------------------------------------*
* CLASS lcl_airplane IMPLEMENTATION *
*------------------------------------------------------------------*
CLASS lcl_airplane IMPLEMENTATION.
  METHOD constructor.
    name = im_name.
    planetype = im_planetype.
    n_o_airplanes = n_o_airplanes + 1.
    RAISE EVENT airplane_created.
  ENDMETHOD. "constructor
  METHOD display_attributes.
    DATA: weight TYPE saplane-weight,
    cap TYPE saplane-tankcap,
    r_exception TYPE REF TO cx_root,
    exc_text TYPE string.
    WRITE: / icon_ws_plane AS ICON,
    / 'Name of Airplane'(001), AT pos_1 name,
    / 'Type of airplane: '(002), AT pos_1 planetype.
* handle exception in case of invalid planetype:
    TRY.
        get_technical_attributes( EXPORTING im_type = planetype
        IMPORTING ex_weight = weight
        ex_tankcap = cap ).
        WRITE: / 'weight:'(003), weight,
        'tankkap:'(004), cap.
      CATCH cx_bc401_invalid_planetype INTO r_exception.
        exc_text = r_exception->get_text( ).
        WRITE: / exc_text COLOR COL_NEGATIVE.

        "Program terminates here!
        RAISE EXCEPTION TYPE lcx_list_error
        EXPORTING previous = r_exception.

    ENDTRY.
  ENDMETHOD. "display_attributes
  METHOD display_n_o_airplanes.
    WRITE: /, / 'number of airplanes: '(ca1),
    AT pos_1 n_o_airplanes LEFT-JUSTIFIED, /.
  ENDMETHOD. "display_n_o_airplanes
  METHOD get_technical_attributes.
    SELECT SINGLE weight tankcap FROM saplane
    INTO (ex_weight, ex_tankcap)
    WHERE planetype = im_type.
    IF sy-subrc <> 0.
      RAISE EXCEPTION TYPE cx_bc401_invalid_planetype
      EXPORTING planetype = im_type.
    ENDIF.
  ENDMETHOD. "get_technical_attributes
ENDCLASS. "lcl_airplane IMPLEMENTATION


START-OF-SELECTION.

  DATA: r_airplane TYPE REF TO lcl_airplane.

***** Passenger Plane ********************************************
  CREATE OBJECT r_airplane EXPORTING
                         im_name = 'LH BERLIN'
                         im_planetype = '400-400'.          "'747-400'.


  lcl_airplane=>display_n_o_airplanes( ).
  CALL METHOD r_airplane->display_attributes.

异常类定义: enter image description here

0 个答案:

没有答案