(轉)ABAP 7.4 新語法-內嵌生命和內表操作
1.內嵌宣告
2.內表操作
3.opensql
*&---------------------------------------------------------------------*
1. 內嵌宣告
1)宣告符號: DATA(...)
再也不需要建立一堆的臨時變量了
2)指標宣告符:FILED-SYMBOL(…)
*&---------------------------------------------------------------------*
7.40之前-變數
DATA text TYPE string. text = `...`.
7.40之後-變數
DATA(text) = `...`.
*&---------------------------------------------------------------------*
7.40之前-工作區
DATA wa like LINE OF itab. LOOP AT itab INTO wa. ... ENDLOOP.
7.40之後-工作區
LOOP AT itab INTO DATA(wa). ... ENDLOOP.
*&---------------------------------------------------------------------*
7.40之前-返回引數
DATA xml TYPE xstring. CALL TRANSFORMATION ... RESULT XML xml.
7.40之後-返回引數
CALL TRANSFORMATION ... RESULT XML DATA(xml).
*&---------------------------------------------------------------------*
7.40之前-傳輸引數
DATA a1 TYPE ... DATA a2 TYPE ... oref->meth( IMPORTING p1 = a1 IMPORTING p2 = a2 ... )
7.40之後-傳輸引數
oref->meth( IMPORTING p1 = DATA(a1) IMPORTING p2 = DATA(a2) ... )
*&---------------------------------------------------------------------*
7.40之前-引用宣告
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( ).
7.40之後-引用宣告
DATA(ixml) = cl_ixml=>create( ). DATA(stream_factory) = ixml->create_stream_factory( ). DATA(document) = ixml->create_document( ).
*&---------------------------------------------------------------------*
740之前-指標宣告
FIELD-SYMBOL:<LFS_TAB> LIKE LINE OF ITAB. LOOP AT itab ASSIGNING <LFS_TAB>. ... ENDLOOP.
740之後-指標宣告
LOOP AT ITAB ASSIGNING FIELD-SYMBOL(<LFS_TAB>). … ENDLOOP. READ TABLE itab assigning field-symbol(<line2>) ....
2. 內表操作
- VALUE
- MOVE-CORRESPONDING
- CORRESPOING
- FOR
- REDUCE
- GROUP BY
- FILTER
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 ).
MOVE-CORRESPONDING語法:
CORRESPONDING語法:
itab[ … ]語法
… itab[ … ] …
相當於read table itab ….
u缺點
如果對應沒找到,會丟擲CX_SY_ITAB_LINE_NOT_FOUND異常
系統變數SY-SUBRC不會記錄成功與否
u改進
IF line_exists ( itab[…] )
…..
ENDIF
通過這行語法判斷行是否查詢到
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 …..
REDUCE語法
GROUP BY語法
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對應過濾的條件,是必須要指定的
3. OPEN SQL
SELECT SINGLE @ABAP_TRUE INTO @DATA(EXISTS) FROM KNA1 WHERE KUNNR EQ @I_KNA1-KUNNR. IF EXISTS <> ABAP_TRUE. ENDIF.
勵志美文、《抉擇》
人的一生常處於抉擇之中,如:念哪一間大學?選哪一種職業?娶哪一種女子?……等等傷腦筋的事情。一個人抉擇力的有無,可以顯示其人格成熟與否。
倒是哪些胸無主見的人,不受抉擇之苦。因為逢到需要決定的時候,他總是求詢別人說:"嘿,你看怎麼做?"
大凡能夠成大功業的人,都是抉擇力甚強的人。他知道事之成敗,全在乎已沒有人可以代勞,更沒有人能代你決定。
在抉擇的哪一刻,成敗實已露出端倪。