Link to home
Start Free TrialLog in
Avatar of gram77
gram77Flag for India

asked on

ABAP: Program terminates without providing any error on Exception Handling

The following program compiles fine, but terminates - without any error - on execution. Looks like the program terminates when r_exception is exported, but not imported. How to resolve the issue?

REPORT  zabc_raise_try.
TYPES: ty_fuel TYPE p DECIMALS 2,
ty_cargo TYPE p DECIMALS 2.
TYPE-POOLS icon.
INCLUDE z_raise_try_exc.
INCLUDE z_raise_try_cl2.

DATA: r_airplane TYPE REF TO lcl_airplane,
r_carrier TYPE REF TO lcl_carrier.


START-OF-SELECTION.
***** Create CARRIER ********************************************
  CREATE OBJECT r_carrier EXPORTING im_name = 'Smile&Fly-Travel'.

***** 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.

**************
"include: z_raise_try_cl2
*------------------------------------------------------------------*
* CLASS lcl_airplane DEFINITION *
*------------------------------------------------------------------*
INTERFACE lif_partners.
  METHODS display_partner.
  EVENTS: partner_created.
ENDINTERFACE. "lif_partners

*----------------------------------------------------------------------*
*       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 without error 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
*---------------------------------------------------------------------*
* CLASS lcl_carrier DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_carrier DEFINITION.
  PUBLIC SECTION.
    "----------------------------------------
    INTERFACES lif_partners.
    METHODS: constructor IMPORTING im_name TYPE string,
    get_name RETURNING value(ex_name) TYPE string,
    add_airplane FOR EVENT airplane_created OF lcl_airplane
    IMPORTING sender,
    display_airplanes,
    display_attributes.
  PRIVATE SECTION.
    "-----------------------------------
    DATA: name TYPE string,
    airplane_list TYPE TABLE OF REF TO lcl_airplane.
ENDCLASS. "lcl_carrier DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_carrier IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_carrier IMPLEMENTATION.
  METHOD lif_partners~display_partner.
    display_attributes( ).
  ENDMETHOD. "lif_partners~display_partner
  METHOD add_airplane.
    APPEND sender TO airplane_list.
  ENDMETHOD. "add_airplane
  METHOD display_attributes.
    SKIP 2.
    WRITE: icon_flight AS ICON, name . ULINE. ULINE.
    display_airplanes( ).
  ENDMETHOD. "display_attributes
  METHOD display_airplanes.
    DATA:
    r_plane TYPE REF TO lcl_airplane,
    r_exc TYPE REF TO lcx_list_error,
    exc_text TYPE string.
    LOOP AT airplane_list INTO r_plane.
      TRY.
          r_plane->display_attributes( ).
        CATCH lcx_list_error INTO r_exc.
          exc_text = r_exc->get_exc_text( ).
          MESSAGE exc_text TYPE 'i'.
          exc_text = r_exc->previous->get_text( ).
          MESSAGE exc_text TYPE 'i'.
      ENDTRY.
    ENDLOOP.
  ENDMETHOD. "display_airplanes
  METHOD constructor.
    name = im_name.
    SET HANDLER add_airplane FOR ALL INSTANCES.
*    RAISE EVENT lif_partners~partner_created.
  ENDMETHOD. "constructor
  METHOD get_name.
    ex_name = name.
  ENDMETHOD. "get_name
ENDCLASS. "lcl_carrier IMPLEMENTATION

*************
"INCLUDE z_raise_try_exc
"Exception Handling code
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

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Sham Haque
Sham Haque
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial