WebDynpro的四种Popup窗口

看到一篇关于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。还为该组件创建一个应用程序。

WebDynpro的四种Popup窗口_第1张图片
image
1.2创建一个窗口属性

在组件控制器中,创建一个公共属性WINDOW来存储对弹出窗口对象的引用。作为公共属性的好处是,任意视图都可以访问和控制弹出窗口

WebDynpro的四种Popup窗口_第2张图片
image
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将打开一个新的浏览器窗口,显示指定的网址。

WebDynpro的四种Popup窗口_第3张图片
image
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
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方法捕获。

WebDynpro的四种Popup窗口_第4张图片
image
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中。

WebDynpro的四种Popup窗口_第5张图片
image

WebDynpro的四种Popup窗口_第6张图片
image

WebDynpro的四种Popup窗口_第7张图片
image
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
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的布局中,使用以下属性创建一个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捕获。

WebDynpro的四种Popup窗口_第8张图片
image
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开发的组件。

WebDynpro的四种Popup窗口_第9张图片
image

还要添加组件用法来查看V_MAIN。

WebDynpro的四种Popup窗口_第10张图片
image
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会打开一个弹出窗口,其中显示组件使用界面视图的内容。

WebDynpro的四种Popup窗口_第11张图片
image

原文地址:https://blogs.sap.com/2013/08/26/the-four-types-of-popup-window/

你可能感兴趣的