ABAP/ABAP Objects - Inline-Datentyp-Deklarationen

  Entwicklung von und mit ABAP / ABAP Objects   Home  Links  Datenschutz  Impressum

Deklaration von Variablen

Explizite Daten-Deklaration
 
DATA lv_var1 TYPE i.
lv_var1 = 2.
Inline-Daten-Deklaration
 
DATA(lv_var1) = 2.
 
alt
 
DATA lv_var1 TYPE i.
DATA lv_var2 TYPE i.
lv_var1 = 2. lv_var2 = lv_var1.
neu
 
DATA(lv_var1) = 2. DATA(lv_var2) = lv_var1.
 
DATA lv_result TYPE char5.
sample_method(
  EXPORTING iv_input  = iv_test
  IMPORTING iv_result = lv_result ).
sample_method(
  EXPORTING iv_input  = iv_test
  IMPORTING iv_result = DATA(lv_result) ).
 
DATA lv_count TYPE i.
FIND 'l' IN 'Hello World!' MATCH COUNT lv_count.
FIND 'l' IN 'Hello World!' MATCH COUNT DATA(lv_count).
 
DATA lv_char TYPE char LENGTH 17.
lv_char = 'Text vom Typ CHAR'.
DATA(lv_char) = 'Text vom Typ CHAR'.
  "Hinweis: grundsätzlich wird der Datentyp CHAR verwendet
 
DATA lv_string TYPE string.
lv_string = 'Text vom Typ STRING'.
DATA(lv_string) = `Dies ist ein String vom Typ CHAR-Like`.
  "Hinweis: Zuweisung erfolgt mittels ` anstelle von '
 
DATA lv_lines1 TYPE i.
DESCRIBE TABLE lt_itab1 LINES lv_lines1.
DATA(lv_lines1) = LINES(lt_itab1).
 
DATA lv_lines2 TYPE i.
lv_lines2 = LINES(lt_itab2).
DATA(lv_lines2) = LINES(lt_itab2).
 
DATA:
  lo_material TYPE REF TO zcl_material,
  lv_material_type TYPE string,
  lv_material_text TYPE string VALUE 'Boskop',
  lv_material_status TYPE string.
CREATE OBJECT lo_material EXPORTING type = 'Apfel'.
CALL METHOD lo_material->update_properties
  EXPORTING
    update = lv_material_text
  IMPORTING
    model = lv_material_type
    status = lv_material_status.
DATA(lo_material) = NEW zcl_material( type = 'Apfel' ).
DATA(lv_material_text) = 'Boskop'.
lo_material->update_properties(
  EXPORTING update = lv_material_text
  IMPORTING model  = DATA(lv_material_type)
            status = DATA(lv_material_status) ).
 

 

Deklaration einer internen Tabelle

Explizite Daten-Deklaration
 
DATA lt_sflight1 TYPE STANDARD TABLE OF sflight WITH EMPTY KEY.
SELECT * FROM sflight INTO TABLE lt_sflight1.
Inline-Daten-Deklaration
 
SELECT * FROM sflight INTO TABLE @DATA(lt_sflight1).
 
DATA lt_sflight2_tmp LIKE lt_sflight1.
lt_sflight2_tmp = lt_sflight1.
DATA(lt_sflight2_tmp) = lt_sflight1.
 
TYPES:
  BEGIN OF ts_sflight3,
    carrid TYPE sflight-carrid,
    connid TYPE sflight-connid,
    fldate TYPE sflight-fldate,
  END OF ts_sflight3.
DATA lt_sflight3 TYPE STANDARD TABLE OF ts_sflight3 WITH EMPTY KEY.
SELECT carrid connid fldate FROM sflight
  INTO TABLE lt_sflight3.
SELECT carrid, connid, fldate FROM sflight
  INTO TABLE @DATA(lt_sflight3).
 

 

Deklaration einer Workarea einer interne Tabelle

Explizite Daten-Deklaration
 
DATA ls_itab1 LIKE LINE OF lt_itab1.
LOOP AT lt_itab1 INTO ls_itab1.
  "... Verarbeitung
ENDLOOP.
Inline-Daten-Deklaration 
 
LOOP AT lt_itab1 INTO DATA(ls_itab1).
  "... Verarbeitung
ENDLOOP.
 
FIELD-SYMBOLS <ls_itab2> LIKE LINE OF lt_itab2.
LOOP AT lt_itab2 ASSIGNING <ls_itab2>.
  "... Verarbeitung
ENDLOOP.
LOOP AT lt_itab2 ASSIGNING FIELD-SYMBOL(<ls_itab2>).
  "... Verarbeitung
ENDLOOP.
 
DATA ls_itab3 LIKE LINE OF lt_itab3.
READ TABLE lt_itab3 INTO ls_itab3 INDEX 1.
IF sy-subrc EQ 0.
  "... Verarbeitung
ELSE.
  "... Fehlerbehandlung
ENDIF.
READ TABLE lt_itab3 INTO DATA(ls_itab3) INDEX 1.
IF sy-subrc EQ 0.
  "... Verarbeitung
ELSE.
  "... Fehlerbehandlung
ENDIF.
 
FIELD-SYMBOLS <ls_itab4> LIKE LINE OF lt_itab4.
READ TABLE lt_itab4 ASSIGNING <ls_itab4> INDEX 1.
IF sy-subrc EQ 0.
  "... Verarbeitung
ELSE.
  "... Fehlerbehandlung
ENDIF.
READ TABLE lt_itab4 ASSIGNING FIELD-SYMBOL(<ls_itab4>) INDEX 1.
IF sy-subrc EQ 0.
  "... Verarbeitung
ELSE.
  "... Fehlerbehandlung
ENDIF.
 
FIELD-SYMBOLS <ls_itab5> LIKE LINE OF lt_itab5.
READ TABLE lt_itab5 ASSIGNING <ls_itab5> INDEX 1.
IF sy-subrc EQ 0.
  "... Verarbeitung
ELSE.
  "... Fehlerbehandlung
ENDIF.
TRY.
    DATA(ls_itab5) = lt_itab5[ 1 ].
    "... Verarbeitung
  CATCH cx_sy_itab_line_not_found.
    "... Fehlerbehandlung
ENDTRY.
 

 

Bestückung von internen Strukturen und Tabellen

alt
 
TYPES:
  BEGIN OF ts_user,
    user_id TYPE char12,
    user_name TYPE text40,
  END OF ts_user,
  tt_user TYPE STANDARD TABLE OF ts_user WITH EMPTY KEY.
DATA:
  lt_user TYPE tt_user,
  ls_user LIKE LINE OF lt_user.
ls_user-user_id   = 'MEUTIN'.
ls_user-user_name = 'Michael Eutin'.
INSERT ls_user INTO TABLE lt_user.
ls_user-user_id   = 'JDOE'.
ls_user-user_name = 'John Doe'.
INSERT ls_user INTO TABLE lt_user.
ls_user-user_id   = 'GMUSTERMANN'.
ls_user-user_name = 'Gerda Mustermann'.
INSERT ls_user INTO TABLE lt_user.
ls_user-user_id   = 'MEUTIN'.
ls_user-user_name = 'Michael Eutin'.
neu
 
TYPES:
  BEGIN OF ts_user,
    user_id TYPE char12,
    user_name TYPE text40,
  END OF ts_user,
  tt_user TYPE STANDARD TABLE OF ts_user WITH EMPTY KEY.
DATA(ls_user) = VALUE ts_user( user_id   = 'MEUTIN'
                               user_name = 'Michael Eutin' ).
DATA(lt_itab) = VALUE tt_user( ( user_id   = ls_user-user_id
                                 user_name = ls_user-user_name )
                               ( user_id   = 'JDOE'
                                 user_name = 'John Doe' )
                               ( user_id   = 'GMUSTERMANN'
                                 user_name = 'Gerda Mustermann' ) ).
 
DATA:
  lt_range TYPE RANGE OF land1,
  ls_range LIKE LINE OF lt_range.
CLEAR: ls_range, lt_range[].
ls_range-sign   = 'I'.
ls_range-option = 'EQ'.
ls_range-low    = 'DE'.
APPEND ls_range TO lt_range.
ls_range-low    = 'FR'.
APPEND ls_range TO lt_range.
ls_range-low    = 'PL'.
APPEND ls_range TO lt_range.
ls_range-low    = 'UK'.
APPEND ls_range TO lt_range.
DATA lt_range TYPE RANGE OF land1.
lt_range = VALUE #( sign   = 'I'
                    option = 'EQ'
                  ( low    = 'DE' )
                  ( low    = 'FR' )
                  ( low    = 'PL' )
                  ( low    = 'UK' ) ).
 
TYPES:
  BEGIN OF ts_addr,
    street       TYPE string,
    zip_code     TYPE string,
    city         TYPE string,
  END OF ts_addr,
  BEGIN OF ts_customer,
    name          TYPE string,
    address       TYPE ts_addr,
    date_of_birth TYPE datum,
  END OF ts_customer.
DATA:
  ls_addr    TYPE ts_addr,
  ls_customer TYPE ts_customer.
ls_address-street   = 'Gerade Str. 1'
ls_address-zip_code = '12345'.
ls_address-city     = 'Musterstadt'.
ls_customer-name          = 'John Doe'.
ls_customer-address       = ls_address.
ls_customer-date_of_birth = '19000101'.
TYPES:
  BEGIN OF ts_addr,
    street       TYPE string,
    zip_code     TYPE string,
    city         TYPE string,
  END OF ts_addr,
  BEGIN OF ts_customer,
    name          TYPE string,
    address       TYPE ts_addr,
    date_of_birth TYPE datum,
  END OF ts_customer.
DATA(ls_customer) = VALUE ts_customer( name          = 'John Doe'
                                       address       = VALUE #( street   = 'Gerade Str. 1'
                                                                zip_code = '12345'
                                                                city     = 'Musterstadt' )
                                       date_of_birth = '19000101' ).
 

 

Deklarationen in ABAP Objects

Explizite Daten-Deklaration
 
DATA lo_object TYPE REF TO cl_class_instance.
CREATE OBJECT lo_object.
Inline-Daten-Deklaration
 
DATA(lo_object) = NEW cl_class_instance( ).
 

 
DATA:
  lo_material TYPE REF TO zcl_material,
  lv_material_type TYPE string,
  lv_material_text TYPE string VALUE 'Boskop',
  lv_material_status TYPE string.
CREATE OBJECT lo_material EXPORTING type = 'Apfel'.
CALL METHOD lo_material->update_properties
  EXPORTING
    update = lv_material_text
  IMPORTING
    model = lv_material_type
    status = lv_material_status.
DATA(lo_material) = NEW zcl_material( type = 'Apfel' ).
DATA(lv_material_text) = 'Boskop'.
lo_material->update_properties(
  EXPORTING update = lv_material_text
  IMPORTING model  = DATA(lv_material_type)
            status = DATA(lv_material_status) ).
 
DATA:
  lo_material TYPE REF TO zcl_material,
  lv_material_type TYPE string,
  lv_material_text TYPE string VALUE 'Boskop',
  lv_material_status TYPE string.
CREATE OBJECT lo_material EXPORTING type = 'Apfel'.
lo_material->update_properties(
  EXPORTING
    update = lv_material_text
  IMPORTING
    model = lv_material_type
    status = lv_material_status ).
DATA(lo_material) = NEW zcl_material( type = 'Apfel' ).
DATA(lv_material_text) = 'Boskop'.
lo_material->update_properties(
  EXPORTING update = lv_material_text
  IMPORTING model  = DATA(lv_material_type)
            status = DATA(lv_material_status) ).
DATA:
  lt_itab      TYPE STANDARD TABLE OF sflight WITH EMPTY KEY,
  lo_alv_table TYPE REF TO cl_salv_table,
  lo_function  TYPE REF TO cl_salv_functions_list,
  lx_msg       TYPE REF TO cx_salv_msg,
  lx_not_found TYPE REF TO cx_salv_not_found,
  lx_root      TYPE REF TO cx_root.
SELECT * FROM sflight INTO TABLE lt_itab.
TRY.
    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_alv_table
      CHANGING  t_table      = lt_itab ).
    lo_function = lo_alv_table->get_functions( ).
    lo_function->set_all( ).
    lo_alv_table->display( ).
  CATCH cx_salv_msg INTO lx_msg.
    "... Fehlerbehandlung
  CATCH cx_salv_not_found INTO lx_not_found.
    "... Fehlerbehandlung
  CATCH cx_root INTO lx_root.
    "... Fehlerbehandlung
ENDTRY.
DATA:
  lo_alv_table TYPE REF TO cl_salv_table.
SELECT * FROM sflight INTO TABLE @DATA(lt_itab).
TRY.
    cl_salv_table=>factory(
      IMPORTING r_salv_table = lo_alv_table
      CHANGING  t_table      = lt_itab ).
    DATA(lo_function) = lo_alv_table->get_functions( ).
    lo_function->set_all( ).
    lo_alv_table->display( ).
  CATCH cx_salv_msg INTO DATA(lx_msg).
    "... Fehlerbehandlung
  CATCH cx_salv_not_found INTO DATA(lx_not_found).
    "... Fehlerbehandlung
  CATCH cx_root INTO DATA(lx_root).
    "... Fehlerbehandlung
ENDTRY.
 

 

 

Konvertierung CHAR-like nach XSTRING

alt
 
DATA:
  lv_text    TYPE c LENGTH 255,
  lv_string  TYPE string,
  lv_xstring TYPE xstring.
... "irgendwo und irgendwann erfolgt die Bestückung der Variable 'lv_text'
lv_text = ...
...
lv_string = lv_text.
lv_xstring = cl_abap_codepage=>convert_to( source = lv_string ).
neu
 
DATA lv_text TYPE c LENGTH 255.
... "irgendwo und irgendwann erfolgt die Bestückung der Variable 'lv_text'
lv_text = ...
...
DATA(lv_xstring) = cl_abap_codepage=>convert_to( source = CONV #( lv_text ) ).
 

 

REF - Reference Operator

alt
 
TYPES tt_flights TYPE STANDARD TABLE OF sflight WITH EMPTY KEY.
DATA:
  lt_flights TYPE tt_flights,
  lr_flights TYPE REF TO tt_flights.
SELECT * FROM sflight INTO TABLE lt_flights.
GET REFERENCE OF lt_flights INTO lr_flights.
neu
 
SELECT * FROM sflight INTO TABLE @DATA(lt_flights).
DATA(lr_flights) = REF #( lt_flights ).
 

 

REDUCE - Reduction Operator

alt
 
DATA lv_sum TYPE i.
CLEAR lv_sum.
DO 100 TIMES.
  lv_sum = lv_sum + sy-index.
ENDDO.
neu
 
"Ergebnis ohne Angabe eines Datentypen
DATA(lv_sum1) = REDUCE #( INIT sum = 0
                          FOR counter = 1 UNTIL counter > 100
                          NEXT sum += counter ).
 
"Ergebnis mit einem bestimmten Datentyp
DATA(lv_sum2) = REDUCE i( INIT sum = 0
                          FOR counter = 1 UNTIL counter > 100
                          NEXT sum += counter ).
 

 

EXACT - Lossless Operator

alt
 
neu
 
TYPES lv_numc255 TYPE n LENGTH 255.
TRY.
    DATA(lv_number) = EXACT lv_numc255( '4 Apples + 2 Oranges' ).
  CATCH cx_sy_conversion_error INTO DATA(lx_sy_conversion_error).
    MESSAGE lx_sy_conversion_error->get_text( ) TYPE 'E'.
ENDTRY.
 
TRY.
    DATA(lv_exact_result) = EXACT #( 3 * ( 1 / 3 ) ).
  CATCH cx_sy_conversion_rounding INTO DATA(lx_sy_conversion_rounding).
    DATA(lv_rounded_result) = lx_sy_conversion_rounding->value.
ENDTRY.
 

 

CORRESPONDING Operator

alt
 
neu
 
TYPES:
  BEGIN OF ts_base,
    a1 TYPE i,
    a2 TYPE i,
    a3 TYPE char2,
    a4 TYPE char10
,   END OF ts_base,
  BEGIN OF ts_new,
    a1 TYPE i,
    a2 TYPE i,
    b3 TYPE char2,
    b4 TYPE i,
  END OF ts_new.
DATA:
  ls_base TYPE ts_base,
  ls_new  TYPE ts_new,
  lt_base TYPE STANDARD TABLE OF ts_base WITH EMPTY KEY,
  lt_new  TYPE STANDARD TABLE OF ts_new WITH EMPTY KEY,
  lt_dup  TYPE STANDARD TABLE OF ts_base WITH UNIQUE SORTED KEY key1 COMPONENTS a1.
lt_base = VALUE #( ( a1 = 1 a2 = 1 a3 = 'AA' a4 = 'One' )
                   ( a1 = 2 a2 = 4 a3 = 'BB' a4 = 'Two' )
                   ( a1 = 3 a2 = 9 a3 = 'CC' a4 = 'Three' )
                   ( a1 = 4 a2 = 16 a3 = 'DD' a4 = 'Four' )
                   ( a1 = 4 a2 = 16 a3 = 'DD' a4 = 'Four' ) ).
ls_new = CORRESPONDING #( ls_base ).
lt_new = CORRESPONDING #( lt_base ).
lt_new = CORRESPONDING #( lt_base MAPPING b4 = a1 EXCEPT a2 ).
lt_dup = CORRESPONDING #( lt_base DISCARDING DUPLICATES ).
 

 

FILTER Operator

alt
 
neu
 
DATA lt_messages TYPE SORTED TABLE OF t100 WITH NON-UNIQUE KEY sprsl.
SELECT * FROM t100
  WHERE arbgb = 'SABAPDEMOS'
  ORDER BY msgnr
  INTO TABLE @lt_messages.
DATA(lt_messages_en) = FILTER #( messages WHERE sprsl = 'E' ).
DATA(lt_messages_non_en) = FILTER #( messages EXCEPT WHERE sprsl = 'E' ).
 

 

COND und SWITCH - Conditional Operators

alt
 
DATA lv_result TYPE string
IF     sy-msgty = 'S' THEN lv_result = 'Success'.
ELSEIF sy-msgty = 'W' THEN lv_result = 'Warning'.
ELSEIF sy-msgty = 'I' THEN lv_result = 'Information'.
ELSEIF sy-msgty = 'A' THEN lv_result = 'Abort'.
ELSE                       lv_result = 'Undefined' ).
ENDIF.
neu
 
DATA(lv_result) = COND #( WHEN sy-msgty = 'S' THEN 'Success'
                          WHEN sy-msgty = 'W' THEN 'Warning'
                          WHEN sy-msgty = 'I' THEN 'Information'
                          WHEN sy-msgty = 'A' THEN 'Abort'
                          ELSE 'Undefined' ).
 
DATA lv_result TYPE string.
CASE sy-msgty.
  WHEN 'S'.
    lv_result = 'Success'.
  WHEN 'W'.
    lv_result = 'Warning'.
  WHEN 'I'.
    lv_result = 'Information'.
  WHEN 'A'.
    lv_result = 'Abort'.
  WHEN OTHERS.
    lv_result = 'Undefined'.
ENDCASE.
DATA(lv_result) = SWITCH #( sy-msgty
                             WHEN 'S' THEN 'Success'
                             WHEN 'W' THEN 'Warning'
                             WHEN 'I' THEN 'Information'
                             WHEN 'A' THEN 'Abort'
                             ELSE 'Undefined' ).