DATA (宣告)

DATA: Name(1)25 Type C.

Clear: Name(1).

Data定義完之後,用Clear刪除

You use the CLEAR statement to reset any variable data object to the initial value appropriate to its type.

With the DATA statement, the TYPE addition allows you to specify attributes by referencing an existing field defined in the data dictionary (在DATA裏,附加的TYPE功能可讓我們特別定義(宣告)那些我們曾經先前已存在(定義)的attribute)

 

 

 

定義 TYPE

TYPES: SUM_FIELD_TYPE TYPE P DECIMALS 2.

DECIMALS小數點下2位數

如果不訂義TPYE,預設值是C

 

TYPE有三種,Elementary type像上述就是,很單純的文字類定義。另外兩個是Field Stream Type和Table Type,這兩個屬於structured類,拿來定義Table用

TYPES: NAME_TYPE(25) TYPE C.

TYPES: BEGIN OF FLIGHTREC1_TYPE ,

            FLAG TYPE C,

            CARRID TYPE SPFLI-CARRID,

            NAME TYPE NAME_TYPE,

            SUM_FIELD TYPE SUM_FIELD_TYPE,

            END OF FLIGHTREC1_TYPE.

TYPES: FLIGHTREC2_TYPE TYPE FLIGHTREC1_TYPE.

 

 

Constant 固定數值 (又稱常數宣告)

CONSTANTS: PI TYPE P DECIMALS 4 VALUE '3.1415',

BOSS(4) TYPE C VALUE 'Hugo'.

Decimals 4 -- 小數點以下4位

 

 

各類定義(宣告)的方式

summary type.jpg

Database Table 要轉進work area時,也是用TYPE

 

7.各種data type

 

C -- Text 文字,預設值是空白Blank

N -- Numerical character string 連續數字字元串

T -- 時間 HHMMSS 小時.分鐘.秒

D -- 日期 YYYYMMDD 年月日

F -- Floating point number 浮點運算數字

I -- Integer 整數 , 最大到4位數字

P -- Packed number 數字,可含小數點

X -- Hexadecimal 十六進位法

STRING -- Variable-length character field 變動長度的字元

XSTRING -- Variable-length hexadecimal 變動長度的十六進位字元

Dictionary objects and user-defined objects can be referenced using TYPE (SAP的Dictionary 物件,和使用者自訂的物件,可經由TYPE來宣告索引)

 

 

Case 的用法 ,範例

DATA: TEXT1 VALUE 'X',

TEXT2 VALUE 'Y',

TEXT3 VALUE 'Z',

STRING VALUE 'A'.

 

CASE STRING.

WHEN TEXT1.

WRITE: / 'String is', TEXT1.

WHEN TEXT2.

WRITE: / 'String is', TEXT2.

WHEN TEXT3.

WRITE: / 'String is', TEXT3.

WHEN OTHERS.

WRITE: / 'String is not', TEXT1, TEXT2, TEXT3.

ENDCASE.

結果會是:

String is not X Y Z

在這裏,因為STRING的值是A,不符合Text1, Text2, Text3.所以不會顯示X,Y,Z,因此會顯示最後一行的設定

 

 

Do和Loop的用法範例

DO.

WRITE SY-INDEX.

IF SY-INDEX = 3.

EXIT.

ENDIF.

ENDDO.

結果是

 1   2   3

Sy-index是系統內的計數,只有用到loop迴圈功能時才會計算

 

 

 

 

WHILE 當....狀況之用法

DATA: LENGTH TYPE I VALUE 0,

STRL TYPE I VALUE 0,

STRING(30) TYPE C VALUE 'Test String'.

STRL = STRLEN( STRING ).

 

WHILE STRING NE SPACE.

WRITE STRING(1).

LENGTH = SY-INDEX.

SHIFT STRING.

ENDWHILE.

 

WRITE: / 'STRLEN: ', STRL.

WRITE: / 'Length of string:', LENGTH

ENDDO.

結果如下

T e s t S t r i n g

STRLEN: 11

Length of string: 11

這個程式分成兩部份,

一部份是STRLEN,這是系統內定統計字數的程式,STRLEN( STRING ),就是統計STRING字元

另一部份是WHILE的用法,當讀不到空白值的時候,就自進加1,所以"Test String"共有11個字數

 

 

 

SY-SUBRC : 系統執行某指令後,表示執行成功與否的變數,'0' 表示成功.

SY-SUBRC to 0 if assignment to field symbol is possible, otherwise 4

 

 

 

Pamareter 輸入表單

PARAMETERS: in_date type sy-datum,

                       no_days type I  obligatory.

有兩個欄位的表單輸入。type代表類型,sy-datum是日期格式,I是整數。

Obligatory代表一定要輸入,不輸入就不執行

 

 

 

SELECT-OPTIONS 輸入表單 ,有上下值的輸入表單

SELECT-OPTIONS carrid for wa_zd64-carrid.

selection-optioin.jpg

如上圖,找尋在work area中wa_zd64-carrid中的合適的值

如果不希望使用者不填入任何資料,也可以加上以下指令

IF carrid-high = '' OR carrid-low = ''.

MESSAGE i000.

EXIT.

ENDIF.

以上的意思是,如果沒有輸入任何值的話,那麼就顯示i000這個message.以提醒使用者輸入資料。

 

 

 

 

Select 選擇table

SELECT * FROM SBOOK INTO WA_SBOOK WHERE CARRID = CARID AND CONNID = CONID.

ENDSELECT.

從SBOOK選擇全部資料(*全選),送到WA_SBOOK工作區(先前定義的)裏暫存。

條件必需符合CARRID = CARID, 和 CONNID = CONID

 

進階的SELECT用法、計算最小值、最大值、平均數、列數

SELECT CARRID MIN( SEATSOCC ) MAX( SEATSOCC ) AVG( SEATSOCC )

                         MIN( SEATSOCC_B ) MAX( SEATSOCC_B ) AVG( SEATSOCC_B )

                         MIN( SEATSOCC_F ) MAX( SEATSOCC_F ) AVG( SEATSOCC_F )

                         COUNT(*)

                         FROM SFLIGHT INTO WA_SF

                         WHERE CARRID = RD_CID

                         GROUP BY CARRID.

ENDSELECT.

計算MIN最小值、MAX最大值、AVG平均值

COUNT(*)計算總共有幾個

GROUP 群組,用CARRID。如果用到MIN,MAX,AVG,是一定要加的指令

注意:  WHERE CARRID = RD_CID 順序不能顛倒。一定是TABLE裏有的放前面,然後才是自己想要的數值。

 

 

SELECT SINGLE 只選擇第一行。只會選擇符合條件內的第一行而已。不用加 ENDSELECT.

SELECT SINGLE * INTO WA_SPFLI FROM SPFLI WHERE CARRID = 'LH' AND CONNID = ‘0402’.

 

 

Select like 萬用字元的用法 "_"代表一個字元,"%"代表任何(成串)字元

SELECT * FROM SPFLI INTO WA_SPFLI WHERE CITYFROM LIKE '_R%'.

 

 

 

Select 後,Where的條件設定 IN

SELECT * FROM SFLIGHT INTO WA_SFLIGHT WHERE PRICE IN (123, 1000).

當Price等於 123 或(or) 1000 時,就會被選進去

 

 

Dynamic SORT 動態排列,通常和Select結合著用

結合 PARAMETERS screen,讓使用者自己輸入的值(SORT_COL)排列select的值,預設排列是CARRID

PARAMETERS: SORT_COL(10) DEFAULT ‘CARRID’.

SELECT * FROM SPFLI INTO TABLE ALL_FLIGHT.

SORT ALL_FLIGHT BY (SORT_COL).

 

 

 

 

 

Internal Table 內部表單

TYPES: WA_SPFLI TYPE spfli.

DATA: WA_SPFLI type WA_SPFLI.

TYPES: FLIGHTINFOLIST1_TYPE TYPE STANDARD TABLE OF WA_SPFLI.

把原始table "sfpli" 讀入工作區,

加入一個完整的Internal Table "FLIGHTINFOLIST0_TYPE" 。關鍵指令是Standard Table Of

 

定義一個internal table內的field:舉例Flightrec3_type,有欄位FLAG, FLIGHTINFO, NAME, SUME FIELD。然後其中的SFLIGHTINFO裏包含了table "SPFLI"。如下圖:

typetable.jpg

Internal Table是幫助處理Table,因為原始Table可能很大,或不符合我們需要。

雖然是Internal Table,不過系統處理Internal Table的時候, 並非直接處理,也是需要一個working area,把資料暫時放在哪裏做處理,再回傳給Internal Table.

像Append, collect, Insert, Modify, Delete就在work area處理完傳回Internal Table;Read, Loop At, 就是把Internatl Table的東西,丟回work area;Sort, Clear, Refresh就在Internal Table內自己弄就行了。如下圖

interorder.jpg

 

Internal Table指令一覽表

APPEND -- Appends contents of work area at end of internal table

COLLECT -- Inserts cumulative contents of work area into internal table

INSERT -- Inserts contents of work area into a particular table entry (row)

MODIFY -- Overwrites a particular table entry with contents of work area

DELETE -- Deletes a specified entry (row) from the internal table

LOOP AT -- Places entries of an internal table into work area one at a time

READ TABLE -- Places a single, specified internal table entry in a work area

SORT -- Sorts the internal table

CLEAR -- Deletes the work area or the internal table

REFRESH -- Deletes the internal table

FREE -- Releases space in memory previously occupied by internal table

 

 

 

插入 internal table的兩個方法

覆蓋,使用"Into TABLE....."的語法,會整個覆蓋那個FLIGHTINFO_LIST。優點是peformance好。不需要ENDSELECT

SELECT * FROM SFLIGHT INTO TABLE FLIGHTINFO_LIST WHERE CARRID = 'AA'.

插入延伸舊有的 internal table,不會把原來的internal table蓋掉,系統會一行一行讀,然後在尾端加上新的。如下:

SELECT * FROM SFLIGHT INTO WA_SFLIGHT.

MOVE-CORRESPOIDING WA_SFLIGHT TO WA_WFLIGHTINFO_LIST.

APPEND WA_FLIGHTINFO_LIST TO FLIGHTINFO_LIST.

ENDSELECT. 

 

 

 

Sort 排序 。排列internal table的內容時會用到

SORT FLIGHTINFO_LIST BY

      PRICE ASCENDING

      CONNID DESCENDING

      CARRID ASCENDING AS TEXT.

ASCENDING升幂排序(預設)、DESCENDING降幂排序

如果不設定,預設的sort只有下列三種type:P(Packed number), I (Integer) and F (Floating point number)

 

 

 

MDIFY, INSERT, DELETE 三個在Internal Table用到的的改變指令

MODIFY FLIGHTINFO_LIST INDEX SY-TABIX FROM WA_TAB_SFLIGHT.

修正FLIGHTINFO_LIST裏,第index SY-TABIX列裏的值,從工作區WA_TAB_SFLIGHT提出值來"覆蓋"掉。

修改內表值從工作區

INSERT WA_TAB_SFLIGHT INTO FLIGHTINFO_LIST INDEX 5.

在第5列之前,插入一個WA_TAB_SFLIGHT值

插入工作區到內表

DELETE FLIGHTINFO_LIST INDEX 5.

刪除第5列的值

刪除內表的值

 

也可用loop at的方式。The changes always apply to the current table entry (SY-TABIX)

LOOP AT FLIGHTINFO_LIST INTO WA_TAB_SFLIGHT.

INSERT WA_TAB_SLFIGHT ITNO FLIGHTINFO_LIST.

MODIFY FLIGHTINFO_LIST FROM WA_TAB_SFLIGHT.

DELETE FLIGHTINFO_LIST.

ENDLOOP.

 

 

 

SY-TABIX – 內表當前行的索引號。SY-TABIX 的值可以被以下命令修改,但是只適用於索引表(index table)。對於哈希表(Hashed table),這個系統變量的值為空或0。

1. APPEND 將 SY-TABIX 的值置為表最後一行的索引號,也就是說它將等於內表的行數。

2. COLLECT 將 SY-TABIX 的值置為現有或剛剛插入的行的索引號。如果內表為哈希(hashed table)表的話,SY-TABIX 被置為0。

3. LOOP AT 將 SY-TABIX 的值置為每一次循環開始時的當前行索引號,在整個循環的結束時 SY-TABIX 被恢復為它在進入循環之前的值。對於哈希表(hashed table),它的值為0。

4. READ TABLE 將 SY-TABIX 的值置為被讀取的行的索引號。如果使用二分查找(binary search),而沒有找到的話,SY-TABIX 將等於所有行數或行數加1。如果是使用順序查找而沒有找到的話,SY-INDEX 沒有定義。

5. SEARCH <itab> FOR 將 SY-TABIX 的值置為找到要查找字符串所在的行的索引號

 

 

 

 

Deleting an Internal Table 刪除內表

clear.jpg

 

 

 

Describe 描述內表的特性

DESCRIBE TABLE FLIGHTINFO_LIST LINES LINE_COUNT.

LINES是說內表內總共有幾列.

 

 

 

Collect

add the contents of the header line to an existing entry with matching values in all the alphanumeric fields of an internal table.

例子如下:

SELECT CARRID SEATMAX SEATMAX_B SEATMAX_F FROM SPFLIGHT INTO WA_SFLIGHT.

SEATMAX_T= SFLIGHT-SEATMAX + SFLIGHT-SEATMAX_B + SFLIGHT-SEATMAX_F.

COLLECT WA_SFLIGHT INTO ITB_MAXSEAT.

ENDSELECT.

把原始表格(SPFLIGHT)內的三種欄位,輸入到工作區(WA_SFLIGHT),

順便加總出SEATMAX_T的結果。

然後,把工作區內的內容(一共四種欄位),把數字部份加總,然後收集(COLLECT)到internal table裏(ITB_MAXSEAT)。

因此,AA, AS...等只會出現一行,因為已經都已經加總起來了。

如果,我們用的是INSERT WA_SFLIGHT TO ITB_MAXSEAT. 那麼就會出現好幾行的AA,AS,因為它只是插入,不會總合.... 這就是insert和collect的不同。

 

 

 

在Input表單中,舉例parameters,想要顯示非techinaical name,也可以自己輸入想要顯示的字

Goto --> Text Elements --> Selection Texts

Selection Texts 專門指的是parameters和 selection-options的輸入表單

也有以下兩種額外的

Text Symbols 指的像error message的值,可定出許多值001,002, 003....一直下去

List Headings 指的是Oput時的title。不過,我很少用這一項,因為不如直接在Output產生後,再去 System --> List --> List Header 設定的比較準確一點。

 

 

 

輸入欄位表單

PARAMETERS: PAR1 TYPE P OBLIGATORY,

PAR2(3) TYPE C DEFAULT 'ABC’,

PAR3 TYPE SY-DATUM DEFAULT SY-DATUM.

OBLIGATORY 強迫使用者輸入

DEFAULT 預設值

SY-DATUM 今天日期

PAR2(3)括號內的3代表長度,3個字元的意思

 

 

設定Input中的 checkbox, 把B當成default值

PARAMETERS: A AS CHECKBOX,

                      B AS CHECKBOX DEFAULT 'X'.

設定Input中的 Radiobox, 把R2和S3當成default值

PARAMETERS: R1 RADIOBUTTON GROUP RAD1,

                        R2 RADIOBUTTON GROUP RAD1 DEFAULT 'X',

                        R3 RADIOBUTTON GROUP RAD1,

                        S1 RADIOBUTTON GROUP RAD2,

                        S2 RADIOBUTTON GROUP RAD2,

                        S3 RADIOBUTTON GROUP RAD2 DEFAULT 'X'.

 

 

 

加上紅綠燈符號 ICON,案例如下

INCLUDE <ICON>.

.....................................

IF SY-SUBRC <> 0.

WRITE:/ ICON_RED_LIGHT AS ICON.

WRITE:/ 'NO RECORD IS FOUND'(001), RD_CID, 'CARRID'.

EXIT.

ENDIF.

先在某個位置宣告INCLUDE <ICON>

接下來要用的時候,用WRITE指令。 ICON_RED_LIGHT是紅燈。

 

 

 

 

Message 建立 message class

REPORT zdca64j1 MESSAGE-ID zd64.

使用message-id,會建立一個 message class

 

Message型式,有以下幾種(就是在message前面顯示的小圖示)。 The message types and their meanings are as follows:

Message Type            Meaning

a                                 abnormal end

e                                 error

w                                warning

i                                  information

s                                 success

 

The With addition is used with the MESSAGE statement to specify fields whose values will be used in the message.舉例

if sy-subrc <> 0.

message i000 with s_scarrid-low.

exit.

endif.

 

進階Message用法

SELECT-OPTIONS: CARRIER FOR CARRID.

.........

IF SY-SUBRC NE 0.

MESSAGE i000 WITH CARRIER-HIGH CARRIER-LOW.

EXIT.

ENDIF.

接著到 Goto --> Messages,在頁籤的編號000當中,輸入以下

No records found of Airline &1 &2.

那麼,當錯誤訊息產生時,就會出現 驚嘆號(i) + 上列訊息 + &1和&2會依照使用者輸入的值而自動改變

 

 

 

 

 

AUTHORITY-CHECK 的原理,看圖比較清楚

authorize.jpg

SY-SUBRC 的各項說明

0    The user has an authorization containing the required values.

4    The user does not have the required authorization.

24  The check could not successfully be carried out since not all fields of the object were specified.

 

 

 

 

Subroutine 的案例,(看例子比較快),我們會用到FORM和ENDFORM把想要的module框起來,然後再用PERFORM叫出module,一定是先放PERFORM,再放FROM,順序不能顛倒。使用手冊有提到 place all subroutines together at the end of the program.

PERFORM calculate_loss.

...

FORM calculate_loss.

* statements

ENDFORM.

 

本案定了一個module,一個是calculate_loss

 

 

Module的進階。也可以放Internal table的東西。然後可以使用USING或TABLES的指令。

USING + TYPE ; TABLES + STRUCTURE

PERFORM calc_write1 USING TAB[].

PERFORM calc_write2 TABLES TAB.

...

FORM calc_write1 USING TABBODY TYPE TAB[].

DATA: ITAB_LINE TYPE SFLIGHT.

LOOP AT TABBODY INTO ITAB_LINE.

WRITE: / ITAB_LINE-CARRID.

ENDLOOP.

ENDFORM.

 ...

FORM calc_write2 TABLES ITAB STRUCTURE TAB.

LOOP AT ITAB.

WRITE: / TAB-CARRID.

ENDLOOP.

ENDFORM.

在Subroutine,要用USING,一定先要定義TABLES。內部表格pass的時候總是連參數一起pass。

如果是使用TABLES時,請使用STRUCTURE

 

 

Call Function 的基本邏輯

Call Function 'xxxx"

     EXPORTING .........

     IMPORTING .........

     EXCEPTION ........

對主程式而言,export東西出去,但對該function而言,就是imoprt東西進來

相同的,function而言,exporting東西出去 ;該東西對主程式而言就是import東西回來

call function.jpg

 以上是standard function,指的是ABAP內建的function。在這裏找的到Tools --> ABAP Workbenc h--> Development --> Function Builder。不確定時請使用萬元字元*

不過使用者也可以自行建立屬於自己的function。

 

 

 

顯示 logical database

select Tools > ABAP Workbench > Overview > Object Navigator, then click the Edit Object button on the Application Toolbar. Click the More … tab to display its screen, then click the Logical Database option button and type F1S(範例) in its textbox. Click the Display button to display the specified logical database.

 

 

顯示各database內容欄位的詳細內容

Click the Edit Object button on the Application Toolbar. Click the Dictionary tab to display its screen, then click the Database table option button and type SPFLI(範例) in its textbox. Click the Display button to display the specified logical database in the Dictionary: Display Table screen. If desired, click the Full screen on/off button to fill the screen with the structure, as illustrated here(Contents).

databasecontent.jpg

 

 

 

 

RAISE dividebyzero  除數為零的狀況做為例外處理

在上述的程式裏,含有兩部份,一是RAISE,一是dividebyzero

RAISE是ABAP程式裏,當程式跑到中途時,可以啟動(trigger)此例外狀況,情況有四:

1.如果RAISE是在function module裏,它會立即停止程序,並返回主程式,並寫sy-subrc值

2.如果RAISE是在function module裏,但它沒有主程式可返回,那麼它就會停止程序並顯示錯誤訊息

3.如果RAISE是在subprogram裏,系統會自動找尋第在結構中最高的程式執行。如果這個subprogram已經是包含在最高順位的程式裏,那麼就會執行它。

4.如果全部process都鎖死了,那麼就會產生error message,並終止整個程式

dividebyzero 是除數為零的狀況

 

 

 

簡易字體顏色COLOR設定

FORMAT COLOR 7

COLOOR 0 和GUI顏色同

              1 灰藍

              2 青綠

              3 黃

              4 藍綠

              5 綠

              6 紅

              7 橘

用完之後,記得最後加上 FORMAT COLOR OFF. 不然這設定就會一直存在下去.

 

 

 

Skip 3.

斷行,數三行再寫,意思是中間會空兩行

 

 

 

接下來要講的跟互動介面有關係的語法

AT LINE-SELECTION 當使用者點了某一行資料,那就就會彈跳出....

AT LINE-SELECTION

WRITE: TEXT-001, WA_SPFLI-CARRID.

意思是,當user點了某一行兩下,會寫出TEXT-001, WA_SPFLI-CARRID.

 

 

 

 

 

 

表單畫面 SET PF-STATUS

SET PF-STATUS 'DRILLDOWN'.

在GUI裏設定下拉式選單

讓GUI的畫面能得到user操作到code的回應,它會用來控制ABAP裏的功能編碼,這些function code是用來接收按鈕值,選擇值,菜單值....在ABAP parogram裏end user操作的都會用到。

The purpose of the GUI Status is to obtain a function code based on a selection made by the end user. This function code is then used to control processing within the ABAP program. The function code receives a value that indicates a menu selection, button click, or function key press by the end user during the execution of an ABAP program.

 

 

START-OF-SELECTION. 代表以下的語句從選擇之後執行,也有人解釋為點擊按鈕事件

這指令會在邏輯資料庫開始之前執行,這個事件是預設的

The START-OF-SELECTION event is executed before the logical database starts reading the data. This event is set by default.

 

 

Hide area隱藏域是系統運行環境中的一張內表.舉例如下:

WRITE: WA_SPFLI-CARRID, WA_SPFLI-CONNID.

HIDE: WA_SFLI-CARRID,WA_SFLI-CONNID.

教課書的解釋如下:預設值裏,已列出在list的資料是不能再用第二次。但是,HIDE指令可以讓你儲存field內容,針對特定的行存在特定的區域裏,作為日後再使用。

By default, the data of the basic list is not available when you are in the secondary list.
However, the HIDE statement allows you to store field contents for a particular list line
in a special area for later use.

 

其中包含3個字段

1.Line : 標示行號

2.Field name: 字段名

3.Value : 字段的值

 

隱藏域的使用

1.通過 select …endselect 對數據庫進行循環查詢,

2.通過 write 語句, 打印出basic list screen 中的列表信息

3.通過 hide 語句, 將指定的字段,存放到隱藏域中

4.Basic list screen 生成後,用戶雙擊信息行,觸發at line-selection 事件,

5.此時,系統將根據該信息行到隱藏域中查找相應字段

6.最後將該字段返回給對應的全局變量的字段中去, 以便於在下一個detail list 中繼續使用

 

 

AT LINE-SELECTION

一旦點擊該行兩次,那麼就啟動互動事件,會把HIDE area的值,轉到work area裏。比如說接下來要執行Write就會從work area裏寫出來。

AT LINE-SELECTION.

WRITE: WA_SPFLI-CARRID,WA_SPFLI-CONNID.

 

 

CHECK NOT <.....> IS INITIAL

驗證選擇功能,是當使用者雙擊其瑩幕的區域,這個有效驗證就不會啟發。CHECK的意思是驗證user所選的行,然後雙擊之後的行動便會完成。它通常會和預設值(intial value)比較。如果filedl有預設值(intial value),就是當有驗證沒有啟發時,displayed report screen會保持待命狀態給下一次的select.

 

Menu bar上的按鈕設定,在以下的例子,我們設定了exit,back,pick三種按鈕
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'EXIT'(015).
      LEAVE PROGRAM.
WHEN 'BACK'.
     SY-LSIND = 0.
WHEN 'PICK'.
      PERFORM SUB_SECLIST.
ENDCASE.

leave progam 離開程式

SY-LSIND 列表索引列

 

非常聰明的顏色間隔換行案例,用if的句法,當第一行顏色寫完之後,換第二行的顏色,當第二行的顏色寫完之後,又換回第一行的顏色

SELECT * FROM SPFLI INTO WA_SFLI.

IF line_color = 2.

FORMAT COLOR 2.

WRITE: /5 WA_SFLI-CARRID, 10 WA_SFLI-CONNID, 20 WA_SFLI-CITYFROM, 40 WA_SFLI-CITYTO, 60 WA_SFLI-DEPTIME,70 WA_SFLI-ARRTIME.

LINE_COLOR = 4.

ElSE.

FORMAT COLOR 4.

WRITE: /5 WA_SFLI-CARRID, 10 WA_SFLI-CONNID, 20 WA_SFLI-CITYFROM, 40 WA_SFLI-CITYTO, 60 WA_SFLI-DEPTIME,70 WA_SFLI-ARRTIME.

LINE_COLOR = 2.

ENDIF.

 Untitled-1.jpg

 

 

 


Dialog Program Objects 包含以下三個原素

(1)PBO modules, (2)PAI modules, and (3)Screens

 

創建具有sap的Dialog的程式集,第一步:

1.輸入program name, 檔名應該是SAPMZxxx 或 SAPMYxxx,前面的SAMPZ及SAPMY是固定的,後面的xxx才是自己命名的部份。

2. creat object? choose "YES"

3. Make "With TOP INCI" be choosen. Click continue.

4. Top include. Don't change it. Click cntinue.

5. In "Attributes", choose "Application" of Basis. Click Save.

6. Enter Package  "Z64"(my ownself).......etc. then, Save.

7. In Request, input "S02K900134" (my ownself). Click Save

8. 完成

 

在第二步之前,先設定TOP

在Inclues的xxxxTOP,會做DATA的宣告,這時除了一般資料宣告之外,我們也會把OK_CODE宣告進去

DATA OK_CODE TYPE SY-UCOMM.

因為OK_CODE是global data 只要在這個程式裏任一個module都可以用

 

第二步,創建screen

1. 在程式名稱點右鍵,Creat > Screen; 或是Program > Object > Screen

2.PBO和PAI會自動創建

 

第三步,創建PBO和PAI的module

1. 在Flow logic頁籤裏,雙擊module(PBO和PAI)的名字(name),系統會自動彈出視窗尋問是否創建moduel,選yes

2. 系統會自動彈出程式碼,記得要移除程式碼前的星號(*),以啟動它

 

第四步,在screen name(那個有秀出 attriubte的畫面中),上面有個Layout,點下去

1. Layout的設計頁面會跑出, 我用的是WYSIWYG graphical design

2. 有個按鈕 Dict./prog.fields,

3. 輸入想要的table name,把想要的資料庫的資料點選,然後拖進視窗裏

4. 雙擊資料框,通常要更改一下Attribute,我記得如果資料從work area來的,前面要加"WA_"

5. 如果是有兩個以上的screen,裏面的filed是可以直接copy到下一個

 

第五步,PBO

1.回到Flow logic裏,把 "*Module...."裏面前面* 去掉,變成"Module..."

2.再雙擊一下名字,創立PBO的module

3.雙擊GUI Status name ,以創立GUI(操作界面選單)

4.選擇Online statue

5.開始建立Menu bar, the Application Toolbar, Function keys

6.到Screen > Element list頁籤 > General attr. >在最後一行加上 OK_CODE (或F_CODE),這個步驟很重要,忘了加上去程式就跑不動 。OK_CODE意是把程式碼讀入個SAP系統內,包括接下來的PAI moduel都可以用到它。

* 有些空白的地方,在user還沒有填資料的時候,我們會想要填一些預設值,舉例而言,有個欄位aaa,我們想先填一些字進去

IF aaa IS INITIAL.

aaa = 'Initial message display here, please input your data'.

ENDIF.

 

第六步 PAI

1.回到Flow logic裏,雙擊一下名字,創立PAI的module

2.系統會自動用 OK_CODE擷取POI的function。所以PAI run完後,要清理一下這些code function。

   在"WHEN OTHERS",加上CLEAR OK_CODE,清除。最後,通常會用SET SCREEN 0. LEAVE SCREEN.最為結束

 

第七步,建立transaction code 。因為dialog一開始program是由transaction code來呼叫啟動(我們第一個執行程式),所以我們必需建立它

1. 在SAPMZxxx 或 SAPMYxxx, 點右鍵,Create > Transaction

    或是按Shift+F5,選"Edit Objects",指定程式名稱後,創建

    注意,這裏的程式名稱要以"Z"開頭,不然會造成錯誤

2.在"Create Transaction"畫面裏,選 Program and screen (dialog transaction)。如果只是report的話,就選“Program and selection screen (report screen)”

3.完成。之後只要執行這個transaction,整個程式就會開始跑了

 

 

 

 


 

不同Screen或頁籤轉換

1.SET SCREEN <screen-number>. 切換到下一個screen,不會自動再返回

2.CALL SCREEN <screen-number>. 插入一個screen,加上下列程式就會再返回原來的screen,LEAVE SCREEN TO SCREEN 0.

3.LEAVE SCREEN. 不待程式執行完成就離開

4.LEAVE TO SCREEN 

 

 

 

 

arrow
arrow
    全站熱搜

    Chung 發表在 痞客邦 留言(1) 人氣()