看到一篇关于WebDynpro的Popup窗口的文章,感觉这篇文章写得比较全,所以用Google翻译之后,记录在此。可能以后有时间会修改一些原文晦涩的地方,如果没时间就算了。原文链接见文末。
概述
接口IF_WD_WINDOW_MANAGER提供了四种用于在Web Dynpro ABAP组件中创建弹出窗口的方法。这些方法可以用于从Web Dynpro视图中打开一个带有简单文本或内容的对话框窗口,或者打开一个带有URL地址的独立浏览器窗口。下面讨论每种方法,并给出一个实例的例子。
一览:
CREATE_EXTERNAL_WINDOW | 用URL地址创建一个独立的外部浏览器窗口 |
CREATE_POPUP_TO_CONFIRM | 创建一个模式对话窗口,用于显示带有可选图标的简单文本消息。 |
CREATE_WINDOW | 创建一个模态对话框窗口,用于显示当前组件的接口视图。 |
CREATE_WINDOW_FOR_CMP_USAGE | 创建一个模式对话框窗口,用于显示组件使用的接口视图。 |
1.0 CREATE_EXTERNAL_WINDOW
该方法创建一个独立的,具有URL地址的外部浏览器窗口。它可能用于打开包含不同Web应用程序或互联网网站的辅助浏览器窗口。
程序
1.1创建Web Dynpro组件
使用视图V_MAIN和窗口W_MAIN创建一个Web Dynpro组件ZDEMO_POPUPS。还为该组件创建一个应用程序。
1.2创建一个窗口属性
在组件控制器中,创建一个公共属性WINDOW来存储对弹出窗口对象的引用。作为公共属性的好处是,任意视图都可以访问和控制弹出窗口。
1.3使用事件处理程序创建LinkToAction
在视图V_MAIN的布局中,使用以下属性创建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
此方法创建一个模式对话框窗口,用于显示带有可选图标的简单文本消息。使用这种方法,不需要指定接口视图来包含文本消息; 接口视图由运行时提供。
程序
2.1使用事件处理程序创建LinkToAction
重复步骤 1.1创建Web Dynpro组件 和 1.2创建窗口属性 CREATE_EXTERNAL_WINDOW部分,以创建新的Web Dynpro组件和窗口属性,或跳过这些步骤并扩展在CREATE_EXTERNAL_WINDOW节中创建的组件。
在视图V_MAIN的布局中,使用以下属性创建LinkToAction元素。
Properties (LinkToAction) | |
---|---|
ID | CREATE_POPUP_TO_CONFIRM |
text | CREATE_POPUP_TO_CONFIRM |
Events | |
OnAction | POPUP_TO_CONFIRM |
2.2 [可选]为按钮单击事件实施事件处理程序方法
只有在订购确认弹出窗口中的按钮点击事件时才需要执行此步骤。
在V_MAIN视图中,创建一个事件处理函数方法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 | |
IF_WD_WINDOW => CO_MSG_TYPE_INFORMATION | |
IF_WD_WINDOW => CO_MSG_TYPE_NONE | |
IF_WD_WINDOW => CO_MSG_TYPE_QUESTION | |
IF_WD_WINDOW => CO_MSG_TYPE_STOPP | |
IF_WD_WINDOW => CO_MSG_TYPE_WARNING |
按如下方式为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
此方法创建一个模态对话框窗口,用于显示当前组件的接口视图。由于显示的视图属于当前组件,因此开发人员可以完全控制弹出窗口的内容和行为。
程序
3.1为弹出窗口创建一个视图和窗口
重复步骤1.1创建Web Dynpro组件 和 1.2创建窗口属性 CREATE_EXTERNAL_WINDOW部分, 以创建新的Web Dynpro组件和窗口属性,或跳过这些步骤并扩展在CREATE_EXTERNAL_WINDOW节中创建的组件。
向组件添加新视图V_POPUP和新窗口W_POPUP,并将视图V_POPUP嵌入到窗口W_POPUP中。
3.2使用事件处理程序创建LinkToAction
在视图V_MAIN的布局中,使用以下属性创建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 | |
IF_WD_WINDOW => CO_MSG_TYPE_INFORMATION | |
IF_WD_WINDOW => CO_MSG_TYPE_NONE | |
IF_WD_WINDOW => CO_MSG_TYPE_QUESTION | |
IF_WD_WINDOW => CO_MSG_TYPE_STOPP | |
IF_WD_WINDOW => CO_MSG_TYPE_WARNING |
按如下方式为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的布局中,使用以下属性创建一个TextView元素。
Properties (TextView) | |
---|---|
ID | LOCKED_MESSAGE |
text | The record you attempted to update is locked by another user.您尝试更新的记录被另一个用户锁定。 |
3.5 [可选]为按钮单击事件实施操作和处理程序方法
如果您想在弹出窗口中订阅按钮点击事件,则只需要执行此步骤。
在视图V_POPUP的布局中,创建一个动作POPUP_ACTION并按如下方式实现其处理程序方法。例如,可以使用一个动作来根据用户在弹出窗口中的响应来更新上下文。
METHOD onactionpopup_action.
FIELD-SYMBOLS TYPE wdr_event_parameter.
FIELD-SYMBOLS
3.6 [可选]订阅按钮单击事件
如果您想在弹出窗口中订阅按钮点击事件,则只需要执行此步骤。
在视图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
此方法创建一个模态对话框窗口,用于显示组件使用的接口视图。
程序
4.1创建组件用法
重复步骤1.1创建Web Dynpro组件 和 1.2创建窗口属性 CREATE_EXTERNAL_WINDOW部分,以创建新的Web Dynpro组件和窗口属性,或跳过这些步骤并扩展在CREATE_EXTERNAL_WINDOW节中创建的组件。
将组件用途添加到组件ZDEMO_POPUPS。在这个例子中,我们使用为另一个演练教程ZDEMO_ALV开发的组件。
还要添加组件用法来查看V_MAIN。
4.2使用事件处理程序创建LinkToAction
在视图V_MAIN的布局中,使用以下属性创建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/