SAP ABAP 顾问(开发工程师)能力模型_企业数字化建设者的博客-CSDN博客目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为3年经验提参考ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977

目标:该内容涉及S/4新语法,用于给R3项目转S/4项目的朋友们提供参考,或者也可以是面试前的复习资料。

VALUE语法 | MOVE-CORRESPONDING语法 | CORRESPONDING语法  | itab[ … ]语法 | FOR语法 | REDUCE语法 | GROUP BY语法 | FELTER语法

 变量 | 工作区 | 返回参数 | 传输参数 | 引用声明 | 指针声明

一 OPEN SQL

1.1 参考SAP官方文档

1.2 代码样例

1.2.1 自动创建内表结构

SELECT SINGLE @ABAP_TRUE INTO @DATA(EXISTS) FROM KNA1 WHERE KUNNR EQ @I_KNA1-KUNNR.

IF EXISTS <> ABAP_TRUE.

ENDIF.

 二 内表操作

主要变化有以下几点: 

1.VALUE  2.MOVE-CORRESPONDING  3.CORRESPOING  4.FOR  5.REDUCE  6.GROUP BY

7.FILTER

2.1 VALUE语法

   结构赋值

     ... VALUE dtype | #(  [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ...

     内表赋值

... VALUE dtype | #( [BASE itab] (  (line1-com1 = dobj1) ( line2 ..) ... ) ...

 "内表不能带表头

       IT_VKORG = VALUE #( KUNNR = E_KNA1-KUNNR ( VKORG = '3000' )

                                                 ( VKORG = '6008' ) ) .

DATA itab TYPE RANGE OF i. 

itab = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 ) 

                                         ( low = 21 high = 30 ) 

                                         ( low = 41 high = 50 ) 

                           option = 'GE' ( low = 61 ) ). 

cl_demo_output=>DISPLAY( itab ).

 2.1 MOVE-CORRESPONDING语法

2.3 CORRESPONDING语法

 

2.4 itab[ … ]语法

… itab[ … ] …

     相当于read table itab ….

 缺点

     如果对应没找到,会抛出CX_SY_ITAB_LINE_NOT_FOUND异常

     系统变量SY-SUBRC不会记录成功与否

改进

     IF line_exists ( itab[…] )

        …..

     ENDIF

     通过这行语法判断行是否查找到

2.5 FOR语法

描述

     加强版本的loop at语法,与REDUCE、VALUE关键字配合使用

语法    

…FOR i = ... [THEN expr]  UNTIL | WHILE  log_exp ...

     …VALUE  itab( FOR i = … [THEN expr]  UNTIL | WHILE  log_exp ... )

     …REDUCE  type( INIT FOR  …. NEXT ….. 

2.6 REDUCE语法

2.7 GROUP BY语法

2.8 FELTER语法

描述

     可以根据指定值(一个)或者指定内表(多个)的值过滤itab并返回itab类型的结果集

语法

FILTER  type(  itab   [EXCEPT]   [IN ftab]   [USING KEY keyname ] 

  WHERE c1 op f1  [AND c2 op f2  [...] ]  ) ...

变式

     FILTER  type( itab …) 对应一个值过滤

     FILTER  type( itab in tab …)对应多个值过滤

其它

     EXCEPT如果不指定则表示满足条件的找出来,如果指定则表示不满足条件的找出来

     WHERE对应过滤的条件,是必须要指定的

三 内嵌声明

主要变化有以下几点:

1.声明符号: DATA(...),再也不需要建立一堆的临时变量了

2.指针声明符:FILED-SYMBOL(…),同上

3.1 变量

OLD        

DATA text TYPE string.

text = `...`.

NEW     

 DATA(text) = `...`.

3.2 工作区

OLD       

 DATA wa like LINE OF itab.

 LOOP AT itab INTO wa.

        ...

 ENDLOOP.

NEW        

LOOP AT itab INTO DATA(wa).

        ...

ENDLOOP.

3.3 返回参数

OLD       

 DATA xml TYPE xstring.

 CALL TRANSFORMATION ... RESULT XML xml.

NEW

CALL TRANSFORMATION ... RESULT XML DATA(xml).

3.4 传输参数

OLD 

DATA a1 TYPE ...

DATA a2 TYPE ...

oref->meth( IMPORTING p1 = a1 IMPORTING p2 = a2 ... )

NEW    

oref->meth( IMPORTING p1 = DATA(a1) IMPORTING p2 = DATA(a2) ... )

3.5 引用声明

OLD

DATA ixml TYPE REF TO if_ixml.

DATA stream_factory TYPE REF TO if_ixml_stream_factory.

DATA document TYPE REF TO if_ixml_document.

ixml = cl_ixml=>create( ).

stream_factory = ixml->create_stream_factory( ).

document = ixml->create_document( ).

NEW

DATA(ixml) = cl_ixml=>create( ).

DATA(stream_factory) = ixml->create_stream_factory( ).

DATA(document) = ixml->create_document( ).

3.6 指针声明

OLD

FIELD-SYMBOL: LIKE LINE OF ITAB.

LOOP AT itab ASSIGNING .

...

ENDLOOP.

NEW

LOOP AT ITAB ASSIGNING FIELD-SYMBOL().

ENDLOOP.

READ TABLE itab assigning field-symbol() ....

鸣谢:感谢查阅,请多多指教,有用请收藏、点赞哦 ! 

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。