DATA: progname TYPE program. DATA: msg TYPE string. DATA: lin TYPE i. DATA: wrd TYPE string. DATA: off TYPE i. DATA: mid TYPE trmsg_key. DATA: sid TYPE string. DATA(it_code) = VALUE stringtab( ( |PROGRAM SUBPOOL.| ) ( |CLASS main DEFINITION.| ) ( | PUBLIC SECTION.| ) ( | CLASS-METHODS show| ) ( | IMPORTING| ) ( | i_txt TYPE string| ) ( | RETURNING VALUE(ret_val) TYPE string.| ) ( |ENDCLASS.| ) ( |CLASS main IMPLEMENTATION.| ) ( | METHOD show.| ) ( | WRITE: / i_txt.| ) ( | ret_val = \|\{ i_txt \} - Return value.\|.| ) ( | ENDMETHOD.| ) ( |ENDCLASS.| ) ). * Subroutinen-Pool im ABAP-Speicher des akt. Programms erzeugen * it_code wird übergeben, Programmname wird temporär vom System vergeben GENERATE SUBROUTINE POOL it_code NAME progname MESSAGE msg LINE lin WORD wrd OFFSET off MESSAGE-ID mid SHORTDUMP-ID sid. CASE sy-subrc. WHEN 0. " ok TRY. * dynamischen Klassennamen ermitteln DATA(lv_class) = |\\PROGRAM={ progname }\\CLASS=MAIN|. DATA: ret TYPE string. WRITE: / 'Programm:', progname. WRITE: / 'Class:', lv_class. SKIP. * statischer Methodenaufruf CALL METHOD (lv_class)=>show EXPORTING i_txt = 'Static call' RECEIVING ret_val = ret. WRITE: / ret. * dynamischer Methodenaufruf DATA o_ref TYPE REF TO object. CREATE OBJECT o_ref TYPE (lv_class). CALL METHOD o_ref->('SHOW') EXPORTING i_txt = 'Dynamic call' RECEIVING ret_val = ret. WRITE: / ret. CATCH cx_root INTO DATA(e_text). MESSAGE e_text->get_text( ) TYPE 'I'. ENDTRY. WHEN 4. " Syntaxfehler WRITE: / msg. WHEN 8. " Laufzeitfehler WRITE: / sid. WHEN OTHERS. MESSAGE 'Unbekannter Fehler.' TYPE 'I'. ENDCASE.
Weiterführende Infos: Link