[ABAP] Message-Log als Popup: Sammeln und Ausgeben von Nachrichten

*--------------------------------------------------------------------*
* Klasse zur Anzeige eines Nachrichtenprotokolls (Logs)
*
* Kapselt folgende FuBas:
* MESSAGES_INITIALIZE
* MESSAGE_STORE
* MESSAGES_STOP
* MESSAGES_SHOW
*--------------------------------------------------------------------*
CLASS lcl_msg_log DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: init
      RETURNING VALUE(rv_ok) TYPE boolean.

    CLASS-METHODS: add
      IMPORTING
                i_arbgb      TYPE smesg-arbgb
                i_msgty      TYPE smesg-msgty
                i_txtnr      TYPE string
                i_zeile      TYPE i DEFAULT 0
                i_msgv1      TYPE string DEFAULT ''
                i_msgv2      TYPE string DEFAULT ''
                i_msgv3      TYPE string DEFAULT ''
                i_msgv4      TYPE string DEFAULT ''
      RETURNING VALUE(rv_ok) TYPE boolean.

    CLASS-METHODS: show
      IMPORTING
                i_show_amodal TYPE boolean DEFAULT abap_false
      RETURNING VALUE(rv_ok)  TYPE boolean.
ENDCLASS.
*--------------------------------------------------------------------*
CLASS lcl_msg_log IMPLEMENTATION.

*--------------------------------------------------------------------*
* Nachrichtenprotokoll initialisieren
*--------------------------------------------------------------------*
  METHOD init.

    rv_ok = abap_false.

* Nachrichtenprotokoll initialisieren
    CALL FUNCTION 'MESSAGES_INITIALIZE'
      EXCEPTIONS
        log_not_active       = 1
        wrong_identification = 2
        OTHERS               = 3.

    IF sy-subrc = 0.
      rv_ok = abap_true.
    ENDIF.

  ENDMETHOD.
*--------------------------------------------------------------------*
* Nachricht im Protokoll ablegen
*--------------------------------------------------------------------*
  METHOD add.

    rv_ok = abap_false.

* Nachricht im Protokoll ablegen
    CALL FUNCTION 'MESSAGE_STORE'
      EXPORTING
        arbgb                  = i_arbgb
        msgty                  = i_msgty
        msgv1                  = i_msgv1
        msgv2                  = i_msgv2
        msgv3                  = i_msgv3
        msgv4                  = i_msgv4
        txtnr                  = i_txtnr
        zeile                  = i_zeile
      EXCEPTIONS
        message_type_not_valid = 1
        not_active             = 2
        OTHERS                 = 3.

    IF sy-subrc = 0.
      rv_ok = abap_true.
    ENDIF.

  ENDMETHOD.
*--------------------------------------------------------------------*
* Nachrichtenprotokoll anzeigen
*--------------------------------------------------------------------*
  METHOD show.

    rv_ok = abap_false.

* Baustein analysiert Fehlerprotokoll und gibt als Status eine Exception aus
    CALL FUNCTION 'MESSAGES_STOP'
      EXCEPTIONS
        a_message         = 1
        e_message         = 2
        w_message         = 3
        i_message         = 4
        s_message         = 5
        deactivated_by_md = 6
        OTHERS            = 7.

* Nachrichtenprotokoll anzeigen
    CALL FUNCTION 'MESSAGES_SHOW'
      EXPORTING
        i_use_grid         = abap_true
        i_amodal_window    = i_show_amodal
      EXCEPTIONS
        inconsistent_range = 1
        no_messages        = 2
        OTHERS             = 3.

    IF sy-subrc = 0.
      rv_ok = abap_true.
    ENDIF.

  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

  IF abap_true = lcl_msg_log=>init( ).

    IF abap_true = lcl_msg_log=>add( i_arbgb = 'SY'
                                     i_msgty = 'E'
                                     i_txtnr = '002'
                                     i_zeile = 0
                                     i_msgv1 = 'Fehler.' ).

      IF abap_true = lcl_msg_log=>add( i_arbgb = 'SY'
                                       i_msgty = 'W'
                                       i_txtnr = '002'
                                       i_zeile = 1
                                       i_msgv1 = 'Warnung' ).

        IF abap_true = lcl_msg_log=>add( i_arbgb = 'SY'
                                         i_msgty = 'I'
                                         i_txtnr = '002'
                                         i_zeile = 2
                                         i_msgv1 = 'Info' ).

          IF abap_true = lcl_msg_log=>show( ).

          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

[ABAP] Popup zur Wert-Eingabe von Datenbankfeldern anzeigen

TYPES: ty_it_fields TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.

DATA: lv_ret TYPE char1.

* field_attr:
*
* space - normale Helligkeit, eingabebereit
* 01     - hell, eingabebereit
* 02     - normale Helligkeit, nicht eingabebereit
* 03     - hell, nicht eingabebereit
* 04     - nicht anzeigen

* Eingabefelder
DATA(it_fields) = VALUE ty_it_fields( ( tabname = 'BKPF' fieldname = 'BUDAT' value = sy-datum field_obl = abap_true )
                                      ( tabname = 'BKPF' fieldname = 'BLART' field_obl = abap_true )
                                      ( tabname = 'MARA' fieldname = 'MATNR' fieldtext = 'MarNr' field_attr = '01' value = '00001' ) ).

* Eingabedialog
CALL FUNCTION 'POPUP_GET_VALUES'
  EXPORTING
    popup_title     = 'Werteeingabe'
  IMPORTING
    returncode      = lv_ret
  TABLES
    fields          = it_fields
  EXCEPTIONS
    error_in_fields = 1
    OTHERS          = 2.

* Auswertung
IF sy-subrc = 0.
  CASE lv_ret.
    WHEN space.
      LOOP AT it_fields ASSIGNING FIELD-SYMBOL(<fs_line>).
        WRITE: / <fs_line>-tabname, <fs_line>-fieldname, <fs_line>-fieldtext, <fs_line>-field_obl, <fs_line>-value.
      ENDLOOP.
    WHEN 'A'.
      WRITE: / 'Abbruch.'.
    WHEN OTHERS.
      WRITE: / 'Fehler.'.
  ENDCASE.
ELSE.
  WRITE: / sy-subrc.
ENDIF.

[ABAP] PopUp-Fenster für Datumsauswahl (Kalender) anzeigen

Variante 1 (Monatskalender, Monat und Jahr wählbar)

DATA: lv_dat TYPE sy-datum.
  
CALL FUNCTION 'F4_DATE'
  IMPORTING
    select_date                  = lv_dat
  EXCEPTIONS
    calendar_buffer_not_loadable = 1
    date_after_range             = 2
    date_before_range            = 3
    date_invalid                 = 4
    factory_calendar_not_found   = 5
    holiday_calendar_not_found   = 6
    parameter_conflict           = 7
    OTHERS                       = 8.

Variante 2 (Jahreskalender, scrollbar)

DATA: lv_dat TYPE sy-datum.
  
CALL FUNCTION 'POPUP_CALENDAR_SDB'
  EXPORTING
    sel_day    = abap_true
    focus_day  = sy-datum
  IMPORTING
    begin_date = lv_dat.

[ABAP] URL im SAP-Browser als PopUp-Fenster anzeigen

Beispiel 1

cl_abap_browser=>show_url( url          = 'www.google.de'
                           title        = 'ABAP-Browser'
                           size         = cl_abap_browser=>large
                           modal        = abap_true
                           printing     = abap_false
                           buttons      = abap_true
                           format       = cl_abap_browser=>landscape
                           position     = cl_abap_browser=>topleft
                           context_menu = abap_false ).

Beispiel 2

* HTML-Code generieren lassen
SELECT * FROM tnapr INTO TABLE @DATA(it_tnapr).
DATA(lv_html) = cl_demo_output=>get( it_tnapr ).

* HTML-Code anzeigen
cl_abap_browser=>show_html( html_string  = lv_html
                            size         = cl_abap_browser=>xlarge
                            format       = cl_abap_browser=>landscape
                            context_menu = abap_true
                            buttons       = cl_abap_browser=>navigate_html ).

[ABAP] Text-Editor (Textanzeige, Texteingabe) als Popup-Fenster anzeigen

Variante 1 (führt Wordwrap bei Pos. 72 durch)

DATA: it_textlines TYPE STANDARD TABLE OF string.

...

CALL FUNCTION 'TERM_CONTROL_EDIT'
  EXPORTING
    titel          = 'Titel'
    langu          = sy-langu
  TABLES
    textlines      = it_textlines
  EXCEPTIONS
    user_cancelled = 1
    OTHERS         = 2.

IF sy-subrc = 0.

ENDIF.

Variante 2 (maximale Zeilenlänge sind 72 Zeichen)

DATA: it_text TYPE catsxt_longtext_itab.

...

CALL FUNCTION 'CATSXT_SIMPLE_TEXT_EDITOR'
  EXPORTING
    im_title        = 'Title'
    im_display_mode = ' ' " 'X' -> ReadOnly
    im_start_column = 10
    im_start_row    = 10
  CHANGING
    ch_text         = it_text.         " Tabelle mit Text

[ABAP] Inhalt einer internen Tabelle in einem PopUp-Fenster anzeigen

Variante 1 (Rechtsklick im PopUp zeigt Funktionsmenü)

CALL FUNCTION 'POPUP_WITH_TABLE'
  EXPORTING
    endpos_col   = 160
    endpos_row   = 40
    startpos_col = 1
    startpos_row = 1
    titletext    = 'Titel'
*           IMPORTING
*             CHOICE       =
  TABLES
    valuetab     = itab " darf nur eine Spalte beinhalten 
  EXCEPTIONS
    break_off    = 1
    OTHERS       = 2.
IF sy-subrc = 0.

ENDIF.

Variante 2 (Darstellung max. 80 Zeichen breit)

CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'
  EXPORTING
    endpos_col   = 160
    endpos_row   = 40
    startpos_col = 1
    startpos_row = 1
    titletext    = 'Titel'
  tables
    valuetab     = itab " darf nur eine Spalte beinhalten 
  EXCEPTIONS
    break_off    = 1
    OTHERS       = 2.
IF sy-subrc = 0.

ENDIF.