以下程序编译正常,但在执行时终止 - 没有任何错误。当引发异常并调用类时,程序终止,为什么程序终止?看起来程序在导出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.