[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.

[ABAP] Auswahl-PopUp-Fenster anzeigen

DATA: it_sel TYPE STANDARD TABLE OF spopli.

it_sel = VALUE #( ( inactive = '' selflag = ' ' varoption = 'Auswahl 1' )
                  ( inactive = '' selflag = 'X' varoption = 'Auswahl 2' )
                  ( inactive = 'X' selflag = ' ' varoption = 'Auswahl 3' )
                  ( inactive = '' selflag = 'Y' varoption = 'Auswahl 4' ) ).

CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
  EXPORTING
    i_title               = 'Bitte Einträge markieren!'
    i_selection           = abap_true
    i_zebra               = abap_true
    i_screen_start_column = 1
    i_screen_start_line   = 1
    i_screen_end_column   = 80
    i_screen_end_line     = 10
    i_checkbox_fieldname  = 'SELFLAG'
    i_tabname             = 'IT_SEL'   " wird im Zusammenhang mit dem Strukturnamen zur Erzeugung des internen Feldkatalogs gebraucht
    i_structure_name      = 'SPOPLI'   " wenn Struktur übergeben, erzeugt der FB selber einen Feldkatalog
  TABLES
    t_outtab              = it_sel
  EXCEPTIONS
    program_error         = 1
    OTHERS                = 2.

IF sy-subrc = 0.
  LOOP AT it_sel ASSIGNING FIELD-SYMBOL(<fs_sel>) WHERE selflag = abap_true.
    WRITE: / <fs_sel>-varoption.
  ENDLOOP.
ENDIF.

[ABAP] Base64 Encoding / Decoding

Variante 1 (cl_http_utility)

DATA: lv_bas64enc TYPE string VALUE 'Teststring'.
DATA: lv_base64dec TYPE string.

WRITE: / 'Plain:', lv_bas64enc.

cl_http_utility=>encode_base64( EXPORTING
                                  unencoded = lv_bas64enc
                                RECEIVING
                                  encoded   = lv_bas64enc ).

WRITE: / 'Base64 enc:', lv_bas64enc.

cl_http_utility=>decode_base64( EXPORTING
                                  encoded = lv_bas64enc
                                RECEIVING
                                  decoded = lv_base64dec ).

WRITE: / 'Base64 dec:', lv_base64dec.

Variante 2 (cl_hard_wired_encryptor)

DATA: text TYPE string VALUE 'TestString.'.

START-OF-SELECTION.

  WRITE: / text.

  DATA(o_base64) = NEW cl_hard_wired_encryptor( ).

  DATA(enc_string) = o_base64->encrypt_string2string( text ).
  WRITE: / 'Base64 encrypt_string2string: ', enc_string.

  DATA(dec_string) = o_base64->decrypt_string2string( enc_string ).
  WRITE: / 'Base64 decrypt_string2string: ', dec_string.

  DATA(enc_xstring) = o_base64->encrypt_string2bytes( dec_string ).
  WRITE: / 'Base64 encrypt_string2bytes:  ', enc_xstring.

  DATA(enc_bytes) = o_base64->encrypt_bytes2bytes( enc_xstring ).
  WRITE: / 'Base64 encrypt_bytes2bytes:   ', enc_bytes.

  DATA(dec_bytes) = o_base64->decrypt_bytes2bytes( enc_bytes ).
  WRITE: / 'Base64 decrypt_bytes2bytes:   ', dec_bytes.

  DATA(dec_string2) = o_base64->decrypt_bytes2string( dec_bytes ).
  WRITE: / 'Base64 decrypt_bytes2string:  ', dec_string2.

Links

[ABAP] MD5, SHA1, SHA256, SHA384, SHA512 HASH-Summen berechnen

Variante 1 (Strings)

* MD5, SHA1, SHA256, SHA384, SHA512
DATA(lv_algo) = |MD5|.
* zu kodierende String-Daten
DATA(lv_data) = |Teststring|.

* Hash-Wert als Hex-Encoded String
DATA: lv_hashstring TYPE string.
* Hash-Wert binär als XString
DATA: lv_hashxstring TYPE xstring.
* Hash-Wert als Base64-Encoded String
DATA: lv_hashb64string TYPE string.

TRY.
* Generische Hash-Funktion (Char-Input)
    cl_abap_message_digest=>calculate_hash_for_char( EXPORTING
                                                       if_algorithm     = lv_algo
                                                       if_data          = lv_data
                                                     IMPORTING
                                                       ef_hashstring    = lv_hashstring
                                                       ef_hashxstring   = lv_hashxstring
                                                       ef_hashb64string = lv_hashb64string ).
    cl_demo_output=>write_data( lv_algo ).
    cl_demo_output=>write_data( lv_data ).
    cl_demo_output=>write_data( lv_hashstring ).
    cl_demo_output=>write_data( lv_hashxstring ).
    cl_demo_output=>write_data( lv_hashb64string ).
    cl_demo_output=>display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 2 (Bytefolgen / RAW)

* MD5, SHA1, SHA256, SHA384, SHA512
DATA(lv_algo) = |MD5|.
* zu kodierende String-Daten
DATA(lv_data) = |Teststring|.
* zu kodierende String-Daten als XSTRING
DATA(lv_datax) = cl_abap_message_digest=>string_to_xstring( lv_data ).

* Hash-Wert als Hex-Encoded String
DATA: lv_hashstring TYPE string.
* Hash-Wert binär als XString
DATA: lv_hashxstring TYPE xstring.
* Hash-Wert als Base64-Encoded String
DATA: lv_hashb64string TYPE string.

TRY.
* Generische Hash-Funktion (XString)
    cl_abap_message_digest=>calculate_hash_for_raw( EXPORTING
                                                      if_algorithm     = lv_algo
                                                      if_data          = lv_datax
                                                    IMPORTING
                                                      ef_hashstring    = lv_hashstring
                                                      ef_hashxstring   = lv_hashxstring
                                                      ef_hashb64string = lv_hashb64string ).
    cl_demo_output=>write_data( lv_algo ).
    cl_demo_output=>write_data( lv_data ).
    cl_demo_output=>write_data( lv_datax ).
    cl_demo_output=>write_data( lv_hashstring ).
    cl_demo_output=>write_data( lv_hashxstring ).
    cl_demo_output=>write_data( lv_hashb64string ).
    cl_demo_output=>display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[ABAP] Strings mit GZIP komprimieren / dekomprimieren

DATA: l_xml TYPE string.
DATA: l_gzip TYPE xstring.
DATA: l_ungzip TYPE string.

DATA: ti_t100 TYPE STANDARD TABLE OF t100.

* Daten abfragen
SELECT * FROM t100 INTO TABLE ti_t100 UP TO 1000 ROWS.

* interne Tabelle in XML-String wandeln
CALL TRANSFORMATION id SOURCE data_node = ti_t100 RESULT XML l_xml.

WRITE: / |string unkomprimiert: { l_xml }|.

* String mit GZIP komprimieren
cl_abap_gzip=>compress_text( EXPORTING
                               text_in = l_xml
                               compress_level = 9 " 0...9
                             IMPORTING
                               gzip_out = l_gzip ).

WRITE: / |xstring GZIP komprimiert: { l_gzip }|.

* komprimierten String mit GZIP dekomprimieren
cl_abap_gzip=>decompress_text( EXPORTING
                                 gzip_in = l_gzip
                               IMPORTING
                                 text_out = l_ungzip ).
                                 
WRITE: / |string dekomprimiert: { l_ungzip }|.