[ABAP] RTTI / RTTC / RTTS: Verwendung von Typdescriptoren

* Typ-Beispiele:
* Struct
*   RSDSSELOPT
* Table
*   RSELOPTION
* Klasse
*   CL_DEMO_OUTPUT
* Interface
*   IF_RANDOM_NUMBER
* Datenelement
*   I
* Referenz
*   ?
PARAMETERS: p_name TYPE string DEFAULT 'RSDSSELOPT'.

START-OF-SELECTION.

  DATA(o_type_desc) = cl_abap_typedescr=>describe_by_name( p_name ).

  CASE o_type_desc->kind.
    WHEN cl_abap_typedescr=>kind_struct.
      DATA(o_struct_desc) = CAST cl_abap_structdescr( o_type_desc ).
      cl_demo_output=>write_data( o_struct_desc->components ).
    WHEN cl_abap_typedescr=>kind_table.
      DATA(o_table_desc) = CAST cl_abap_tabledescr( o_type_desc ).
      DATA(o_tl_struct_desc) = CAST cl_abap_structdescr( o_table_desc->get_table_line_type( ) ).
      cl_demo_output=>write_data( o_tl_struct_desc->components ).
    WHEN cl_abap_typedescr=>kind_class.
      DATA(o_class_desc) = CAST cl_abap_classdescr( o_type_desc ).
      LOOP AT o_class_desc->methods ASSIGNING FIELD-SYMBOL(<m>).
        cl_demo_output=>write( <m>-name ).
      ENDLOOP.
    WHEN cl_abap_typedescr=>kind_intf.
      DATA(o_if_desc) = CAST cl_abap_intfdescr( o_type_desc ).
      LOOP AT o_if_desc->methods ASSIGNING FIELD-SYMBOL(<i>).
        cl_demo_output=>write( <i>-name ).
      ENDLOOP.
    WHEN cl_abap_typedescr=>kind_elem.
      DATA(o_elem_desc) = CAST cl_abap_elemdescr( o_type_desc ).
      cl_demo_output=>write_data( o_elem_desc->type_kind ).
    WHEN cl_abap_typedescr=>kind_ref.
  ENDCASE.

  cl_demo_output=>display( ).

Links