[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] Hilfsvariablen mit LET-Ausdruck definieren

LET

  • Verwendung innerhalb von Operatoren NEW, VALUE, CONV, COND, SWITCH, REDUCE, FOR …
  • es konnen inplace Variablen oder Feldsymbole deklariert werden
  • Variablen, die im LET-Ausdruck definiert wurden k?nnen nur innerhalb des jeweiligen Scopes verwendet werden

Variante 1 (Variablendefinition, CONV)

* Carrier
PARAMETERS: p_carrid TYPE scarr-carrid DEFAULT 'LH'.

START-OF-SELECTION.

* Daten holen
  SELECT * FROM scarr INTO TABLE @DATA(it_carr).

  TRY.
* String zusammenbauen
      DATA(lv_carr_name) = CONV string(
* Hilfsvariablen per LET definieren
* ersten Carrier mit Carrid holen, kann Exception CX_SY_ITAB_LINE_NOT_FOUND werfen
                                        LET <c> = it_carr[ carrid = p_carrid ]
                                            dp  = |: |
* Hilfsvariablen verwenden
                                        IN
                                        |{ <c>-carrname }{ dp }{ <c>-url }| ).

      WRITE: / lv_carr_name.

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

Variante 2 (Variablendefinition, COND)

DATA(lv_lang) = COND string(
* Hilfsvariablen per LET definieren
                             LET lang     = cl_abap_syst=>get_language( )
                                 lang_iso = cl_i18n_languages=>sap1_to_sap2( im_lang_sap1 = lang )
* Hilfsvariablen verwenden
                             IN
                             WHEN lang_iso = 'DE' THEN 'Deutsch'
                             WHEN lang_iso = 'EN' THEN 'Englisch'
                             ELSE 'andere Sprache'
                           ).

WRITE: / lv_lang.

Variante 3 (Tabelleneinträge, VALUE)

TYPES: BEGIN OF ty_s_adr,
         id   TYPE i,
         city TYPE string,
       END OF ty_s_adr.

TYPES: ty_it_adr TYPE STANDARD TABLE OF ty_s_adr WITH DEFAULT KEY.

TYPES: BEGIN OF ty_s_person,
         city_id  TYPE i,
         forename TYPE string,
         surename TYPE string,
         age      TYPE i,
       END OF ty_s_person.

TYPES: ty_it_persons TYPE STANDARD TABLE OF ty_s_person WITH DEFAULT KEY.

* Städte
DATA(it_city) = VALUE ty_it_adr(
                                 ( id = 100 city = 'Berlin' )
                                 ( id = 101 city = 'Hamburg' )
                                 ( id = 102 city = 'M?nchen' )
                               ).

* Tabelle mit Personen
DATA(it_persons) = VALUE ty_it_persons(
                                        ( city_id = 100 forename = 'Udo'   surename = 'Lehmann' age = 35 )
                                        ( city_id = 101 forename = 'Erika' surename = 'Müller'  age = 63 )
                                        ( city_id = 102 forename = 'Heinz' surename = 'Schulze' age = 65 )
                                ).

DATA(it_csv) = VALUE stringtab(
* alle Namen durchgehen
                                 FOR <p> IN it_persons INDEX INTO idx
* Hilfsvariablen zusammensetzen
                                   LET name       = |{ <p>-surename }, { <p>-forename }|
                                       city       = it_city[ id = <p>-city_id ]-city
                                       age_string = COND string( WHEN <p>-age > 63 THEN 'Rentner' ELSE 'kein Rentner' )
                                       output     = |{ idx };{ name };{ city };{ age_string }|
* Hilfsvariablen verwenden
                                   IN
* neue Zeile zu Tabelle hinzufügen
                                   ( output )
                               ).

* Anzeige
cl_demo_output=>display( it_csv ).

Variante 4 (CONV)

DATA(lv_i) = CONV i( LET x = 1 IN x ).
WRITE: / lv_i.

Variante 5 (NEW)

DATA(lv_i) = NEW i( LET x = 1 IN x ).
WRITE: / lv_i->*.

[ABAP] LERF – Detaildaten des Erfassungsblatts anzeigen

PARAMETERS: p_sheet TYPE bapiessr-sheet_no.
PARAMETERS: p_long TYPE bapimmpara-selection DEFAULT space.

START-OF-SELECTION.

  DATA: lv_header TYPE bapiessr.
  DATA: it_account_assignment TYPE STANDARD TABLE OF bapieskn WITH DEFAULT KEY.

  DATA: it_services TYPE STANDARD TABLE OF bapiesll WITH DEFAULT KEY.
  DATA: it_srv_accass_values TYPE STANDARD TABLE OF bapieskl WITH DEFAULT KEY.
  DATA: it_return TYPE STANDARD TABLE OF bapireturn1 WITH DEFAULT KEY.
  DATA: it_header_text TYPE STANDARD TABLE OF bapiessrtx WITH DEFAULT KEY.
  DATA: it_services_texts TYPE STANDARD TABLE OF bapieslltx WITH DEFAULT KEY.

  CALL FUNCTION 'BAPI_ENTRYSHEET_GETDETAIL'
    EXPORTING
      entrysheet                    = p_sheet
      long_texts                    = p_long
    IMPORTING
      entrysheet_header             = lv_header
    TABLES
      entrysheet_account_assignment = it_account_assignment
      entrysheet_services           = it_services
      entrysheet_srv_accass_values  = it_srv_accass_values
      return                        = it_return
      entrysheet_header_text        = it_header_text
      entrysheet_services_texts     = it_services_texts.

  cl_demo_output=>write_data( lv_header ).
  cl_demo_output=>write_data( it_account_assignment ).
  cl_demo_output=>write_data( it_services ).
  cl_demo_output=>write_data( it_srv_accass_values ).
  cl_demo_output=>write_data( it_return ).
  cl_demo_output=>write_data( it_header_text ).
  cl_demo_output=>write_data( it_services_texts ).
  cl_demo_output=>display( ).

[ABAP] Code-Vorlagen (ABAP Code Templates)

Im ABAP-Code Editor kann man sich Vorlagen (Templates) definieren: Using Code Templates oder auch berater-wiki.de

ifs (if mit sy-subrc)

IF sy-subrc = 0.
%SurroundedText%  |
ENDIF.

wri

WRITE: / |.

loop (einfacher LOOP it Feldsymbol)

LOOP AT %TABLE NAME% ASSIGNING FIELD-SYMBOL(<e>).
  |
ENDLOOP.

types (Struktur- und Tabellentyp)

TYPES : BEGIN OF ty_s_%TYPE NAME%,
%SurroundedText%          |
        END OF ty_s_%TYPE NAME%.

TYPES: ty_it_%TYPE NAME% TYPE STANDARD TABLE OF ty_s_%TYPE NAME% WITH DEFAULT KEY.

cla (lokale Klasse mit Constructor)

CLASS lcl_%CLASS_NAME% DEFINITION.
  PUBLIC SECTION.

    METHODS: constructor.

    METHODS: set_value
      IMPORTING
        par1 TYPE string.

    METHODS: get_value
      RETURNING VALUE(rv_ret) TYPE i.

  PRIVATE SECTION.
    DATA: gv_data TYPE i.
ENDCLASS.

CLASS lcl_%CLASS_NAME% IMPLEMENTATION.
  METHOD constructor.
  ENDMETHOD.

  METHOD set_value.
    gv_data = par1.
  ENDMETHOD.

  METHOD get_value.
    rv_ret = gv_data.
  ENDMETHOD.
ENDCLASS.

salv (SALV-Table mit Grundeinstellungen)

|
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        = %TABLE NAME% ).
  
* 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( 'Überschrift' ).
    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, Short Text und Medium Text leer lassen für Autosize
    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.
  
    o_salv->display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

rem (Methodensignatur aus Eclipse)

|
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Public Method methodname - Text1
* |                            Text2
* |                            Text3
* +-------------------------------------------------------------------------------------------------+
* | [--->] i_var1  - Text1
* | [--->] i_var2  - Text2
* | [<---] ret_var - Text3
* +--------------------------------------------------------------------------------------</SIGNATURE>

cld (cl_demo_output in Vollbilddarstellung)

* Hier Objekte für die Ausgabe hinzufügen
cl_demo_output=>write_data( | ).

* HTML-Code vom Demo-Output holen
DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.

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