模态对话框中的ALV

2020-08-25 23:42发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我在假定屏幕3000上有一个ALV,我在工具栏中创建了一个按钮来调用另一个ALV,但是我的问题是,我们可以在模态对话框屏幕中显示ALV吗(因为要求是将ALV显示为 弹出窗口)

因此,当我将屏幕类型更改为普通屏幕时,我的alv即将到来,但是当我将屏幕类型更改为模式对话框时,则输出中将不显示ALV。 仅显示空白屏幕。

能帮我吗?

谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我在假定屏幕3000上有一个ALV,我在工具栏中创建了一个按钮来调用另一个ALV,但是我的问题是,我们可以在模态对话框屏幕中显示ALV吗(因为要求是将ALV显示为 弹出窗口)

因此,当我将屏幕类型更改为普通屏幕时,我的alv即将到来,但是当我将屏幕类型更改为模式对话框时,则输出中将不显示ALV。 仅显示空白屏幕。

能帮我吗?

谢谢。

付费偷看设置
发送
4条回答
土豆飞人
1楼 · 2020-08-26 00:15.采纳回答

你好

显然您不了解我针对此问题的解决方案。

模式对话框仅是一个弹出窗口。 如果它是主屏幕上的第一个弹出窗口,则我们在屏幕级别1上。应该显示控件的容器(在这种情况下为ALV网格)必须通过设置IMPORTING参数

来知道该级别。
   创建go_container"停靠容器或自定义容器
     出口
        父母= cl_gui_container => screen1
  ...
 

仅此而已。 不多不少。

致谢

Uwe

CJones
2楼-- · 2020-08-26 00:16

很棒的把戏! 谢谢!

黑丝骑士
3楼-- · 2020-08-26 00:03

您好

问题是您必须考虑弹出窗口(或模式对话框)中的ALV在不同的屏幕级别上显示:

  • 0级=主屏幕

  • 级别1 =第一个弹出窗口

  • 级别2 =第二个弹出窗口

...

我们最多可以提供9个屏幕级别。

以下示例报告ZUS_SDN_ALV_IN_POPUP是我的示例报告ZUS_SDN_TWO_ALV_GRIDS的变体。

取决于是否标记P_POPUP,第二个ALV网格是否另外显示在弹出窗口上。

 *&------------------------------------------------  --------------------- *
 *&报告ZUS_SDN_ALV_IN_POPUP
 *&
 *&------------------------------------------------  --------------------- *
 *&线程:模式对话框中的ALV
 *&https:||  
 *&------------------------------------------------  --------------------- *
 *&屏幕" 0100"不包含任何元素。
 *&ok_code->分配给GD_OKCODE
 *&
 *&流逻辑:
 *输出前处理。
 * MODULE STATUS_0100。
 **
 *输入后处理。
 * MODULE USER_COMMAND_0100。
 *&
 *&------------------------------------------------  --------------------- *
 报告zus_sdn_alv_in_popup。

 类型池:apapap。

 数据:
   gd_okcode TYPE ui_func,
   gd_repid TYPE syst-repid,
 主屏幕的容器和ALV网格
   go_docking类型参考cl_gui_docking_container,
   go_splitter类型参考cl_gui_splitter_container,
   go_cell_top类型参考cl_gui_container,
   go_cell_bottom类型参考cl_gui_container,
   go_grid1类型参考cl_gui_alv_grid,
   go_grid2类型参考cl_gui_alv_grid,
 容器和用于弹出的ALV网格
   go_docking3类型参考cl_gui_docking_container,
   go_grid3类型参考cl_gui_alv_grid,
 *
   gs_layout类型为lvc_s_layo。


 数据:
   gt_knb1型标准表,
   gt_knvv knvv的类型标准表。



 参数:
   p_popup AS CHECKBOX DEFAULT''。


 * -------------------------------------------------  -------------------- *
 * CLASS lcl_eventhandler的定义
 * -------------------------------------------------  -------------------- *
 *
 * -------------------------------------------------  -------------------- *
 CLASS lcl_eventhandler定义。

   公共部分。
     类方法:
       handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
         输入
           电子行
           e_column
           es_row_no
           发件人。
 ENDCLASS。  " lcl_eventhandler定义


 * -------------------------------------------------  -------------------- *
 * CLASS lcl_eventhandler的实现
 * -------------------------------------------------  -------------------- *
 *
 * -------------------------------------------------  -------------------- *
 CLASS lcl_eventhandler的实现。

   方法handle_double_click。
 *定义本地数据
     数据:
       ls_knb1类型knb1。

     检查(发件人= go_grid1)。

     将表gt_knb1读入ls_knb1索引e_row-index。
     检查(ls_knb1-kunnr不是INITIAL)。


     IF(p_popup = abap_true)。
       呼叫方法cl_gui_cfw => set_new_ok_code
         出口
           new_code ='POPUP'
 *重要
 * rc =
           。

     其他。
 *使用指定的OK代码触发dynpro的PAI
 * *呼叫方法cl_gui_cfw => set_new_ok_code('DETAIL')。 不在4.6c上
       呼叫方法cl_gui_cfw => set_new_ok_code
         出口
           new_code ='详细信息'
 *重要
 * rc =
           。
     万一。

   终结法。  " handle_double_click

 ENDCLASS。  " lcl_eventhandler的实现



 选择开始。
 "选择数据
   选择*从knb1到表gt_knb1
          其中bukrs ='1000'。

   执行init_controls。


 *显示数据
   gs_layout-grid_title ='客户'。
   呼叫方法go_grid1-> set_table_for_first_display
     出口
       i_structure_name ='KNB1'
       is_layout = gs_layout
     改变
       it_outtab = gt_knb1
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。

   gs_layout-grid_title ='客户详细信息(销售区域)'。
   呼叫方法go_grid2-> set_table_for_first_display
     出口
       i_structure_name ='KNVV'
       is_layout = gs_layout
     改变
       it_outtab = gt_knvv"空!
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


   gs_layout-grid_title ='客户详细信息(销售区域)'。
   呼叫方法go_grid3-> set_table_for_first_display
     出口
       i_structure_name ='KNVV'
       is_layout = gs_layout
     改变
       it_outtab = gt_knvv"空!
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *将对接容器链接到目标dynpro
   gd_repid = syst-repid。
   呼叫方法go_docking->链接
     出口
       repid = gd_repid
       dynnr ='0100'
 *容器=
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *将停靠容器链接到弹出窗口
   gd_repid = syst-repid。
   呼叫方法go_docking3->链接
     出口
       repid = gd_repid
       dynnr ='0200'
 *容器=
     例外情况
       其他= 4。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *注意:dynpro不包含任何元素
   呼叫屏幕" 0100"。
 * dynpro的流程逻辑(不包含任何dynpro元素):
 *
 *输出前的处理。
 * MODULE STATUS_0100。
 **
 *输入后的过程。
 * MODULE USER_COMMAND_0100。

 选择结束。



 *&------------------------------------------------  --------------------- *
 *&表格INIT_CONTROLS
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *
 FORM init_controls。

 *创建停靠容器
   创建对象go_docking
     出口
       parent = cl_gui_container => screen0"主屏幕-> 0级!
       比例= 90
     例外情况
       其他= 6。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *创建拆分器容器
   创建对象go_splitter
     出口
       父母= go_docking
       行= 2
       列= 1
 * NO_AUTODEF_PROGID_DYNNR =
 * NAME =
     例外情况
       cntl_error = 1
       cntl_system_error = 2
       其他= 3。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。

 *获取单元格容器
   呼叫方法go_splitter-> get_container
     出口
       行= 1
       列= 1
     接收
       容器= go_cell_top。
   呼叫方法go_splitter-> get_container
     出口
       行= 2
       列= 1
     接收
       容器= go_cell_bottom。

 *创建ALV网格
   创建对象go_grid1
     出口
       i_parent = go_cell_top
     例外情况
       其他= 5。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 *设置事件处理程序
   设置处理程序:lcl_eventhandler => handle_double_click FOR go_grid1。


   创建对象go_grid2
     出口
       i_parent = go_cell_bottom
     例外情况
       其他= 5。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。



   创建用于弹出的容器和网格。
 *创建停靠容器
   创建对象go_docking3
     出口
       父= cl_gui_container => screen1" !!!弹出!!!
       比例= 90
     例外情况
       其他= 6。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。
   "注意:从主dynpro(屏幕级别0)开始,第一个弹出窗口
   "(或模式对话框)在1级上!!!
   "使用cl_gui_container => screen0无法显示ALV网格。


   创建对象go_grid3
     出口
       i_parent = go_docking3
     例外情况
       其他= 5。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。

 ENDFORM。  " INIT_CONTROLS

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_0100输出
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模块状态_0100输出。
   设置PF-STATUS'STATUS_0100'。  "包含按钮" DETAIL"
 * SET TITLEBAR'xxx'。


 *刷新详细ALV清单显示
   呼叫方法go_grid2-> refresh_table_display
 *出口
 * IS_STABLE =
 * I_SOFT_REFRESH =
     例外情况
       其他= 2。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。


 ENDMODULE。  " STATUS_0100输出

 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_0100输入
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 MODULE user_command_0100输入。


   案例syst-dynnr。
     当为" 0100"时。
       案例gd_okcode。
         当"返回"时
              "结束"或
              " CANC"。
           设置屏幕0。离开屏幕。

 *用户已按下"显示详细信息"按钮
         当"详细信息"时。
           进行entry_show_details。

         当"弹出"时。
           进行entry_show_details。

           go_grid3-> refresh_table_display()。  "为必填项
           呼叫屏幕'0200'从5 5开始
                              结束于150 30。

         当别人。
       结束。


     当为" 0200"时。
       设置屏幕100。离开屏幕。
   结束。

   清除:gd_okcode。

 ENDMODULE。  " USER_COMMAND_0100输入

 *&------------------------------------------------  --------------------- *
 *&ENTRY_SHOW_DETAILS表格
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *
 表格entry_show_details。
 *定义本地数据
   数据:
     ld_row TYPE i,
     ls_knb1类型knb1。

   呼叫方法go_grid1-> get_current_cell
     输入
       e_row = ld_row。

   将表gt_knb1读入ls_knb1索引ld_row。
   检查(syst-subrc = 0)。

   选择*从knvv到表gt_knvv
          其中kunnr = ls_knb1-kunnr。

 ENDFORM。  " ENTRY_SHOW_DETAILS
 

致谢

Uwe

打个大熊猫
4楼-- · 2020-08-26 00:10

我的问题很简单,

我有一个主ALV输出屏幕,从主屏幕中我叫另一个具有ALV的屏幕。

当我将屏幕类型设为正常时,ALV网格开始在屏幕上显示。 但是,当我将第二种屏幕类型更改为"模式对话框"时,它消失了,仅显示空白屏幕。

任何人都可以准确地告诉我,是否可能,如果可能的话,我还需要编写什么额外的代码。

谢谢

一周热门 更多>