Вы находитесь на странице: 1из 18

Научно-техническая конференция

АО БК Софт

Обзор изменений ABAP


с версии 7.40 до 7.50

Илья Чаркин

Май 2019
ABAP Releases

Слайд 2
Основы
• только юникод
с системной кодовой страницей UTF-16

• INT8
от 
-9223372036854775808 до +9223372036854775807.

Слайд 3
Выражения и функции
• IS INSTANCE OF

• CASE TYPE OF

• Object Component Selector After Table


Expressions

• Класс CL_ABAP_CORRESPONDING
Слайд 4
IS INSTANCE OF
До 7.50 С 7.50

TRY. IF typedescr IS INSTANCE OF cl_abap_elemdescr.
    elemdescr ?= typedescr.       DATA(elemdescr) = CAST cl_abap_elemdescr( typedescr ).
    ...       ...
  CATCH cx_sy_move_cast_error.     ELSEIF typedescr IS INSTANCE OF cl_abap_structdescr.
    TRY.       DATA(structdescr) = CAST cl_abap_structdescr( typedescr ).
        structdescr ?= typedescr.       ...
        ...     ELSEIF typedescr IS INSTANCE OF cl_abap_tabledescr.
      CATCH cx_sy_move_cast_error.       DATA(tabledescr) = CAST cl_abap_tabledescr( typedescr ).
        TRY.       ...
            tabledescr ?= typedescr.     ELSE.
            ...       ...
          CATCH cx_sy_move_cast_error.  ENDIF.
            ...
        ENDTRY.
    ENDTRY.
ENDTRY.

Слайд 5
CASE TYPE OF
 DATA(typedescr) = cl_abap_typedescr=>describe_by_data( 
param ).

    CASE TYPE OF typedescr.
      WHEN TYPE cl_abap_elemdescr INTO DATA(elemdescr).
        ...
      WHEN TYPE cl_abap_structdescr INTO DATA(structdescr).
        ...
      WHEN TYPE cl_abap_tabledescr INTO DATA(tabledescr).
        ...
      WHEN OTHERS.
        ...
    ENDCASE.
Слайд 6
Object Component Selector ->
itab[ ... ]->comp ... data(n1) = itab[ 1 ]->value.

itab[ ... ]-comp->comp ... data(n2) = itab[ 2 ]->get( ).

struct-comp[ ... ]->comp ...

itab[ ... ][ ... ]->comp ...

Слайд 7
CL_ABAP_CORRESPONDING
DATA(mapper) = 
  cl_abap_corresponding=>create( 
    source            = struct1 
    destination       = struct2 
    mapping           = VALUE cl_abap_corresponding=>mapping_table( 
      ( level = 0 kind = 1 srcname = 'a1' dstname = 'b3' ) 
      ( level = 0 kind = 1 srcname = 'a3' dstname = 'b1' ) 
      ( level = 0 kind = 3 ) ) ). 

mapper->execute( EXPORTING source      = struct1 
                 CHANGING  destination = struct2 ). 

Слайд 8
Open SQL Release 7.5
• Более высокая выразительность в
выражениях Open SQL благодаря
улучшенному синтаксису
• Новые и улучшенные функции и
выражения SQL, такие как CONCAT,
LPAD, REPLACE, расширенный
COALESCE
• Поддержка UNION / UNION ALL
• Подзапросы как источник данных
INSERT
• Доступ к глобальным временным
таблицам

Слайд 9
HOST expressions
… @( abap_expression ) …

SELECT carrid, connid, cityfrom, cityto
FROM spfli
WHERE carrid =
@( VALUE spfli-carrid( carriers[ KEY name
                                          carrname = name ]-carrid
                                          OPTIONAL ) )
INTO TABLE @DATA(result).

Слайд 10
Expressions SQL
SELECT carrid, connid, fldate, seatsmax, seatsocc,
       seatsmax – seatsocc AS seatsfree
       FROM sflight
       WHERE seatsmax – seatsocc > @( meth( ) )
       INTO TABLE @DATA(result).

ROUND , CONCAT , LPAD , LENGTH , 
REPLACE , RIGHT , RTRIM , SUBSTRING .

Слайд 11
SELECT UNION
До 7.5 С 7.5

DATA prog_range TYPE RANGE OF trdir-name. DATA prog_range TYPE RANGE OF trdir-name.
 
SELECT 'I' AS sign, 'EQ' AS option,  SELECT 'I' AS sign, 'EQ' AS option, obj_name AS low, ' ' AS high
obj_name AS low, ' ' AS high        FROM tadir
        FROM tadir        WHERE pgmid = 'R3TR' AND object = 'PROG' AND devclass = 
        WHERE pgmid = 'R3TR' AND object = 'PROG' AND devclass  @devclass
= @devclass
        INTO TABLE @prog_range. UNION
 
SELECT 'I' AS sign, 'EQ' AS option, 
SELECT 'I' AS sign, 'EQ' AS option,  'SAPL' && obj_name AS low, ' ' AS high
'SAPL' && obj_name AS low, ' ' AS high        FROM tadir
        FROM tadir        WHERE pgmid = 'R3TR' AND object = 'FUGR' AND devclass = 
        WHERE pgmid = 'R3TR' AND object = 'FUGR' AND devclass  @devclass
= @devclass        INTO TABLE @prog_range.
        APPENDING TABLE @prog_range.

Слайд 12
Подзапросы как источник
данных INSERT
INSERT demo_sumdist_agg FROM
  ( SELECT
      FROM scarr AS s
        INNER JOIN spfli AS p ON s~carrid = p~carrid
      FIELDS s~carrname,
             p~distid,
             SUM( p~distance ) AS sum_distance
      GROUP BY s~mandt, s~carrname, p~distid ).

Слайд 13
Глобальные временные
таблицы (GTTs)

Слайд 14
Динамические RFC-адреса
Класс cl_dynamic_destination

DATA(dest) =
 cl_dynamic_destination=>create_rfc_destination(
  logon_client  = …
  logon_user   = …
  logon_language = …
  sid      = …
  server     = …
  group     = …
  … ).
 
CALL FUNCTION ‘DEMO_RFM_PARAMETERS’
   DESTINATION dest
   EXPORTING …

Слайд 15
Converting Messages into
Exceptions
meth( EXCEPTIONS exception = 4 ).

IF sy-subrc = 4.
  RAISE EXCEPTION TYPE cx_demo_dyn_t100
    MESSAGE ID    sy-msgid
            TYPE   sy-msgty
            NUMBER sy-msgno
            WITH   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Слайд 16
Вопросы?
Более подробная информация есть в материалах SAP:

https://blogs.sap.com/2015/11/27/abap-language-news-for-release-75
0
/

https://
help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/index.htm?fi
le=abennews-750.htm

Слайд 17
Спасибо за внимание!

Слайд 18

Оценить