[ABAP] Binärdaten (RAW) mit GZIP komprimieren und Base64 codieren

/iwwrk/cl_mgw_workflow_rt_util

TRY.
* Binärdaten
    DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.
    DATA: lv_xstr_gzip TYPE xstring.

* GZIP komprimieren
    cl_abap_gzip=>compress_binary( EXPORTING raw_in   = lv_xstr
                                   IMPORTING gzip_out = lv_xstr_gzip ).

* Base64 codieren
    DATA(lv_base64_data) = /iwwrk/cl_mgw_workflow_rt_util=>base64_encode( lv_xstr_gzip ).

    WRITE: / lv_base64_data.

  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

SSFC_BASE64_ENCODE

* Binärdaten
DATA: lv_xstr TYPE xstring VALUE '54657374737472696E672066C3BC7220646965204B6F6D7072657373696F6E206D697420475A49502E'.
DATA: lv_xstr_gzip TYPE xstring.

* GZIP komprimieren
cl_abap_gzip=>compress_binary( EXPORTING raw_in   = lv_xstr
                               IMPORTING gzip_out = lv_xstr_gzip ).

DATA(lv_base64_data) = ||.

* Base64 codieren
CALL FUNCTION 'SSFC_BASE64_ENCODE'
  EXPORTING
    bindata                  = lv_xstr_gzip
  IMPORTING
    b64data                  = lv_base64_data
  EXCEPTIONS
    ssf_krn_error            = 1
    ssf_krn_noop             = 2
    ssf_krn_nomemory         = 3
    ssf_krn_opinv            = 4
    ssf_krn_input_data_error = 5
    ssf_krn_invalid_par      = 6
    ssf_krn_invalid_parlen   = 7
    OTHERS                   = 8.
IF sy-subrc = 0.
  WRITE: / lv_base64_data.
ENDIF.

[ABAP] Base64 codierten String in Binärdaten (RAW) konvertieren und mit GZIP dekomprimieren

/iwwrk/cl_mgw_workflow_rt_util

TRY.
* Base64 String welcher GZIP-komprimierte Binärdaten beinhaltet
    DATA(lv_base64_data) = |C0ktLikuKcrMS1dIO7ynSCElM1XBOz+3oCi1uDgzP08hN7NEwT3KM0APAA==|.

* Base64 decodieren
    DATA(lv_xstr_gzip) = /iwwrk/cl_mgw_workflow_rt_util=>base64_decode( lv_base64_data ).

* Binärdaten
    DATA: lv_xstr TYPE xstring.
    cl_abap_gzip=>decompress_binary( EXPORTING gzip_in = lv_xstr_gzip IMPORTING raw_out = lv_xstr ).

    DATA: lv_str TYPE string.

* xstring (binary) -> string (UTF-8)
    DATA(o_conv) = cl_abap_conv_in_ce=>create( input    = lv_xstr
                                               encoding = 'UTF-8' ).
    o_conv->read( IMPORTING data = lv_str ).

    WRITE: / lv_str.

  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

SSFC_BASE64_DECODE

* Base64 String welcher GZIP-komprimierte Binärdaten beinhaltet
DATA(lv_base64_data) = |C0ktLikuKcrMS1dIO7ynSCElM1XBOz+3oCi1uDgzP08hN7NEwT3KM0APAA==|.

* Binärdaten
DATA: lv_xstr TYPE xstring.
DATA: lv_xstr_gzip TYPE xstring.

* Base64 decodieren
CALL FUNCTION 'SSFC_BASE64_DECODE'
  EXPORTING
    b64data                  = lv_base64_data
  IMPORTING
    bindata                  = lv_xstr_gzip
  EXCEPTIONS
    ssf_krn_error            = 1
    ssf_krn_noop             = 2
    ssf_krn_nomemory         = 3
    ssf_krn_opinv            = 4
    ssf_krn_input_data_error = 5
    ssf_krn_invalid_par      = 6
    ssf_krn_invalid_parlen   = 7
    OTHERS                   = 8.

IF sy-subrc = 0.
  cl_abap_gzip=>decompress_binary( EXPORTING gzip_in = lv_xstr_gzip IMPORTING raw_out = lv_xstr ).

  DATA: lv_str TYPE string.

* xstring (binary) -> string (UTF-8)
  DATA(o_conv) = cl_abap_conv_in_ce=>create( input    = lv_xstr
                                             encoding = 'UTF-8' ).
  o_conv->read( IMPORTING data = lv_str ).

  WRITE: / lv_str.
ENDIF.

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