1. 程式人生 > >(轉)ABAP 7.4 新語法-內嵌生命和內表操作

(轉)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.

勵志美文、《抉擇》

人的一生常處於抉擇之中,如:念哪一間大學?選哪一種職業?娶哪一種女子?……等等傷腦筋的事情。一個人抉擇力的有無,可以顯示其人格成熟與否。

倒是哪些胸無主見的人,不受抉擇之苦。因為逢到需要決定的時候,他總是求詢別人說:"嘿,你看怎麼做?"

大凡能夠成大功業的人,都是抉擇力甚強的人。他知道事之成敗,全在乎已沒有人可以代勞,更沒有人能代你決定。

在抉擇的哪一刻,成敗實已露出端倪。