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

[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] string (Text) nach xstring (Bytes) wandeln

Variante 1 (cl_abap_conv_out_ce)

DATA: lv_str TYPE string VALUE 'Teststring.'.
DATA: lv_xstr TYPE xstring.

* string (UTF-8) -> xstring (binary)
DATA(o_conv_w) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
o_conv_w->write( data = lv_str ).
lv_xstr = o_conv_w->get_buffer( ).

WRITE: / lv_xstr.

Variante 2 (SCMS_STRING_TO_XSTRING)

DATA: lv_str TYPE string VALUE 'Teststring.'.
DATA: lv_xstr TYPE xstring.
  
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING
    text   = lv_str
  IMPORTING
    buffer = lv_xstr.

WRITE: / lv_xstr.

Variante 3 (cl_proxy_service)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr_res) = cl_proxy_service=>cstring2xstring( lv_str ).
WRITE: / lv_xstr_res.

Variante 4 (cl_abap_codepage)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string -> xstring (binary) (UTF-8)
DATA(xstr) = cl_abap_codepage=>convert_to( source   = lv_str
                                           codepage = 'UTF-8' ).
WRITE: / xstr.

Variante 5 (cl_abap_message_digest)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr) = cl_abap_message_digest=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

Variante 6 (cl_abap_hmac)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr) = cl_abap_hmac=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

Variante 7 (cl_clb_tools)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string -> xstring (binary) (UTF-8)
DATA(lv_xstr) = cl_clb_tools=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

[ABAP] Binärdaten (xstring) mit GZIP komprimieren

DATA: lv_str TYPE string VALUE 'Teststring für die Kompression mit GZIP.'.
DATA: lv_xstr TYPE xstring.
DATA: lv_xstr_comp TYPE xstring.

* string (UTF-8) -> xstring (binary)
DATA(o_conv_w) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
o_conv_w->write( data = lv_str ).
lv_xstr = o_conv_w->get_buffer( ).

WRITE: / lv_xstr.

* compress
cl_abap_gzip=>compress_binary( EXPORTING
                                 raw_in   = lv_xstr
                               IMPORTING
                                 gzip_out = lv_xstr_comp ).
WRITE: / lv_xstr_comp.

* uncompress
cl_abap_gzip=>decompress_binary( EXPORTING
                                   gzip_in = lv_xstr_comp
                                 IMPORTING
                                   raw_out = lv_xstr ).

WRITE: / lv_xstr.

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

[ABAP] Gültigkeit einer Postleitzahl prüfen

* Tabelle: T005 (Länder)
* Prüfung von Postleitzahlformat, Regionalcode und Länderschlüssel
CALL FUNCTION 'ADDR_POSTAL_CODE_CHECK'
  EXPORTING
    country                        = 'DE'
    postal_code_city               = '00000'
  EXCEPTIONS
    country_not_valid              = 1
    region_not_valid               = 2
    postal_code_city_not_valid     = 3
    postal_code_po_box_not_valid   = 4
    postal_code_company_not_valid  = 5
    po_box_missing                 = 6
    postal_code_po_box_missing     = 7
    postal_code_missing            = 8
    postal_code_pobox_comp_missing = 9
    po_box_region_not_valid        = 10
    po_box_country_not_valid       = 11
    pobox_and_poboxnum_filled      = 12
    OTHERS                         = 13.

IF sy-subrc NE 0.
  WRITE: / 'PLZ nicht ok.'.
ELSE.
  WRITE: / 'PLZ ok.'.
ENDIF.

[ABAP] Timestamp in Systemdatum (d) und Systemzeit (t) umrechnen

DATA: lv_ts TYPE timestamp.
DATA: lv_date TYPE d.
DATA: lv_time TYPE t.

* Timestamp nach Systemdatum (d) und Systemzeit (t)
GET TIME STAMP FIELD lv_ts.

* TIME ZONE sy-zonlo - lokale Timezone
* TIME ZONE 'UTC'    - UTC-Zeit
CONVERT TIME STAMP lv_ts TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time.

WRITE: / lv_date, lv_time.

* Systemdatum (d) und Systemzeit (t) nach Timestamp
lv_date = sy-datum.
lv_time = sy-uzeit.

* TIME ZONE sy-zonlo - lokale Timezone
* TIME ZONE 'UTC'    - UTC-Zeit
CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_ts TIME ZONE sy-zonlo.

WRITE: / lv_ts TIME ZONE sy-zonlo.

[ABAP] Speicherbelegung eines ABAP-Objektes ermitteln

DATA: it_flight TYPE TABLE OF sflight.

PARAMETER: p_carrid TYPE sflight-carrid.

START-OF-SELECTION.

  SELECT * FROM sflight INTO TABLE @it_flight WHERE carrid = @p_carrid.

  cl_abap_memory_utilities=>get_memory_size_of_object( EXPORTING
                                                         object           = it_flight
                                                       IMPORTING
                                                         bound_size_alloc = DATA(lv_size_alloc)
                                                         bound_size_used  = DATA(lv_size_used) ).

  WRITE: / |{ lv_size_alloc } Bytes alloc.|.
  WRITE: / |{ lv_size_used } Bytes used.|.