需求分析:
1隔箍、具體需求
本《設(shè)計(jì)界面管理訂單》有如下需求:
- 程序執(zhí)行后,顯示初始界面脚乡,在界面中可以輸入訂單號后蜒滩,點(diǎn)擊按鈕進(jìn)行新建、修改每窖、查看和刪除的操作帮掉;
- 在點(diǎn)擊“新建訂單”時,如果輸入的訂單編號在訂單表中已存在窒典,則發(fā)出錯誤提示且停止創(chuàng)建操作蟆炊;否則在訂單維護(hù)界面中維護(hù)訂單的具體信息,包括訂單相關(guān)的員工瀑志、雇員涩搓、物料等信息污秆;
- 在點(diǎn)擊“修改訂單”時,如果輸入的訂單編號在訂單表中不存在昧甘,或輸入的訂單編號在10000~60000范圍良拼,則發(fā)出錯誤提示且停止修改操作;否則打開訂單維護(hù)界面以進(jìn)行更改充边;
- 在點(diǎn)擊“查看訂單”時庸推,如果輸入的訂單編號在訂單表中不存在,則發(fā)出錯誤提示且停止查看操作浇冰;否則打開顯示訂單的詳細(xì)贬媒;
- 在點(diǎn)擊“刪除訂單”時,如果輸入的訂單編號在訂單表中不存在肘习,或輸入的訂單編號在10000~60000范圍际乘,則發(fā)出錯誤提示且停止刪除操作;否則將刪除此訂單編號的記錄及返回提示漂佩;
- 在“新建訂單”和“修改訂單”操作的訂單維護(hù)界面中脖含,如果輸入了數(shù)據(jù)后,還沒點(diǎn)擊“保存”前點(diǎn)擊了“返回”投蝉,則彈出窗口給用戶進(jìn)行確認(rèn)是否保存养葵。
2、開發(fā)分析
要達(dá)成本實(shí)踐目標(biāo)墓拜,將需要使用ABAP的數(shù)據(jù)處理和界面設(shè)計(jì)技術(shù)港柜,程序流程分析如下。
圖9- 34 程序流程
實(shí)踐步驟:
本實(shí)踐可以在ABAP工作臺(SE80)完成所有工作咳榜,也可以通過不同的工具完成不同部分夏醉。
No | 部分 | 說明 | 事務(wù)代碼 |
---|---|---|---|
1 | 建立程序 | 建立本實(shí)踐的程序,設(shè)置程序基本信息涌韩。 | SE38 |
2 | GUI狀態(tài)標(biāo)題設(shè)計(jì) | 設(shè)計(jì)GUI狀態(tài)畔柔,增加相應(yīng)的功能以接受用戶的指令;設(shè)計(jì)GUI標(biāo)題臣樱,以在程序運(yùn)行時顯示在界面的標(biāo)題上靶擦。 | SE41 |
3 | 屏幕設(shè)計(jì) | 根據(jù)實(shí)踐需求設(shè)計(jì)屏幕,并將相關(guān)元素添加到屏幕上雇毫。 | SE51 |
4 | 代碼編寫 | 編寫代碼以進(jìn)行變量定義玄捕、數(shù)據(jù)獲取、輸出數(shù)據(jù)到界面等棚放。 | SE38 |
4.1 | 對象定義 | 定義要使用的變量枚粘,以在程序執(zhí)行過程中計(jì)算和存儲臨時值。 | |
4.2 | 程序初始事件 | 通過START-OF-SELECTION執(zhí)行程序初始事件飘蚯。 | |
4.3 | 屏幕100事件 | 對于屏幕100馍迄,數(shù)據(jù)輸出到屏幕前的處理(PBO事件)福也;以及在用戶點(diǎn)擊按鈕后觸發(fā)相應(yīng)操作(PAI事件)。 | |
4.4 | 屏幕150事件 | 對于屏幕150攀圈,數(shù)據(jù)輸出到屏幕前的處理(PBO事件)暴凑;以及在用戶點(diǎn)擊按鈕后觸發(fā)相應(yīng)操作(PAI事件)。 | |
4.5 | 子程序 | 根據(jù)程序執(zhí)行的過程將部分代碼封裝為主程序赘来,以實(shí)現(xiàn)代碼重用现喳、提高效率和提高代碼可讀性。 |
1撕捍、建立程序
與一般程序的建立過程一樣拿穴,在程序編輯器初始界面輸入程序名稱后點(diǎn)擊創(chuàng)建,設(shè)置類型和狀態(tài)后忧风,將進(jìn)入程序編輯器界面,默認(rèn)代碼如下球凰,不改動內(nèi)容狮腿,保存后退出。
REPORT zu0902_order_trans.
2呕诉、GUI狀態(tài)標(biāo)題設(shè)計(jì)
使用菜單設(shè)計(jì)器(SE41)缘厢,完成GUI狀態(tài)和GUI標(biāo)題的設(shè)計(jì)。
2.1甩挫、建立狀態(tài)
在本實(shí)踐中贴硫,在程序執(zhí)行初始界面和訂單維護(hù)的界面都會有相應(yīng)的工具欄,因此需要建立2個相應(yīng)的GUI狀態(tài)伊者,本步驟可參考實(shí)踐9A1完成英遭。
1)GUI狀態(tài)STAT1
GUI狀態(tài)STAT1的模擬結(jié)果如圖9-35所示,編輯維護(hù)的界面如圖9-36亦渗。
各功能按鈕的定義可參考下表完成挖诸。
2)GUI狀態(tài)STAT2
GUI狀態(tài)STAT1的模擬結(jié)果如圖9-37所示,編輯維護(hù)的界面如圖9-38法精。
各功能按鈕的定義可參考下表完成多律。
2.2、建立標(biāo)題
重新執(zhí)行“菜單設(shè)計(jì)器”搂蜓,在初始界面中選擇“標(biāo)題列表”后點(diǎn)擊創(chuàng)建狼荞,參考圖9-39所示建立2個標(biāo)題。
3帮碰、屏幕設(shè)計(jì)
在本實(shí)踐中相味,有程序執(zhí)行初始界面,還有訂單維護(hù)的界面收毫,因此需要建立2個屏幕攻走,本步驟可參考實(shí)踐9A1殷勘,使用屏幕設(shè)計(jì)器(SE51),完成各個屏幕的設(shè)計(jì)昔搂。
3.1玲销、初始屏幕100
1)屏幕屬性
2)屏幕格式設(shè)計(jì)
點(diǎn)擊工具欄的“格式”后,在顯示“屏幕繪制器”界面中添加屏幕元素摘符,結(jié)果如圖9-41贤斜。
3)屏幕元素清單
點(diǎn)擊工具欄的“元素列表”按鈕,將返回到屏幕定義的“元素清單”中逛裤,此處將列出界面中所包含的元素瘩绒,以及各元素的具體屬性,如圖9-42带族。
4)屏幕邏輯流
點(diǎn)擊“邏輯流”頁簽锁荔,邏輯流的代碼如下。
PROCESS BEFORE OUTPUT.
MODULE status_0100.
*
PROCESS AFTER INPUT.
* MODULE user_command_0100.
MODULE over_and_out_0100 AT EXIT-COMMAND.
CHAIN.
FIELD:ztorders_h-orderid
MODULE validate_input_0100.
ENDCHAIN.
MODULE main_pai_0100.
在如上屏幕100的“邏輯流”PBO事件中蝙砌,包含一個MODULE:status_0100阳堕,此MODULE在屏幕輸出前執(zhí)行,包括設(shè)置GUI择克、標(biāo)題欄恬总、變量初始值等,具體代碼將在后續(xù)屏幕100的PBO事件代碼中實(shí)現(xiàn)肚邢。
PAI事件中壹堰,則包含了3個MODULE:
over_and_out_0100,此MODULE是在屏幕100中點(diǎn)擊“退出”時的響應(yīng)骡湖,并加上AT EXIT-COMMAND關(guān)鍵字贱纠,以在自動字段檢查之前調(diào)用模塊(對應(yīng)按鈕需將類型設(shè)置為E);如果PAI中沒有此MODULE勺鸦,則會點(diǎn)擊“退出”按鈕時還會執(zhí)行后面的語句并巍,如檢查輸入的訂單編號,而這是多余的换途。
validate_input懊渡,此MODULE是繼續(xù)響應(yīng)點(diǎn)擊按鈕,以對輸入的訂單編號進(jìn)行檢查军拟;如點(diǎn)擊“新建”時剃执,輸入的訂單編號在數(shù)據(jù)表中已存在,則返回相應(yīng)提示懈息。
main_pai_0100肾档,此MODULE是繼續(xù)對點(diǎn)擊不同的按鈕進(jìn)行響應(yīng),如點(diǎn)擊新建或修改、顯示怒见,則進(jìn)入屏幕150俗慈,如點(diǎn)擊刪除,則對指定的訂單進(jìn)行刪除遣耍。
CHAIN……ENDCHAIN闺阱,通過CHAIN語句,當(dāng)輸入的編號發(fā)生變化時舵变,則調(diào)用MODULE:validate_input進(jìn)行檢查酣溃。
3.2、訂單明細(xì)屏幕150
1)屏幕屬性
2)屏幕格式設(shè)計(jì)
通過“屏幕繪制器”對屏幕150添加的屏幕元素結(jié)果纪隙,如圖9-44所示赊豌。
3)屏幕元素清單
點(diǎn)擊工具欄的“元素列表”按鈕,將返回到屏幕定義的“元素清單”中绵咱,此處將列出界面中所包含的元素碘饼,以及各元素的具體屬性,如圖9-45麸拄。
4)屏幕邏輯流
點(diǎn)擊“邏輯流”頁簽派昧,邏輯流的代碼如下。
PROCESS BEFORE OUTPUT.
MODULE status_0150.
LOOP AT ordersi_tab INTO ztorders_i WITH CONTROL items.
MODULE items_0150_change_field_attr.
ENDLOOP.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD:ztorders_h-orderid, ztorders_h-customerid,
ztorders_h-employeeid,ztorders_h-orderdate, ztorders_h-shipdate.
MODULE set_change_0150 ON CHAIN-REQUEST.
ENDCHAIN.
LOOP AT ordersi_tab.
MODULE items_0150_modify.
ENDLOOP.
MODULE user_command_0150.
在如上屏幕150的“邏輯流”PBO事件中拢切,包含2個MODULE:
status_0150,此MODULE在屏幕150輸出前執(zhí)行秆吵,包括設(shè)置GUI淮椰、標(biāo)題欄、元素顯示屬性等纳寂,具體代碼將在后續(xù)屏幕150的PBO事件代碼中實(shí)現(xiàn)主穗。
items_0150_change_field_attr,此MODULE是設(shè)置字段的顯示毙芜,通過LOOP AT語句讀取和填充數(shù)據(jù)到屏幕150的界面元素后忽媒,根據(jù)不同的操作(新建、修改腋粥、顯示)設(shè)置元素顯示狀態(tài)(可更改晦雨、只顯示)
PAI事件中,則包含了3個MODULE:
CHAIN……ENDCHAIN隘冲,通過CHAIN語句闹瞧,當(dāng)訂單編號、客戶編號展辞、雇員編號奥邮、訂單日期、交貨日期值發(fā)生變化時,則調(diào)用MODULE:set_change_0150設(shè)置界面元素的顯示狀態(tài)洽腺。
set_change_0150脚粟,此MODULE是通過對變量“data_chg_150”的賦值,設(shè)置界面元素的顯示狀態(tài)(X則為可更改)蘸朋。
items_0150_modify核无,此MODULE結(jié)合LOOP AT語句,調(diào)用子程序在維護(hù)訂單明細(xì)數(shù)據(jù)后度液,更新內(nèi)表數(shù)據(jù)厕宗。
user_command_0150,此MODULE是對點(diǎn)擊不同的按鈕進(jìn)行響應(yīng)堕担。
4已慢、代碼編寫
完成如上步驟后,接下來通過程序編輯器(SE38)對代碼的各部分進(jìn)行編寫霹购。
4.1佑惠、對象定義
根據(jù)程序功能需求,定義的變量齐疙、內(nèi)表膜楷、控件等對象如代碼所列。
*****對象定義*****
CONTROLS: items TYPE TABLEVIEW USING SCREEN 0150."子屏幕150中的列表元素
TABLES:ztorders_h, ztorders_i. "根據(jù)表格定義的內(nèi)表
DATA:ordersi_tab TYPE STANDARD TABLE OF ztorders_i
WITH HEADER LINE, "含工作區(qū)內(nèi)表贞奋,存儲讀取的訂單明細(xì)數(shù)據(jù)
ok_code TYPE sy-ucomm, "用戶指令
save_ok_code TYPE sy-ucomm, "保存用戶指令赌厅,用以設(shè)置界面元素狀態(tài)
strng TYPE string, "在不同操作時顯示的界面標(biāo)題不同
data_chg_150(1) TYPE c, "記錄子屏幕150是否為修改狀態(tài)
answer(1) TYPE c, "記錄數(shù)據(jù)更改退出時用戶的確認(rèn)
prv_orderid TYPE ztorders_h-orderid. "用以記錄已操作過的訂單
4.2、程序初始事件
在程序執(zhí)行后轿塔,通過START-OF-SELECTION語句特愿,調(diào)用屏幕100以進(jìn)行后續(xù)處理。
*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.
CALL SCREEN 0100. "調(diào)用主屏幕100
4.3勾缭、屏幕100事件
1)PBO事件的MODULE
當(dāng)屏幕100被調(diào)用的時候揍障,首先觸發(fā)屏幕的PBO事件,此事件包含的MODULE status_0100的代碼如下俩由。
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* 主屏幕100的初始GUI狀態(tài)標(biāo)題欄及變量設(shè)置
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STAT1'. "設(shè)置屏幕GUI狀態(tài)為STAT1
SET TITLEBAR 'TITLE01'. "設(shè)置屏幕GUI標(biāo)題欄為TITLE01
prv_orderid = ztorders_h-orderid. "清空內(nèi)表前將操作過的訂單號記錄起來
FREE: ztorders_h, "清空變量數(shù)據(jù)以對新的訂單進(jìn)行操作
ordersi_tab.
ok_code = ' '.
data_chg_150 = ' '.
items-lines = 0.
ztorders_h-orderid = prv_orderid. "設(shè)置屏幕中的訂單編號為之前操作的
ENDMODULE.
此代碼首先設(shè)置GUI狀態(tài)為STAT1毒嫡,標(biāo)題為TITLE01;然后使用prv_orderid變量幻梯,記錄上一次操作的訂單編號兜畸;隨后對存儲訂單抬頭信息和訂單明細(xì)數(shù)據(jù)的內(nèi)表、包括點(diǎn)擊的操作礼旅、字段狀態(tài)膳叨、行數(shù)量進(jìn)行重置;最后將前面保存的prv_orderid值賦值給字段ztorders_h-orderid痘系。這樣在操作完成一個訂單后返回初始屏幕時菲嘴,各個變量被重置,同時上一次訂單編號顯示在輸入框龄坪。
2)PAI事件的MODULE
當(dāng)點(diǎn)擊GUI狀態(tài)對應(yīng)圖標(biāo)時妓局,將觸發(fā)屏幕的PAI事件存炮。
over_and_out_0100是PAI后的第一個MODULE,此MODULE是對按鈕“退出”點(diǎn)擊后的響應(yīng):退出程序。
*&---------------------------------------------------------------------*
*& Module OVER_AND_OUT_0100 INPUT
*&---------------------------------------------------------------------*
* 訂單編號輸入及訂單操作前如果點(diǎn)擊退出按鈕倒源,則退出程序
*----------------------------------------------------------------------*
MODULE over_and_out_0100 INPUT.
IF ok_code = 'EXIT'.
LEAVE PROGRAM.
ENDIF.
ENDMODULE.
validate_input_0100通過CHAIN語句胳螟,在輸入的訂單編號更改時觸發(fā)丘薛。此MODULE首先根據(jù)輸入的訂單編號從訂單表ztorders_h中讀取記錄边苹;然后根據(jù)點(diǎn)擊的按鈕和讀取記錄的結(jié)果慕购,給出不同的處理:如果點(diǎn)擊的按鈕為“新建”且讀取到記錄(sy-subrc為0)則輸出錯誤提示,如果點(diǎn)擊的按鈕不是“新建”且沒有讀取到記錄也一樣輸出錯誤提示捶枢。
*&---------------------------------------------------------------------*
*& Module VALIDATE_INPUT_0100 INPUT
*&---------------------------------------------------------------------*
* 輸入訂單編號后胯努,
* 如果此編號已存在且點(diǎn)擊了新建逢防,則發(fā)出錯誤提示
* 如果此編號不存在而點(diǎn)擊的不是新建叶沛,同樣發(fā)出錯誤提示
*----------------------------------------------------------------------*
MODULE validate_input_0100 INPUT.
SELECT SINGLE * FROM ztorders_h INTO ztorders_h WHERE
orderid = ztorders_h-orderid. "根據(jù)輸入的訂單編號從表中讀取記錄
"點(diǎn)擊新建且記錄存在則輸出錯誤提示
IF ok_code = 'NEW' AND sy-subrc = 0.
MESSAGE e091(zu03_mclass01) WITH ztorders_h-orderid.
"點(diǎn)擊的不是新建且記錄不存在則輸出錯誤提示
ELSEIF ok_code <> 'NEW' AND sy-subrc <> 0.
MESSAGE e092(zu03_mclass01) WITH ztorders_h-orderid.
ENDIF.
ENDMODULE.
main_pai_0100則根據(jù)點(diǎn)擊的按鈕進(jìn)行不同的處理。
*&---------------------------------------------------------------------*
*& Module MAIN_PAI_0100 INPUT
*&---------------------------------------------------------------------*
* 主屏幕100的不同按鈕點(diǎn)擊后觸發(fā)事件
*----------------------------------------------------------------------*
MODULE main_pai_0100 INPUT.
save_ok_code = ok_code.
CASE ok_code.
WHEN 'NEW'.
strng = '新建'.
LEAVE TO SCREEN 150.
WHEN 'MODIFY'.
IF ztorders_h-orderid NOT BETWEEN 10000 AND 60000.
PERFORM read_table.
strng = '修改'.
LEAVE TO SCREEN 150.
ELSE. "不能修改編號范圍在10000~60000的訂單
MESSAGE s096(zu03_mclass01) WITH ztorders_h-orderid
DISPLAY LIKE 'E'.
ENDIF.
WHEN 'DISPLAY'.
PERFORM read_table.
strng = '顯示'.
LEAVE TO SCREEN 150.
WHEN 'DELETE'.
IF ztorders_h-orderid NOT BETWEEN 10000 AND 60000.
PERFORM delete_sr USING answer ztorders_h.
IF answer = 1.
DELETE ztorders_h.
DELETE FROM ztorders_i WHERE orderid = ztorders_h-orderid.
MESSAGE s094(zu03_mclass01) WITH ztorders_h-orderid
DISPLAY LIKE 'W'.
ELSE.
MESSAGE s095(zu03_mclass01).
ENDIF.
ELSE. "不能刪除編號范圍在10000~60000的訂單
MESSAGE s096(zu03_mclass01) WITH ztorders_h-orderid
DISPLAY LIKE 'E'.
ENDIF.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
4.4忘朝、屏幕150事件
1)PBO事件的MODULE
當(dāng)屏幕150被調(diào)用的時候灰署,首先觸發(fā)屏幕的PBO事件。
MODULE status_0150中局嘁,首先設(shè)置GUI狀態(tài)為STAT2溉箕,標(biāo)題為TITLE02;然后調(diào)用子程序change_scr_150_prop設(shè)置屏幕元素的顯示屬性悦昵。
*&---------------------------------------------------------------------*
*& Module STATUS_0150 OUTPUT
*&---------------------------------------------------------------------*
* 子屏幕150的初始GUI狀態(tài)標(biāo)題欄及界面元素屬性設(shè)置
*----------------------------------------------------------------------*
MODULE status_0150 OUTPUT.
SET PF-STATUS 'STAT2'. SET TITLEBAR 'TITLE02' WITH ztorders_h-orderid strng.
PERFORM change_scr_150_prop.
ENDMODULE.
MODULE items_0150_change_field_attr是結(jié)合PAI中的LOOP AT語句肴茄,逐行對表格控件的各個單元格設(shè)置顯示屬性。
*&---------------------------------------------------------------------*
*& Module items_0150_change_field_attr OUTPUT
*&---------------------------------------------------------------------*
* 子屏幕150設(shè)置界面表格控件的顯示但指。
*----------------------------------------------------------------------*
MODULE items_0150_change_field_attr OUTPUT.
PERFORM change_scr_150_prop.
ENDMODULE.
2)PAI事件的MODULE
當(dāng)點(diǎn)擊GUI狀態(tài)對應(yīng)圖標(biāo)時寡痰,將觸發(fā)屏幕的PAI事件抗楔。
set_change_0150模塊,將變量data_chg_150賦值為“X”氓癌,由此表示為界面元素為可更改狀態(tài)谓谦。
*&---------------------------------------------------------------------*
*& Module SET_CHANGE_0150 INPUT
*&---------------------------------------------------------------------*
* 子屏幕150設(shè)置界面元素為修改狀態(tài)
*----------------------------------------------------------------------*
MODULE set_change_0150 INPUT.
data_chg_150 = 'X'.
ENDMODULE.
Items_0150_modify模塊,則通過調(diào)用子程序贪婉,在表格控件中的數(shù)據(jù)更改后反粥,更新內(nèi)表的數(shù)據(jù)。
*&---------------------------------------------------------------------*
*& Module ITEMS_0150_MODIFY INPUT
*&---------------------------------------------------------------------*
* 子屏幕150將修改后的表格數(shù)據(jù)填充到表格控件對應(yīng)內(nèi)表
*----------------------------------------------------------------------*
MODULE items_0150_modify INPUT.
PERFORM modify_ordersitem.
ENDMODULE.
user_command_0150模塊則是響應(yīng)不同按鈕點(diǎn)擊后的處理疲迂。
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0150 INPUT
*&---------------------------------------------------------------------*
* 子屏幕150的不同按鈕點(diǎn)擊后觸發(fā)的事件
*----------------------------------------------------------------------*
MODULE user_command_0150 INPUT.
CASE ok_code.
WHEN 'BACK'.
IF data_chg_150 = 'X'.
PERFORM abort_sr USING answer ztorders_h.
IF answer = 1.
LEAVE TO SCREEN 0100.
ENDIF.
ELSE.
LEAVE TO SCREEN 0100.
ENDIF.
WHEN 'SAVE'.
data_chg_150 = ' '.
MODIFY ztorders_h.
MODIFY ztorders_i FROM TABLE ordersi_tab.
IF sy-subrc <> 0.
ENDIF.
MESSAGE s093(zu03_mclass01) WITH ztorders_h-orderid.
ENDCASE.
ENDMODULE.
4.5才顿、子程序
在屏幕事件(包括PBO和PAI)中,多處用到了不同的子程序尤蒿。
其中子程序read_table郑气,是用以根據(jù)屏幕100中輸入的訂單編號,獲得訂單抬頭和訂單行項(xiàng)目的數(shù)據(jù)并分別存儲到內(nèi)表ztorders_h和ordersi_tab中腰池,同時設(shè)置表格控件的行數(shù)量(items-lines)尾组。
*&---------------------------------------------------------------------*
*& FORM read_table
*&---------------------------------------------------------------------*
* 從訂單和訂單明細(xì)表中獲得數(shù)據(jù)填充內(nèi)表以備輸出
*----------------------------------------------------------------------*
FORM read_table.
SELECT SINGLE * FROM ztorders_h INTO ztorders_h WHERE
orderid = ztorders_h-orderid.
ztorders_h-oamount = 0.
SELECT * FROM ztorders_i INTO ordersi_tab WHERE
orderid = ztorders_h-orderid.
ztorders_h-oamount = ztorders_h-oamount + ordersi_tab-oquantity *
ordersi_tab-nprice * ( 1 - ordersi_tab-discount ).
APPEND ordersi_tab TO ordersi_tab.
ENDSELECT.
items-lines = sy-dbcnt.
ENDFORM.
子程序delete_sr,是在點(diǎn)擊“刪除”按鈕后的響應(yīng)示弓,此子程序通過CALL FUNCTION調(diào)用功能函數(shù)“POPUP_TO_CONFIRM”以彈出對話框讳侨,以讓用戶確認(rèn)。
*&---------------------------------------------------------------------*
*& Form DELETE_SR
*&---------------------------------------------------------------------*
* 確定是否對訂單進(jìn)行刪除
*----------------------------------------------------------------------*
* -->P_ANSWER 返回是否刪除奏属,1則刪除
* -->P_ZTORDERS_H 訂單結(jié)構(gòu)體跨跨,根據(jù)訂單編號進(jìn)行判斷
*----------------------------------------------------------------------*
FORM delete_sr USING p_answer
p_ztorders_h TYPE ztorders_h.
DATA: txt TYPE string.
CONCATENATE '是否對編號為' p_ztorders_h-orderid '的訂單進(jìn)行刪除?'
INTO txt.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = '確定是否刪除訂單'
* DIAGNOSE_OBJECT = ' '
text_question = txt
text_button_1 = '刪除'(001)
* ICON_BUTTON_1 = ' '
text_button_2 = '不刪除'(002)
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
IMPORTING
answer = p_answer
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
子程序change_scr_150_prop,則是根據(jù)不同的按鈕操作囱皿,設(shè)置屏幕元素的顯示屬性勇婴。
*&---------------------------------------------------------------------*
*& Form CHANGE_SCR_150_PROP
*&---------------------------------------------------------------------*
* 子屏幕150設(shè)置界面元素的屬性
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM change_scr_150_prop .
LOOP AT SCREEN.
CASE save_ok_code.
WHEN 'DISPLAY'.
screen-input = 0.
WHEN 'MODIFY'.
screen-input = 1.
WHEN 'NEW'.
screen-input = 1.
ENDCASE.
CASE screen-name.
WHEN 'ZTORDERS_H-ORDERID'.
screen-input = 0.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
子程序modify_ordersitem,則是將表格控件的數(shù)據(jù)更新到內(nèi)表ordersi_tab中嘱腥。
*&---------------------------------------------------------------------*
*& Form MODIFY_ORDESITEM
*&---------------------------------------------------------------------*
* 將表格控件包含的數(shù)據(jù)更改后更新到內(nèi)表
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_ordersitem .
ztorders_i-orderid = ztorders_h-orderid.
IF items-current_line <= lines( ordersi_tab ).
MODIFY ordersi_tab FROM ztorders_i INDEX items-current_line.
ELSE.
APPEND ztorders_i TO ordersi_tab.
ENDIF.
ENDFORM.
子程序abort_sr耕渴,跟子程序delete_sr類似,在點(diǎn)擊退出時進(jìn)行確認(rèn)齿兔。
*&---------------------------------------------------------------------*
*& Form ABORT_SR
*&---------------------------------------------------------------------*
* 確定是否退出訂單修改
*----------------------------------------------------------------------*
* -->answr 返回是否退出更改萨螺,1則退出
* -->stru 訂單結(jié)構(gòu)體,根據(jù)訂單編號進(jìn)行判斷
*----------------------------------------------------------------------*
FORM abort_sr USING answr stru TYPE ztorders_h.
DATA txt TYPE string .
CONCATENATE '退出訂單' ztorders_h-orderid '的修改?' INTO txt.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = '退出修改'
* DIAGNOSE_OBJECT = ' '
text_question = txt
text_button_1 = '退出'(001)
* ICON_BUTTON_1 = ' '
text_button_2 = '不退出'(002)
* ICON_BUTTON_2 = ' '
default_button = '2'
display_cancel_button = ' '
* USERDEFINED_F1_HELP = ' '
start_column = 40
start_row = 2
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
IMPORTING
answer = answr
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
將如上各部分代碼合并愧驱,則組成了整個實(shí)踐的程序,完成后對所有內(nèi)容進(jìn)行激活椭盏。