[ABAP] Umwandlung SAP Codepage / HTTP Encoding Name

Tabellen

TCP00 (SAP Codepage Katalog)
TCP00A (Codepage-Attribute)

Variante 1 (cl_abap_codepage)

TRY.
    DATA(lv_http_codepage) = |utf-8|.
* utf-8 -> 4110
* get sap codepage by external name
    WRITE: / lv_http_codepage, '->', cl_abap_codepage=>sap_codepage( lv_http_codepage ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 2 (cl_i18n_utils)

* Encoding Name in SAP Codepage
DATA(lv_codepage_name) = |UTF-8|.
*H  HTTP-Name
*M  MIME-Name (wird nicht mehr benutzt)
*J  Java-Name (java.io und java.lang APIs)
*W  Microsoft-Windows Codepage-Nummer
*D  Dokumentenreferenz (ID(2),OBJ(60))
*T  Kurzer, internationaler Text
*A  Passende, ASCII-basierte Codepage
*C  RTF: /cpg Wert
*F  RTF: /fcharsetN Wert
*S  Sequenz von Code Units
*G  Enthält Filter Segmente
DATA(lv_kind) = CONV cpattrkind( 'H' ).
DATA(lv_sap_codepage) = CONV cpcodepage( '' ).

* Get a codepage from an encoding name
DATA(rv) = cl_i18n_utils=>get_cp_from_name( EXPORTING im_name = lv_codepage_name
                                                      im_kind = lv_kind
                                            IMPORTING ex_cp   = lv_sap_codepage ).

CASE rv.
* successful
  WHEN 0.
    WRITE: / lv_codepage_name, '->', lv_sap_codepage.
* internal error such as old kernel
  WHEN 1.
* I/O error such as missing TCP00A
  WHEN 8.
* invalid arguments
  WHEN 16.
* not found
  WHEN 128.
ENDCASE.

Variante 3 (cl_abap_codepage)

TRY.
    DATA(lv_sap_codepage) = CONV cpcodepage( '4110' ).
* 4110 -> utf-8
* convert sap codepage to http codepage
    WRITE: / lv_sap_codepage, '->', cl_abap_codepage=>sap_to_http( lv_sap_codepage ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 4 (cl_abap_codepage)

TRY.
    DATA(lv_sap_codepage) = CONV cpcodepage( '4110' ).
* 4110 -> UTF8
* convert sap codepage to JAVA codepage
    WRITE: / lv_sap_codepage, '->', cl_abap_codepage=>sap_to_java( lv_sap_codepage ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Links

[ABAP] Textpatterns in Strings mittles Vergleichsoperator CP (Covers Pattern) suchen

* https://www.berater-wiki.de/Vergleichsoperatoren_Zeichen
* Variante 1 (Wildcard)
DATA(lv_test) = |abc-123|.

IF lv_test CP '*-*'.
  WRITE: / '- in der Mitte.'.
ELSE.
  WRITE: / 'kein - in der Mitte'.
ENDIF.

* Variante 2 (bestimmtes Zeichen)
DATA(lv_test) = |abc-123|.

IF lv_test CP 'ABC-*'.
  WRITE: / 'Schema ABC-XXX'.
ELSE.
  WRITE: / 'kein Schema ABC-XXX'.
ENDIF.

* Variante 3 (bestimmtes Zeichen)
DATA(lv_test) = |abc-1234|.

IF lv_test CP '+++-+++'.
  WRITE: / 'Schema XXX-XXX'.
ELSE.
  WRITE: / 'kein Schema XXX-XXX'.
ENDIF.

[ABAP] Übersetzungen suchen (analog der Transaktion STERM)

**********************************************************************
* Types
**********************************************************************
TYPES : BEGIN OF ty_s_term,
          guid_glos TYPE glossary1-guid_glos,
          langu     TYPE glossary1-langu,
          term      TYPE glossary1-term,
          termuc    TYPE glossary1-termuc,
        END OF ty_s_term.

TYPES: ty_it_term TYPE STANDARD TABLE OF ty_s_term WITH DEFAULT KEY.

DATA: it_terms TYPE ty_it_term.

**********************************************************************
* SALV Events
**********************************************************************
CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
ENDCLASS.

CLASS lcl_events IMPLEMENTATION.
  METHOD on_double_click.
* geklickte Zeile ermitteln
    DATA(lv_row) = it_terms[ row ].

* Übersetzungen zur gleichen GUID holen
    SELECT
      guid_glos,
      langu,
      term,
      termuc
      INTO TABLE @DATA(it_terms2)
      FROM glossary1
      WHERE guid_glos = @lv_row-guid_glos.

* HTML-Code generieren lassen
    DATA(lv_html) = cl_demo_output=>get( it_terms2 ).

* HTML-Code anzeigen
    cl_abap_browser=>show_html( html_string  = lv_html
                                size         = cl_abap_browser=>large
                                format       = cl_abap_browser=>landscape
                                context_menu = abap_true
                                buttons      = cl_abap_browser=>navigate_off ).
  ENDMETHOD.
ENDCLASS.

**********************************************************************
* Selektionsbild
**********************************************************************
PARAMETERS: p_term TYPE glossary1-term DEFAULT 'Buchung*'.

**********************************************************************
* START-OF-SELECTION
**********************************************************************
START-OF-SELECTION.

* Wildcard ersetzen
  DATA(lv_term) = replace( val = p_term sub = '*' with = '%' occ = 0 ).

* Daten aus dem Glossar holen
  SELECT
    guid_glos,
    langu,
    term,
    termuc
    INTO TABLE @it_terms
    FROM glossary1
    WHERE term LIKE @lv_term.

  TRY.
*   SALV-Table
      DATA: o_salv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING
                                r_salv_table   = o_salv
                              CHANGING
                                t_table        = it_terms ).

*   Grundeinstellungen
      o_salv->get_functions( )->set_all( abap_true ).
      o_salv->get_columns( )->set_optimize( abap_true ).
      o_salv->get_display_settings( )->set_list_header( 'Übersetzungen' ).
      o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
      o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

*   Spaltenüberschriften: technischer Name und Beschreibungstexte
      LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
        DATA(o_col) = <c>-r_column.
        o_col->set_short_text( || ).
        o_col->set_medium_text( || ).
        o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
      ENDLOOP.

      SET HANDLER lcl_events=>on_double_click FOR o_salv->get_event( ).

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

[ABAP] String in Messagetexte wandeln/aufteilen

Variante 1 (eigener Klasse, ohne Überschreiben der Systemvariablen)

* Hilfsklasse
CLASS lcl_msg_convert DEFINITION.
  PUBLIC SECTION.
    TYPES: BEGIN OF ty_s_msgtext,
             msgv1 TYPE symsgv,
             msgv2 TYPE symsgv,
             msgv3 TYPE symsgv,
             msgv4 TYPE symsgv,
           END OF ty_s_msgtext.

    CLASS-METHODS: get_msgv_struct
      IMPORTING
                msg_text             TYPE string
      RETURNING VALUE(rv_msgv_stuct) TYPE ty_s_msgtext.
ENDCLASS.

CLASS lcl_msg_convert IMPLEMENTATION.
  METHOD get_msgv_struct.
* String in Struktur wandeln
    rv_msgv_stuct = msg_text.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Struktur für Messagetexte
  DATA(lv_msg_text) = VALUE lcl_msg_convert=>ty_s_msgtext( ).

  TRY.
* künstlich eine Exeption auslösen
      DATA(a) = 1 / 0.
    CATCH cx_root INTO DATA(e_txt).
* Messagelangtext in Message-Struktur übergeben
      lv_msg_text = lcl_msg_convert=>get_msgv_struct( e_txt->get_text( ) ).
  ENDTRY.

* einzelne Messagestrings ausgeben
  WRITE: / lv_msg_text-msgv1, lv_msg_text-msgv2, lv_msg_text-msgv3, lv_msg_text-msgv4.

Variante 2 (CL_MESSAGE_HELPER)

TRY.
    DATA(a) = 1 / 0.
  CATCH cx_root INTO DATA(e_txt).
* Übergabe des Exception-Strings in die Systemvariablen
    cl_message_helper=>set_msg_vars_for_clike( e_txt->get_text( ) ).
ENDTRY.

* Ausgabe der Systemvariablen
WRITE: / sy-msgv1, sy-msgv2, sy-msgv3, sy-msgv4.

Links

[ABAP] Konvertierung von string nach xstring und zurück (UTF-8)

DATA(lv_str) = |Teststring|.

TRY.
* string -> xstring
* default UTF-8
    DATA(lv_xstr) = cl_abap_codepage=>convert_to( source = lv_str ).
* xstring -> string
* default UTF-8
    DATA(lv_dec_str) = cl_abap_codepage=>convert_from( source = lv_xstr ).

    WRITE: / lv_str.
    WRITE: / lv_xstr.
    WRITE: / lv_dec_str.

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

[ABAP] String in Textabelle (SOLITAB) konvertieren

* Teststring bauen
DATA(lv_string) = REDUCE string( INIT s = ||
                                 FOR i = 1 WHILE i < 1001
                                 NEXT s = |{ s }{ i }| ).

* Ausgabetabelle
DATA(it_soli_txt) = VALUE soli_tab( ).

* string -> solitab (Text-Tabelle mit Zeilen a 255 Zeichen)
CALL FUNCTION 'SO_STRING_TO_TAB'
  EXPORTING
    content_str = lv_string
  TABLES
    content_tab = it_soli_txt.

* Ausgabe
cl_demo_output=>display( it_soli_txt ).