記錄ABAP開發的日常——常用新語法總結


前言:在7.4版本以后,SAP ABAP語言做出了一些調整,讓一些語法書寫起來更加方便快捷,類似於其他語言的語法糖,不過一些稍微老的系統版本還不支持這些新寫法,所以在使用方面主要看個人的習慣了,當然以前的寫法肯定是要會的,這個新的語法作為了解也是可以的,今天就記錄一下目前本人所接觸的一些新語法,當然新語法肯定不止這些,更多的還是需要小伙伴去發掘,話不多說,上代碼。

新語法練習

**********************************************************************
* PROGRAM DETAIL                                                     *
**********************************************************************
* --T-CODE:ZDEMO_NEW_GRAMMAR
* --AUTHOR:秋の夕
* --CREATE DATE:19.12.2021 13:19:28
* --DESCRIBLE:新語法總結練習
**********************************************************************
* EDIT LOG                                                           *
**********************************************************************
* VERSION          DATE              AUTHOR           REMARK
* <DEVK90XXX>     <YYYY/MM/DD>       <...>            <REASON>

REPORT zdemo_new_grammar.
**********************************************************************
* DECLARATIONS                                                       *
**********************************************************************
TABLES:ztdemo.
* 根據數據生成內表
WRITE: / | >----------------------無聲明:根據數據生成內表 -------------------------<|.
SELECT * INTO TABLE @DATA(gt_data) FROM ztdemo.

* 自定義結構
TYPES:BEGIN OF ty_data,
        id       TYPE i,
        name     TYPE char10,
        language TYPE char2,
        age      TYPE i,
      END OF ty_data.

DATA:itab  TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY.

* 添加數據
** ---->單個賦值
itab = VALUE #(
                ( id = '1' name = '張三' language = 'ZH' age = '18' )
                ( id = '2' name = '李四' language = 'ZH' age = '19' )
                ( id = '3' name = '王五' language = 'EN' age = '20' )
                ( id = '4' name = '趙六' language = 'EN' age = '21' )
                ).

WRITE: / | >----------------------單個賦值 -------------------------<|.
LOOP AT itab INTO DATA(wa).
  WRITE:/  |{ wa-id } - { wa-name } - { wa-language } - { wa-age WIDTH = 20 ALIGN = LEFT }|.
ENDLOOP.

** ---->基於內表賦值
WRITE: / | >----------------------基於內表賦值 -------------------------<|.
itab = VALUE #( BASE itab
                ( id = '5' name = '孫七' language = 'EN' age = '23' )
                ( id = '6' name = '蔡九' language = 'ZH' age = '21' )
                ).
LOOP AT itab INTO wa.
  WRITE:/  |{ wa-id }  - { wa-name } - { wa-language } - { wa-age WIDTH = 20 ALIGN = LEFT }|.
ENDLOOP.

*---------------------------------------------內表行數
WRITE: / | >----------------------內表行數 -------------------------<|.
DATA(tlines) = lines( itab ).
WRITE:/ |表行數:{ tlines }|.
*
*---------------------------------------------按照指定索引查找內表數據
WRITE: / | >----------------------按照指定索引查找內表數據 -------------------------<|.
DATA(wa_data1) = itab[ 2 ] .
WRITE:/ |行號為2的姓名:{ wa_data1-name }|.
*
*---------------------------------------------按照指定條件查找內表數據
WRITE: / | >----------------------按照指定條件查找內表數據 -------------------------<|.
DATA(wa_data2) = itab[ name = '張三' ] .
WRITE:/ |姓名為張三的行號: { wa_data2-id } |.
*
WRITE: / | >----------------------判斷是否存在記錄 -------------------------<|.
IF line_exists( itab[ id = 3 age = '20' ] ).
  WRITE:/ |內表存在id為3,年齡為20的記錄| .
ENDIF.

WRITE: / | >----------------------按照語言分組 -------------------------<|.
LOOP AT itab INTO DATA(group) GROUP BY ( language = group-language  ).
  WRITE: / | 分組語言:{ group-language }|.
  LOOP AT GROUP group INTO DATA(ls_data).
    WRITE: / |屬於語言:{ group-language } 的id - { ls_data-id } |.
  ENDLOOP.
ENDLOOP.


WRITE: / | >----------------------條件查詢匯總 -------------------------<|.
SELECT
  vbrp~vgbel,
  vbrp~vgpos,
SUM( CASE WHEN vbrk~vbtyp = 'N' THEN - vbrp~fkimg
          WHEN vbrk~vbtyp = 'M' THEN   vbrp~fkimg END ) AS fkimg
FROM vbrk
INNER JOIN vbrp ON vbrk~vbeln = vbrp~vbeln
GROUP BY vbrp~vgbel ,vbrp~vgpos
INTO TABLE @DATA(lt_vbrp) UP TO 10 ROWS.
LOOP AT lt_vbrp INTO DATA(ls_vbrp).
  WRITE:/ | { ls_vbrp-vgbel }-{ ls_vbrp-vgpos }-{ ls_vbrp-fkimg } |.
ENDLOOP.

效果展示

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM