看到一篇關于WebDynpro的Popup窗口的文章折汞,感覺這篇文章寫得比較全,所以用Google翻譯之后继薛,記錄在此修壕。可能以后有時間會修改一些原文晦澀的地方遏考,如果沒時間就算了慈鸠。原文鏈接見文末。
概述
接口IF_WD_WINDOW_MANAGER提供了四種用于在Web Dynpro ABAP組件中創(chuàng)建彈出窗口的方法灌具。這些方法可以用于從Web Dynpro視圖中打開一個帶有簡單文本或內容的對話框窗口青团,或者打開一個帶有URL地址的獨立瀏覽器窗口。下面討論每種方法咖楣,并給出一個實例的例子督笆。
一覽:
CREATE_EXTERNAL_WINDOW | 用URL地址創(chuàng)建一個獨立的外部瀏覽器窗口 |
CREATE_POPUP_TO_CONFIRM | 創(chuàng)建一個模式對話窗口,用于顯示帶有可選圖標的簡單文本消息诱贿。 |
CREATE_WINDOW | 創(chuàng)建一個模態(tài)對話框窗口娃肿,用于顯示當前組件的接口視圖。 |
CREATE_WINDOW_FOR_CMP_USAGE | 創(chuàng)建一個模式對話框窗口珠十,用于顯示組件使用的接口視圖料扰。 |
1.0 CREATE_EXTERNAL_WINDOW
該方法創(chuàng)建一個獨立的,具有URL地址的外部瀏覽器窗口焙蹭。它可能用于打開包含不同Web應用程序或互聯(lián)網網站的輔助瀏覽器窗口晒杈。
程序
1.1創(chuàng)建Web Dynpro組件
使用視圖V_MAIN和窗口W_MAIN創(chuàng)建一個Web Dynpro組件ZDEMO_POPUPS。還為該組件創(chuàng)建一個應用程序壳嚎。
1.2創(chuàng)建一個窗口屬性
在組件控制器中桐智,創(chuàng)建一個公共屬性WINDOW來存儲對彈出窗口對象的引用歉甚。作為公共屬性的好處是,任意視圖都可以訪問和控制彈出窗口刘绣。
1.3使用事件處理程序創(chuàng)建LinkToAction
在視圖V_MAIN的布局中摄欲,使用以下屬性創(chuàng)建LinkToAction元素。
Properties (LinkToAction) | |
---|---|
ID | CREATE_EXTERNAL_WINDOW |
text | CREATE_EXTERNAL_WINDOW |
Events | |
onAction | POPUP_EXTERN_WINDOW |
1.4實現事件處理程序POPUP_EXTERN_WINDOW
按如下方式為LinkToAction元素實現事件處理程序方法刊驴。
METHOD onactionpopup_extern_window.
DATA lo_api_component TYPE REF TO if_wd_component.
DATA lo_window_manager TYPE REF TO if_wd_window_manager.
* Get the window manager
lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).
* Create the external window
wd_comp_controller->window = lo_window_manager->create_external_window(
url = 'http://scn.sap.com'
title = 'CREATE_EXTERNAL_WINDOW Example'
modal = abap_false
has_menubar = abap_true
is_resizable = abap_true
has_scrollbars = abap_true
has_statusbar = abap_true
has_toolbar = abap_true
has_location = abap_true
use_post = abap_false
).
* Open the external window
wd_comp_controller->window->open( ).
ENDMETHOD.
1.5運行應用程序
保存姿搜,激活并運行Web Dynpro應用程序。點擊鏈接CREATE_EXTERNAL_WINDOW將打開一個新的瀏覽器窗口捆憎,顯示指定的網址舅柜。
2.0 CREATE_POPUP_TO_CONFIRM
此方法創(chuàng)建一個模式對話框窗口,用于顯示帶有可選圖標的簡單文本消息躲惰。使用這種方法致份,不需要指定接口視圖來包含文本消息; 接口視圖由運行時提供。
程序
2.1使用事件處理程序創(chuàng)建LinkToAction
重復步驟 1.1創(chuàng)建Web Dynpro組件 和 1.2創(chuàng)建窗口屬性 CREATE_EXTERNAL_WINDOW部分础拨,以創(chuàng)建新的Web Dynpro組件和窗口屬性氮块,或跳過這些步驟并擴展在CREATE_EXTERNAL_WINDOW節(jié)中創(chuàng)建的組件。
在視圖V_MAIN的布局中诡宗,使用以下屬性創(chuàng)建LinkToAction元素滔蝉。
Properties (LinkToAction) | |
---|---|
ID | CREATE_POPUP_TO_CONFIRM |
text | CREATE_POPUP_TO_CONFIRM |
Events | |
OnAction | POPUP_TO_CONFIRM |
2.2 [可選]為按鈕單擊事件實施事件處理程序方法
只有在訂購確認彈出窗口中的按鈕點擊事件時才需要執(zhí)行此步驟。
在V_MAIN視圖中塔沃,創(chuàng)建一個事件處理函數方法POPUP_TO_CONFIRM_EVENT_HANDLER并按如下方式實現它蝠引。例如,可以使用事件處理程序來根據用戶在確認彈出窗口中的響應來更新上下文蛀柴。
METHOD popup_to_confirm_event_handler.
* Handle the button click event as needed
CASE wdevent->name.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_yes.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_no.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_abort.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_cancel.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_retry.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_ignore.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_close.
WHEN if_wd_popup_to_confirm_n=>co_popup_button_event-on_ok.
ENDCASE.
ENDMETHOD.
2.3實現事件處理程序POPUP_TO_CONFIRM
方法CREATE_POPUP_TO_CONFIRM的參數BUTTON_KIND使您能夠為確認彈出窗口指定一組按鈕螃概。該參數的可能值如下。
Button Set | Buttons in the Set |
---|---|
IF_WD_WINDOW => CO_BUTTONS_ABORTRETRYIGNORE | IF_WD_WINDOW => CO_BUTTON_ABORT IF_WD_WINDOW => CO_BUTTON_RETRY IF_WD_WINDOW => CO_BUTTON_IGNORE |
IF_WD_WINDOW => CO_BUTTONS_CLOSE | IF_WD_WINDOW => CO_BUTTON_CLOSE |
IF_WD_WINDOW => CO_BUTTONS_NONE | IF_WD_WINDOW => CO_BUTTON_NONE |
IF_WD_WINDOW => CO_BUTTONS_OK | IF_WD_WINDOW => CO_BUTTON_OK |
IF_WD_WINDOW => CO_BUTTONS_OKCANCEL | IF_WD_WINDOW => CO_BUTTON_OK IF_WD_WINDOW => CO_BUTTON_CANCEL |
IF_WD_WINDOW => CO_BUTTONS_YESNO | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO |
IF_WD_WINDOW => CO_BUTTONS_YESNOCANCEL | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO IF_WD_WINDOW => CO_BUTTON_CANCEL |
方法CREATE_POPUP_TO_CONFIRM的參數MESSAGE_TYPE使您能夠為確認彈出窗口指定圖標名扛。該參數的可能值如下谅年。
消息類型 | 圖標 |
---|---|
IF_WD_WINDOW => CO_MSG_TYPE_ERROR | image
|
IF_WD_WINDOW => CO_MSG_TYPE_INFORMATION | image
|
IF_WD_WINDOW => CO_MSG_TYPE_NONE | |
IF_WD_WINDOW => CO_MSG_TYPE_QUESTION | image
|
IF_WD_WINDOW => CO_MSG_TYPE_STOPP | image
|
IF_WD_WINDOW => CO_MSG_TYPE_WARNING | image
|
按如下方式為LinkToAction元素實現事件處理程序方法。第24行到第46行訂閱確認彈出窗口中的按鈕點擊事件肮韧。如果您在步驟2.2中為按鈕單擊事件實施事件處理程序融蹂,則只應包含這些行。
METHOD onactionpopup_to_confirm.
DATA lo_api_component TYPE REF TO if_wd_component.
DATA lo_window_manager TYPE REF TO if_wd_window_manager.
DATA lo_api_v_main TYPE REF TO if_wd_view_controller.
DATA lt_string_table TYPE string_table.
* Get the window manager
lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).
* Create the popup window
APPEND 'Have a nice day!' TO lt_string_table.
wd_comp_controller->window = lo_window_manager->create_popup_to_confirm(
text = lt_string_table
button_kind = if_wd_window=>co_buttons_okcancel
message_type = if_wd_window=>co_msg_type_information
close_button = abap_true
window_title = 'CREATE_POPUP_TO_CONFIRM Example'
default_button = if_wd_window=>co_button_ok
). * Get the view controller
lo_api_v_main = wd_this->wd_get_api( ).
* Subscribe to button events in the popup window
TRY.
* OK button
wd_comp_controller->window->popup_to_confirm->subscribe_to_button_event(
controller = lo_api_v_main
handler_name = 'POPUP_TO_CONFIRM_EVENT_HANDLER'
button = if_wd_window=>co_button_ok
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* CANCEL button
wd_comp_controller->window->popup_to_confirm->subscribe_to_button_event(
controller = lo_api_v_main
handler_name = 'POPUP_TO_CONFIRM_EVENT_HANDLER'
button = if_wd_window=>co_button_cancel
).
CATCH cx_wdr_rt_exception.
ENDTRY.
* Open the popup window
wd_comp_controller->window->open( ).
ENDMETHOD.
2.4運行應用程序
保存弄企,激活并運行Web Dynpro應用程序超燃。點擊鏈接CREATE_POPUP_TO_CONFIRM將打開一個確認彈出窗口。如果用戶通過“確定”或“取消”按鈕關閉彈出窗口拘领,則按鈕單擊事件通過POPUP_TO_CONFIRM_EVENT_HANDLER方法捕獲意乓。
3.0 CREATE_WINDOW
此方法創(chuàng)建一個模態(tài)對話框窗口,用于顯示當前組件的接口視圖约素。由于顯示的視圖屬于當前組件届良,因此開發(fā)人員可以完全控制彈出窗口的內容和行為笆凌。
程序
3.1為彈出窗口創(chuàng)建一個視圖和窗口
重復步驟1.1創(chuàng)建Web Dynpro組件 和 1.2創(chuàng)建窗口屬性 CREATE_EXTERNAL_WINDOW部分, 以創(chuàng)建新的Web Dynpro組件和窗口屬性士葫,或跳過這些步驟并擴展在CREATE_EXTERNAL_WINDOW節(jié)中創(chuàng)建的組件乞而。
向組件添加新視圖V_POPUP和新窗口W_POPUP,并將視圖V_POPUP嵌入到窗口W_POPUP中慢显。
3.2使用事件處理程序創(chuàng)建LinkToAction
在視圖V_MAIN的布局中爪模,使用以下屬性創(chuàng)建LinkToAction元素。
Properties(LinkToAction) | |
---|---|
ID | CREATE_WINDOW |
text | CREATE_WINDOW |
Events | |
OnAction | POPUP_WINDOW |
3.3實現事件處理程序POPUP_WINDOW
方法CREATE_WINDOW的參數BUTTON_KIND使您能夠為確認彈出窗口指定一組按鈕荚藻。該參數的可能值如下屋灌。
Button Set | Buttons in the Set |
---|---|
IF_WD_WINDOW => CO_BUTTONS_ABORTRETRYIGNORE | IF_WD_WINDOW => CO_BUTTON_ABORT IF_WD_WINDOW => CO_BUTTON_RETRY IF_WD_WINDOW => CO_BUTTON_IGNORE |
IF_WD_WINDOW => CO_BUTTONS_CLOSE | IF_WD_WINDOW => CO_BUTTON_CLOSE |
IF_WD_WINDOW => CO_BUTTONS_NONE | IF_WD_WINDOW => CO_BUTTON_NONE |
IF_WD_WINDOW => CO_BUTTONS_OK | IF_WD_WINDOW => CO_BUTTON_OK |
IF_WD_WINDOW => CO_BUTTONS_OKCANCEL | IF_WD_WINDOW => CO_BUTTON_OK IF_WD_WINDOW => CO_BUTTON_CANCEL |
IF_WD_WINDOW => CO_BUTTONS_YESNO | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO |
IF_WD_WINDOW => CO_BUTTONS_YESNOCANCEL | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO IF_WD_WINDOW => CO_BUTTON_CANCEL |
按鈕設置集合中的按鈕
Button Set | Buttons in the Set |
---|---|
IF_WD_WINDOW => CO_BUTTONS_ABORTRETRYIGNORE | IF_WD_WINDOW => CO_BUTTON_ABORT IF_WD_WINDOW => CO_BUTTON_RETRY IF_WD_WINDOW => CO_BUTTON_IGNORE |
IF_WD_WINDOW => CO_BUTTONS_CLOSE | IF_WD_WINDOW => CO_BUTTON_CLOSE |
IF_WD_WINDOW => CO_BUTTONS_NONE | IF_WD_WINDOW => CO_BUTTON_NONE |
IF_WD_WINDOW => CO_BUTTONS_OK | IF_WD_WINDOW => CO_BUTTON_OK |
IF_WD_WINDOW => CO_BUTTONS_OKCANCEL | IF_WD_WINDOW => CO_BUTTON_OK IF_WD_WINDOW => CO_BUTTON_CANCEL |
IF_WD_WINDOW => CO_BUTTONS_YESNO | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO |
IF_WD_WINDOW => CO_BUTTONS_YESNOCANCEL | IF_WD_WINDOW => CO_BUTTON_YES IF_WD_WINDOW => CO_BUTTON_NO IF_WD_WINDOW => CO_BUTTON_CANCEL |
方法CREATE_WINDOW的參數MESSAGE_TYPE使您能夠為確認彈出窗口指定一個圖標。該參數的可能值如下应狱。
消息類型 | 圖標 |
---|---|
IF_WD_WINDOW => CO_MSG_TYPE_ERROR | image
|
IF_WD_WINDOW => CO_MSG_TYPE_INFORMATION | image
|
IF_WD_WINDOW => CO_MSG_TYPE_NONE | |
IF_WD_WINDOW => CO_MSG_TYPE_QUESTION | image
|
IF_WD_WINDOW => CO_MSG_TYPE_STOPP | image
|
IF_WD_WINDOW => CO_MSG_TYPE_WARNING | image
|
按如下方式為LinkToAction元素實現事件處理程序方法共郭。
METHOD onactionpopup_window.
DATA lo_api_component TYPE REF TO if_wd_component.
DATA lo_window_manager TYPE REF TO if_wd_window_manager.
* Get the window manager
lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).
* Create the popup window
wd_comp_controller->window = lo_window_manager->create_window(
window_name = 'W_POPUP'
title = 'CREATE_WINDOW Example'
close_in_any_case = abap_true
message_display_mode = if_wd_window=>co_msg_display_mode_selected
close_button = abap_true
button_kind = if_wd_window=>co_buttons_abortretryignore
message_type = if_wd_window=>co_msg_type_none
default_button = if_wd_window=>co_button_ignore
).
* Open the popup window
wd_comp_controller->window->open( ).
ENDMETHOD.
3.4查看V_POPUP一些內容
由于它位于當前組件的本地,因此您可以完全控制彈出窗口的內容和行為疾呻。在這個例子中落塑,我們將保持簡單。在視圖V_POPUP的布局中罐韩,使用以下屬性創(chuàng)建一個TextView元素。
Properties (TextView) | |
---|---|
ID | LOCKED_MESSAGE |
text | The record you attempted to update is locked by another user.您嘗試更新的記錄被另一個用戶鎖定污朽。 |
3.5 [可選]為按鈕單擊事件實施操作和處理程序方法
如果您想在彈出窗口中訂閱按鈕點擊事件散吵,則只需要執(zhí)行此步驟。
在視圖V_POPUP的布局中蟆肆,創(chuàng)建一個動作POPUP_ACTION并按如下方式實現其處理程序方法矾睦。例如,可以使用一個動作來根據用戶在彈出窗口中的響應來更新上下文炎功。
METHOD onactionpopup_action.
FIELD-SYMBOLS <param> TYPE wdr_event_parameter.
FIELD-SYMBOLS <button> TYPE wdr_value.
* Determine which button in the popup the user clicked
READ TABLE wdevent->parameters ASSIGNING <param>
WITH KEY name = 'BUTTON'.
CHECK sy-subrc IS INITIAL.
* Dereference the parameter value to identify the button
ASSIGN <param>-value->* TO <button>.
* Handle the button click as needed
CASE <button>.
WHEN if_wd_window=>co_button_none.
WHEN if_wd_window=>co_button_abort.
WHEN if_wd_window=>co_button_retry.
WHEN if_wd_window=>co_button_ignore.
WHEN if_wd_window=>co_button_ok.
WHEN if_wd_window=>co_button_close.
WHEN if_wd_window=>co_button_cancel.
WHEN if_wd_window=>co_button_yes.
WHEN if_wd_window=>co_button_no.
ENDCASE.
ENDMETHOD.
3.6 [可選]訂閱按鈕單擊事件
如果您想在彈出窗口中訂閱按鈕點擊事件枚冗,則只需要執(zhí)行此步驟。
在視圖V_POPUP的鉤子方法WDDOINIT中蛇损,訂閱所需的按鈕單擊事件赁温。
METHOD wddoinit.
DATA lo_api_v_popup TYPE REF TO if_wd_view_controller.
* Get the view controller
lo_api_v_popup = wd_this->wd_get_api( ).
* Subscribe to button events in the popup window
TRY.
* OK button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_ok
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* CLOSE button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_close
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* CANCEL button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_cancel
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* YES button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_yes
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* NO button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_no
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* ABORT button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_abort
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* RETRY button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_retry
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
TRY.
* IGNORE button
wd_comp_controller->window->subscribe_to_button_event(
button = if_wd_window=>co_button_ignore
action_name = 'POPUP_ACTION'
action_view = lo_api_v_popup
).
CATCH cx_wdr_rt_exception.
ENDTRY.
ENDMETHOD.
3.7運行應用程序
保存,激活并運行Web Dynpro應用程序淤齐。點擊鏈接CREATE_WINDOW打開一個彈出窗口股囊,顯示視圖V_POPUP。如果用戶通過取消更啄,重復或忽略按鈕關閉彈出窗口稚疹,按鈕單擊事件通過動作POPUP_ACTION捕獲。
4.0 CREATE_WINDOW_FOR_CMP_USAGE
此方法創(chuàng)建一個模態(tài)對話框窗口祭务,用于顯示組件使用的接口視圖内狗。
程序
4.1創(chuàng)建組件用法
重復步驟1.1創(chuàng)建Web Dynpro組件 和 1.2創(chuàng)建窗口屬性 CREATE_EXTERNAL_WINDOW部分怪嫌,以創(chuàng)建新的Web Dynpro組件和窗口屬性,或跳過這些步驟并擴展在CREATE_EXTERNAL_WINDOW節(jié)中創(chuàng)建的組件柳沙。
將組件用途添加到組件ZDEMO_POPUPS岩灭。在這個例子中,我們使用為另一個演練教程ZDEMO_ALV開發(fā)的組件偎行。
還要添加組件用法來查看V_MAIN川背。
4.2使用事件處理程序創(chuàng)建LinkToAction
在視圖V_MAIN的布局中,使用以下屬性創(chuàng)建LinkToAction元素蛤袒。
Properties (LinkToAction) | |
---|---|
ID | CREATE_WINDOW_FOR_CMP_USAGE |
text | CREATE_WINDOW_FOR_CMP_USAGE |
Events | |
onAction | POPUP_CMP_USAGE |
4.3實現事件處理程序POPUP_CMP_USAGE
按如下方式為LinkToAction元素實現事件處理程序方法熄云。方法CREATE_WINDOW_FOR_CMP_USAGE的參數INTERFACE_VIEW_NAME是使用組件的接口視圖的名稱,即其窗口妙真。
METHOD onactionpopup_cmp_usage.
DATA lo_api_component TYPE REF TO if_wd_component.
DATA lo_window_manager TYPE REF TO if_wd_window_manager.
* Get the window manager
lo_api_component = wd_comp_controller->wd_get_api( ).
lo_window_manager = lo_api_component->get_window_manager( ).
* Create the popup window for component usage
wd_comp_controller->window = lo_window_manager->create_window_for_cmp_usage(
interface_view_name = 'WINDOW'
component_usage_name = 'CMP_USAGE_ALV'
title = 'CREATE_WINDOW_FOR_CMP_USAGE Example'
close_in_any_case = abap_true
message_display_mode = if_wd_window=>co_msg_display_mode_selected
is_resizable = abap_true
).
* Open the popup window for component usage
wd_comp_controller->window->open( ).
ENDMETHOD.
4.4運行應用程序
保存缴允,激活并運行Web Dynpro應用程序。單擊鏈接CREATE_WINDOW_FOR_CMP_USAGE會打開一個彈出窗口珍德,其中顯示組件使用界面視圖的內容练般。
原文地址:https://blogs.sap.com/2013/08/26/the-four-types-of-popup-window/