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

[ABAP] Eine Transaktion in einem neuen Fenster (Task) aufrufen

DATA: it_params TYPE STANDARD TABLE OF tpara.

START-OF-SELECTION.
* Parameter für die Transaktion
  it_params = VALUE #( ( paramid = 'BUK' partext = '0001' )
                       ( paramid = 'BLN' partext = '12345678' )
                       ( paramid = 'GJR' partext = '2016' ) ).

* RFC-Aufruf für Transaktion FB03 in neuem Task
  CALL FUNCTION 'CC_CALL_TRANSACTION_NEW_TASK' STARTING NEW TASK 'FB03_TASK' DESTINATION 'NONE'
    EXPORTING
      transaction           = 'FB03'
      skip_first_screen     = abap_false
    TABLES
      paramtab              = it_params
    EXCEPTIONS
      communication_failure = 97
      system_failure        = 98
      OTHERS                = 99.

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.