[ABAP] Neuen Modus öffnen, Transaktion ausführen, Modus schließen

TRY.
* Modus öffnen
    DATA: o_mode TYPE REF TO if_imc_child_mode.

    cl_imc_mode=>create_mode( EXPORTING modetype = cl_imc_mode=>modetype_main_mode
                              IMPORTING mode     = o_mode ).

* Transaktion starten
    o_mode->call( tcode = 'SE11'
*              data  =
                ).

    DATA: ret TYPE string.

* Modus wieder schließen?
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        titlebar              = 'Frage'
        text_question         = 'Modus wieder schließen?'
        display_cancel_button = abap_false
      IMPORTING
        answer                = ret.

    CASE ret.
      WHEN '1'.
* Ja -> Modus schließen
        o_mode->close( ).
    ENDCASE.
  CATCH cx_root INTO DATA(e_txt).
ENDTRY.

[ABAP] Code der aufrufenden Transaktion ausgeben

Variante 1 (GET_PARAMETER_TCOD)

DATA: lv_ctc TYPE sy-tcode.

* liefert Namen der gestarteten/aufgerufenen Parameter-Transaktion
CALL FUNCTION 'GET_PARAMETER_TCOD'
IMPORTING
  ptcod = lv_ctc.
  
WRITE: / lv_ctc.

Variante 2 (SYTEM_CALL)

DATA: lv_calling_tcode TYPE sy-tcode.

CALL 'GET_PARAM_TCOD' ID 'PTCOD' FIELD lv_calling_tcode.

WRITE: / lv_calling_tcode.

[ABAP] Höhe und Breite des aktuellen SAP-Fensters ermitteln

Variante 1 (sy-scols / sy-srows)

* Zeilen und Spalten in Pixel umrechnen
DATA(lv_x_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
                                                          x_or_y = 'X'
                                                          in = sy-scols ).

DATA(lv_y_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
                                                          x_or_y = 'Y'
                                                          in = sy-srows ).

WRITE: / |X: { lv_x_metric }|.
WRITE: / |Y: { lv_y_metric }|.

Variante 2 (Kernel-Methode ‘GET_WINDOW_DATA’)

DATA: lv_begin_r TYPE i.
DATA: lv_end_r TYPE i.

DATA: lv_begin_c TYPE i.
DATA: lv_end_c TYPE i.

* Kernel-Methode 'GET_WINDOW_DATA' aufrufen, gibt Position des Fensters in Dynprozeilen und -spalten zurück
CALL 'GET_WINDOW_DATA' ID 'BEGROW' FIELD lv_begin_r ID 'BEGCOL' FIELD lv_begin_c ID 'ENDROW' FIELD lv_end_r ID 'ENDCOL' FIELD lv_end_c.

WRITE: / |From col: { lv_begin_c } to row: { lv_end_c }|.
WRITE: / |From row: { lv_begin_r } to row: { lv_end_r }|.

* Zeilen und Spalten gesamt ausrechnen
DATA(lv_cols) = lv_end_c - lv_begin_c.
DATA(lv_rows) = lv_end_r - lv_begin_r.

WRITE: / |Cols: { lv_cols }|.
WRITE: / |Rows: { lv_rows }|.

* Zeilen und Spalten in Pixel umrechnen
DATA(lv_x_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
                                                          x_or_y = 'X'
                                                          in = lv_cols ).

DATA(lv_y_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
                                                          x_or_y = 'Y'
                                                          in = lv_rows ).

* Breite des Fensters in Pixel
WRITE: / |X: { lv_x_metric }|.
* Höhe des Fensters in Pixel
WRITE: / |Y: { lv_y_metric }|.

[ABAP] xstring (Bytes) nach string (Text) wandeln

Variante 1 (cl_abap_conv_in_ce)

DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.
DATA: lv_str TYPE string.
  
* xstring (binary) -> string (UTF-8)
DATA(o_conv_r) = cl_abap_conv_in_ce=>create( input = lv_xstr encoding = 'UTF-8' ).
o_conv_r->read( IMPORTING data = lv_str ).

WRITE: / lv_str.

Variante 2 (/ui2/cl_abap2json)

DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.

* xstring -> string (UTF-8)
DATA(lv_str) = /ui2/cl_abap2json=>conv_xstring_to_string( lv_xstr ).

WRITE: / lv_str.

Variante 3 (cl_proxy_service)

DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.

* xstring (binary) -> string (4110)
DATA(lv_str_res) = cl_proxy_service=>xstring2cstring( lv_xstr ).

WRITE: / lv_str_res.

Variante 4 (ICT_DISPATCH)

DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.
DATA: lv_string TYPE string.

* xstring (binary) -> string
CALL 'ICT_DISPATCH' ID 'did'    FIELD 'append_xstring_to_string'
                    ID 'source' FIELD lv_xstr
                    ID 'dest'   FIELD lv_string.

WRITE: / lv_string.

[ABAP] Prüfen, ob ein Funktionsbaustein oder Programm per RFC aufgerufen wurde

DATA: lv_caller_in_same_system TYPE answer.

* RFC-Ausführung im gleichen R/3-System ?
CALL FUNCTION 'RFC_WITHIN_SAME_SYSTEM'
  IMPORTING
    caller_in_same_system     = lv_caller_in_same_system
  EXCEPTIONS
    system_call_not_supported = 1
    no_rfc_communication      = 2
    internal_error            = 3
    OTHERS                    = 4.

WRITE: / 'Same system:', lv_caller_in_same_system.
WRITE: / sy-subrc.

oder

CALL 'RFCControl' ID 'CODE' FIELD 'B'.
IF sy-subrc = 0.
  WRITE:/ 'RFC'.
ENDIF.

[ABAP] System-Funktion des c-kernel aufrufen

Vorsicht: Unsachgemäßer Aufruf von Kernelfunktionen kann Systemschäden verursachen!

* Server-Directory auflisten
DATA: lv_cmd TYPE char255.
DATA: lt_result_tab TYPE TABLE OF char255.

lv_cmd = 'ls -lasi'.

CALL 'SYSTEM' ID 'COMMAND' FIELD lv_cmd ID 'TAB' FIELD lt_result_tab.

LOOP AT lt_result_tab INTO DATA(res_line).
  WRITE: / res_line.
ENDLOOP.

* eingegebenen OK-Code ermitteln
DATA: my_ucomm TYPE sy-ucomm.
CALL 'DYNP_OKCODE_GET' ID 'FCODE' FIELD my_ucomm.
WRITE: / my_ucomm.

* CPUID ermitteln
DATA: local_host LIKE spfid-host.
CALL 'C_GET_CPU_ID' ID 'CPUID' FIELD local_host.
WRITE: / local_host.

* SAP-System ermitteln
DATA: sapsystem LIKE spfid-sysnr.
CALL 'C_GET_SYSTEM_NUMBER' ID 'SYSTEM' FIELD sapsystem.
WRITE: / sapsystem.

* Directory für Audit-Files
DATA: lv_audir TYPE rsauflist-dir_name.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_AUDIT' ID 'VALUE' FIELD lv_audir.
WRITE: / lv_audir.

* Namens-Format für Audit-Files
DATA: lv_aufn TYPE rsauflist-file_name.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'FN_AUDIT' ID 'VALUE' FIELD lv_aufn.
WRITE: / lv_aufn.

* SAP Servername
DATA: lv_server_name LIKE btctgtsrvr-srvname.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'rdisp/myname' ID 'VALUE' FIELD lv_server_name.
WRITE: / lv_server_name.

Weiterführende Infos: Link