1. 程式人生 > >ABAP 指標常用語法

ABAP 指標常用語法

1 、定義指標 :
指標的定義主要有以下語句

定義任意型別的指標,但是不具備欄位結構(僅僅是一個地址)

  FIELD-SYMBOLS <carrid> TYPE ANY.

參考資料庫表定義(這種指標是含有欄位結構的,參考內表同理)

  FIELD-SYMBOLS <sflight> TYPE sflight.
  FIELD-SYMBOLS <sflight> LIKE sflight.

  FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.

動態定義具有欄位結構的指標型別
   
DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,

   dref TYPE REF TO data.
    FIELD-SYMBOLS: <itab> TYPE ANY TABLE.

    CREATE DATA dref TYPE TABLE OF (tabname).
    ASSIGN dref->* TO <itab>.


2 、指標的分配(常用句法)
分配某個變數給指標
   
ASSIGN var TO <field-symbols>

分配結構中的某個欄位的地址給指標
  ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.

分配整個內錶行給指標(指標必須定義為有欄位結構的型別)
  READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.


  LOOP AT itab
ASSIGNING  <field-symbols>.
    ENDLOOP.


分配類的方法或介面給指標
  ASSIGN dref->* TO <field-symbols>.

直接在SQL語句中分配
   
SELECT *

   FROM (tabname) UP TO 20 ROWS
    INTO TABLE <itab>.

主要應用在以下幾個方面:

  1 給一個數據物件分配一個別名,把結構內多層指向的變成一個短長度的

        例<fs>->f 代替  rec1->rec2-r>ec3-......->f

   2 在執行時為一個變長度的字串設定長度和偏移

   3 在確定執行時設定一個指向資料物件的指標

   4 在執行時動態的採取和變更欄位的指標

   5 可以訪問結構體的元件指向內錶行,不用一個單獨的工作區去處理內表

  assign f to <fs>,把欄位f放到了<fs>領域中,這個領域<fs>在執行時指向欄位f的內容,

  這意味著f的內容的所有改變在<fs中可見.宣告這個領域用:fileled-symbols:<fs>.

與其他語言不同:

  1  在passcal語言用P^ ,在c中用*p,abap沒有像這樣的特徵

  2  在passcal和c語言中定義一個指標指向另一個指標,使讓這個指標指向了兩一個指標的物件

      而abap中讓這個領域指向兩一個領域,是這個領域指向了另一個領域的值。

例:

   FIELD -SYMBOLS: <HSL> , <HSL2> .

     

LOOP  AT  IT_TABLE INTO  STR_CLASS.

        STR_ALV-RACCT       = STR_CLASS-RACCT.
        STR_ALV-TXT20_SKAT  = STR_CLASS-TXT20.
        ASSIGN  STR_CLASS-HSL TO  <HSL>.

        DO  16  TIMES .
          POS  = SY-INDEX + 1 .
          ASSIGN  COMPONENT   POS OF  STRUCTURE  <HSL> TO  <HSL2>.
          HSL = HSL + <HSL2>.
        ENDDO .

        IF  STR_CLASS-DRCRK = 'S' .
          STR_ALV-HSL_S = HSL.
        ELSE .
          STR_ALV-HSL_H = HSL.
        ENDIF .

        IF  STR_CLASS-XBILK = 'X' .
          ASSIGN  COMPONENT  1  OF  STRUCTURE  <HSL> TO  <HSL2>.
          STR_ALV-HSLVT = <HSL2>.
          STR_ALV-HSLMT = <HSL2> + STR_ALV-HSL_S - STR_ALV-HSL_H.
        ENDIF .
        COLLECT  STR_ALV INTO  IT_ALV.
        CLEAR  STR_ALV.
        HSL = 0 .
      ENDLOOP .