[ABAP] ALV – Auswahlpopup für Selektion einer Anzeigevariante anzeigen

DATA: ls_variant LIKE disvariant.
DATA: lv_exit TYPE c.

PARAMETERS p_vari LIKE disvariant-variant.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

  CLEAR ls_variant.

  ls_variant-report = sy-repid.
  ls_variant-username = sy-uname.

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      is_variant    = ls_variant
      i_save        = 'A'
    IMPORTING
      e_exit        = lv_exit
      es_variant    = ls_variant
    EXCEPTIONS
      not_found     = 1
      program_error = 2
      OTHERS        = 3.

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF lv_exit EQ space.
      p_vari = ls_variant-variant.
    ENDIF.
  ENDIF.

[ABAP] Prüfen, ob string eine Zahl (numerisch) ist

* erlaubte Zeichen für numerischen String
CONSTANTS: c_numeric TYPE string VALUE '-., 0123456789'.

DATA: val_in TYPE string VALUE '    -123.2'.

* funktioniert nicht mit strings wie '0.0.1' usw.
* CO -> contains only
IF val_in CO c_numeric.
  WRITE: / |String "{ val_in }" ist numerisch.|.
ELSE.
  WRITE: / |String "{ val_in }" ist nicht numerisch.|.
ENDIF.

[ABAP] Klasse (cl_s_aut_bal_log) zur Verwendung des Business Application Log (BAL)

* cl_s_aut_bal_log implementiert die gundlegenden Funktionen (FuBas) des Application-Log
* Es werden z.B. NICHT implementiert: BAL_DB_SEARCH, BAL_DB_LOAD.
* Es kann nicht mit Verfallsdatum gearbeitet werden.
START-OF-SELECTION.
* Legt eine Protokoll-Instanz an
* Log-Objekte werden in der Transaktion SLG0 definiert --> es werden Transportaufträge generiert
* Anlegen der Objekte erfolgt in den Tabellen
*   BALOBJ (Anwendungs-Log: Objekte)
*   BALSUB (Anwendungs-Log: Unterobjekte)
  DATA(o_applog) = cl_s_aut_bal_log=>create( im_object    = 'Z_TEST_LOG'
                                             im_subobject = 'Z_TEST_LOG_U1' ).

* Protokolleinträge hinzufügen -> Nachrichten werden in der Transaktion SE91 gefplegt
* Beispiel: Verwendung der vordefinierten Nachrichtenklasse 'S_AUT', Nr. '128'
  o_applog->add_entry( im_msgtype = 'I'
                       im_msgid   = 'S_AUT'
                       im_msgno   = '128' ).

* Beispiel: Verwendung der generische Nachrichtenklasse mit & & & & für die Parameter msgv1 - msgv4
  o_applog->add_entry( im_msgtype = 'W'
                       im_msgid   = '01'
                       im_msgno   = '319'
                       im_msgv1   = 'Test1'
                       im_msgv2   = 'Test2'
                       im_msgv3   = 'Test3'
                       im_msgv4   = 'Test4' ).

  TRY.
* Ausnahme auslösen
      DATA(result) = 1 / 0.

    CATCH cx_root INTO DATA(e_txt).
* Fügt eine Ausnahme hinzu, wobei
* im_probclass: 1 - sehr wichtig
*               2 - wichtig
*               3 - mittel
*               4 - Zusatzinformationen
      o_applog->add_exception( im_probclass = '4'
                               im_msgtype = 'E'
                               im_exception = e_txt ).
  ENDTRY.

* Existieren Meldungen?
  IF o_applog->has_statistic( ) = abap_true.
* Protokoll anzeigen
    o_applog->show( im_title = 'Application-Log' ).
  ENDIF.

* Schließt und persistiert (speichert) das Protokoll
* Protokoll kann in der Transaktion SLG1 angeschaut werden
* Speicherung der Log-Daten erfolgt in den Tabellen
*   BALHDR (Anwendungs-Log: Protokollkopf)
*   BALDAT (Anwendungs-Log: Daten eines Protokolls)
  o_applog->close( im_save = CONV #( abap_true ) ).

Weiterführende Infos: Link, Link, Link und Link

[ABAP] Formeleditor

Beispielprogramm        Bedeutung

SFBE_EXAMPLE1           Beispielprogramm FoBuEv: Einfachst-Aufruf 
SFBE_EXAMPLE2           Beispielprogramm FoBuEv: Aufruf mit eigenen Feldern 
SFBE_EXAMPLE3           Beispielprogramm FoBuEv: Aufruf mit Typprüfung, eigenem GUI-Status und TraceDer Trace wird im Menü eingeschaltet! 
SFBE_EXAMPLE4           Beispielprogramm FoBuEv: Aufruf mit eigenen Funktionen 
SFBE_EXAMPLE5           Beispielprogramm FoBuEv: Implementierung einer Methode per FoBuEv 
SFBE_EXAMPLE6           Beispielprogramm FoBuEv: Aufruf mit eigenen Drucktasten und IF-Funktion 
SFBE_EXAMPLE8           Beispielprogramm FoBuEv: Rechnen mit Währungsbeträgen, Mengen und Preisen
RS_FOBU_METHOD_EXAMPLE  Beispielprogramm für Formula Builder Methoden

wichtige Klassen:

cl_fobu_formula
cl_foev_formula
cl_fobu_connector

Weiterführende Infos: Link

[ABAP] Detaildaten eines Benutzers lesen

DATA: ls_address TYPE bapiaddr3.
DATA: ls_admindata TYPE bapiuseradmin.
DATA: ls_userdefault TYPE bapidefaul.
DATA: ls_company TYPE bapiuscomp.
DATA: lt_message TYPE bapirettab.

" Userdaten auslesen
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
  EXPORTING
    username  = sy-uname
  IMPORTING
    address   = ls_address
    admindata = ls_admindata
    company   = ls_company
    defaults  = ls_userdefault
  TABLES
    return    = lt_message.

" einige der gelesenen Daten ausgeben
WRITE: / ls_address-firstname.
WRITE: / ls_address-lastname.
WRITE: / ls_address-e_mail.

WRITE: / ls_admindata-aname.

WRITE: / ls_company-company.

[ABAP] Alle Elemente des Selektionsbildschirmes auslesen

DATA: it_fields TYPE STANDARD TABLE OF dynpread.
DATA: wa_field LIKE LINE OF it_fields.
DATA: lv_field_type TYPE c.
FIELD-SYMBOLS: <field> TYPE any.

PARAMETERS: ... " irgendwelche Selektionsparameter auf dem Selektionsbild plazieren

AT SELECTION-SCREEN.
  " Dynpro Feldwerte lesen vor Feldtransport
  CALL FUNCTION 'DYNP_VALUES_READ'
  EXPORTING
    dyname                   = sy-repid
    dynumb                   = sy-dynnr
    request                  = 'A' " alle Elemente auslesen
    perform_conversion_exits = ' '
    perform_input_conversion = ' '
  TABLES
    dynpfields               = it_fields
  EXCEPTIONS
    OTHERS                   = 11.
    
START-OF-SELECTION.
  " ausgelesene Elemente und deren Werte ausgeben
  LOOP AT it_fields INTO wa_field.
    ASSIGN (wa_field-fieldname) TO <field>.
    DESCRIBE FIELD <field> TYPE lv_field_type.
    WRITE: / |{ <field> }: { lv_field_type }|.
  ENDLOOP.

[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