本文提供了在 WDA 程序中使用選擇選項(Select Option)的分步操作指南蜈项,前提是您已學(xué)習(xí)了《WDA入門教程Ⅰ:Web Dynpro for ABAP 入門》一文芹关,并非常了解WDA的基礎(chǔ)知識。
目錄
- 創(chuàng)建 WDA 對象
- 定義使用的組件
- 編輯視圖
- 定義屬性
- 方法實施
- 將視圖嵌入窗口
- 創(chuàng)建應(yīng)用并測試
1. 創(chuàng)建 WDA 對象
打開事務(wù)碼 SE80紧卒,在左側(cè)對象清單中選擇“Web Dynpro 組件/接口”侥衬,在下方輸入“Z_TUTORIAL2”并回車,系統(tǒng)將詢問你是否創(chuàng)建常侦,單擊“是”浇冰。
在彈出的對話框中輸入描述如下,回車聋亡。在彈出的包選擇本地對象肘习。
結(jié)果如下,保存并激活所有對象坡倔。
2. 定義使用的組件
雙擊左側(cè)的組件接口漂佩,在右邊的窗口新建如下組件。
3. 編輯視圖
在已創(chuàng)建的 MAIN 視圖屬性(Properties)選項卡罪塔,點擊新建按鈕投蝉,添加兩個 SELECT_OPTIONS 組件。
來到 Context(上下文)選項卡征堪,為 CONTEXT 添加一個節(jié)點 FLIGHTS 瘩缆, Cardinality 選擇“0...N”,回車佃蚜。
在創(chuàng)建好的 FLIGHTS 節(jié)點右鍵選擇“Create Using the Wizard”->“Attributes from Commonents of Structure”庸娱。輸入 Structure Name 為“SFLIGHT”着绊,回車,選擇除 MANDT 之外的所有字段熟尉,回車归露。
結(jié)果如下圖。
單擊 Layout 選項卡斤儿,添加一個名稱為“View_Container” 的元素剧包,類型為“VIEW_CONTAINER_UIELEMENT”。
再添加一個名為“BUTTON1”的按鈕往果,并為其添加一個 Action 事件“CONTINUE”疆液。
最后,創(chuàng)建一個名為“FLIGHTTABLE”的表元素棚放。
右鍵 FLIGHTTABLE枚粘,選擇“Create Binding”,將表綁定到視圖上文飘蚯。
結(jié)果如圖馍迄。
4. 定義屬性
單擊 Attributes 選項卡,添加兩個屬性局骤,分別為:
- M_HANDLER攀圈,類型:IF_WD_SELECT_OPTIONS
- M_WD_SELECT_OPTIONS,類型: IWCI_WDR_SELECT_OPTIONS峦甩。
保存并激活所有對象赘来。
5. 方法實施
單擊 Method 選項卡,找到 WDDOINI T雙擊進入凯傲,編寫以下代碼犬辰。
METHOD WDDOINIT .
DATA:
LT_RANGE_TABLE TYPE REF TO DATA,
RT_RANGE_TABLE TYPE REF TO DATA,
READ_ONLY TYPE ABAP_BOOL,
TYPENAME TYPE STRING.
DATA:
LR_COMPONENTCONTROLLER TYPE REF TO IG_COMPONENTCONTROLLER,
L_REF_CMP_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE.
* create the used component
L_REF_CMP_USAGE = WD_THIS->WD_CPUSE_SELECT_OPTIONS( ).
IF L_REF_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
L_REF_CMP_USAGE->CREATE_COMPONENT( ).
ENDIF.
* get a pointer to the interface controller of the select options
*component
WD_THIS->M_WD_SELECT_OPTIONS =
WD_THIS->WD_CPIFC_SELECT_OPTIONS( ).
* init the select screen
WD_THIS->M_HANDLER =
WD_THIS->M_WD_SELECT_OPTIONS->INIT_SELECTION_SCREEN( ).
* create a range table that consists of this new data element
LT_RANGE_TABLE =
WD_THIS->M_HANDLER->CREATE_RANGE_TABLE(
I_TYPENAME = 'S_CARR_ID' ).
* add a new field to the selection
WD_THIS->M_HANDLER->ADD_SELECTION_FIELD(
I_ID = 'S_CARR_ID'
IT_RESULT = LT_RANGE_TABLE
I_READ_ONLY = READ_ONLY ).
* create a range table that consists of this new data element
LT_RANGE_TABLE =
WD_THIS->M_HANDLER->CREATE_RANGE_TABLE(
I_TYPENAME = 'S_CONN_ID' ).
* add a new field to the selection
WD_THIS->M_HANDLER->ADD_SELECTION_FIELD(
I_ID = 'S_CONN_ID'
IT_RESULT = LT_RANGE_TABLE
I_READ_ONLY = READ_ONLY ).
ENDMETHOD.
在來到 ONACTIONCONTINUE 方法,雙擊進入編輯冰单,插入如下代碼幌缝。
METHOD ONACTIONCONTINUE .
DATA: NODE_FLIGHTS TYPE REF TO IF_WD_CONTEXT_NODE.
DATA: RT_CARRID TYPE REF TO DATA.
DATA: RT_CONNID TYPE REF TO DATA.
DATA: ISFLIGHT TYPE TABLE OF SFLIGHT.
DATA: WSFLIGHT TYPE SFLIGHT.
FIELD-SYMBOLS: <FS_CARRID> TYPE TABLE,
<FS_CONNID> TYPE TABLE.
* Retrieve the data from the select option
RT_CARRID = WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD(
I_ID = 'S_CARR_ID' ).
* Assign it to a field symbol
ASSIGN RT_CARRID->* TO <FS_CARRID>.
* Retrieve the data from the select option
RT_CONNID = WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD(
I_ID = 'S_CONN_ID' ).
* Assign it to a field symbol
ASSIGN RT_CONNID->* TO <FS_CONNID>.
* Retrieve that data from the database. Normally it is suggested to
* encapsulate the data retrieval in a separate class.
* For simplicity, the SELECT statement has been implemented here.
CLEAR ISFLIGHT. REFRESH ISFLIGHT.
SELECT * INTO CORRESPONDING FIELDS OF TABLE ISFLIGHT FROM SFLIGHT
WHERE CARRID IN <FS_CARRID>
AND CONNID IN <FS_CONNID>.
* Bind the data to the context
NODE_FLIGHTS = WD_CONTEXT->GET_CHILD_NODE( NAME = `FLIGHTS` ).
NODE_FLIGHTS->BIND_ELEMENTS( ISFLIGHT ).
ENDMETHOD.
保存并激活所有對象。
6. 將視圖嵌入窗口
來到窗口 Z_TUTORIAL2 下诫欠,展開清單涵卵,找到 VIEW_CONTAINER,右鍵單擊嵌套視圖荒叼,填入以下信息轿偎,回車。
結(jié)果如下被廓。
保存并激活所有對象坏晦。
7. 創(chuàng)建應(yīng)用并測試
創(chuàng)建 Web Dynpro 程序,并保存為本地對象兆解。執(zhí)行測試篇裁,在彈出的瀏覽器中進行檢驗。
如果您的系統(tǒng)中沒有數(shù)據(jù)白筹,請運行程序 SAPBC_DATA_GENERATOR 生成.
錯漏之處挖诸,歡迎指正。
參考文獻:
[1] Getting Started with Web Dynpro for ABAP, Rich Heilman,2005
[2] Using Select Options in a WDA Application, Rich Heilman , 2006
[3] SAP Documentation