2020-08-25 23:42发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我在假定屏幕3000上有一个ALV,我在工具栏中创建了一个按钮来调用另一个ALV,但是我的问题是,我们可以在模态对话框屏幕中显示ALV吗(因为要求是将ALV显示为 弹出窗口)
因此,当我将屏幕类型更改为普通屏幕时,我的alv即将到来,但是当我将屏幕类型更改为模式对话框时,则输出中将不显示ALV。 仅显示空白屏幕。
能帮我吗?
谢谢。
你好
显然您不了解我针对此问题的解决方案。
模式对话框仅是一个弹出窗口。 如果它是主屏幕上的第一个弹出窗口,则我们在屏幕级别1上。应该显示控件的容器(在这种情况下为ALV网格)必须通过设置IMPORTING参数
创建go_container"停靠容器或自定义容器 出口 父母= cl_gui_container => screen1 ...
仅此而已。 不多不少。
致谢
Uwe
很棒的把戏! 谢谢!
您好
问题是您必须考虑弹出窗口(或模式对话框)中的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
我的问题很简单,
我有一个主ALV输出屏幕,从主屏幕中我叫另一个具有ALV的屏幕。
当我将屏幕类型设为正常时,ALV网格开始在屏幕上显示。 但是,当我将第二种屏幕类型更改为"模式对话框"时,它消失了,仅显示空白屏幕。
任何人都可以准确地告诉我,是否可能,如果可能的话,我还需要编写什么额外的代码。
谢谢
最多设置5个标签!
你好
显然您不了解我针对此问题的解决方案。
模式对话框仅是一个弹出窗口。 如果它是主屏幕上的第一个弹出窗口,则我们在屏幕级别1上。应该显示控件的容器(在这种情况下为ALV网格)必须通过设置IMPORTING参数
来知道该级别。仅此而已。 不多不少。
致谢
Uwe
很棒的把戏! 谢谢!
您好
问题是您必须考虑弹出窗口(或模式对话框)中的ALV在不同的屏幕级别上显示:
0级=主屏幕
级别1 =第一个弹出窗口
级别2 =第二个弹出窗口
...
我们最多可以提供9个屏幕级别。
以下示例报告ZUS_SDN_ALV_IN_POPUP是我的示例报告ZUS_SDN_TWO_ALV_GRIDS的变体。
取决于是否标记P_POPUP,第二个ALV网格是否另外显示在弹出窗口上。
致谢
Uwe
我的问题很简单,
我有一个主ALV输出屏幕,从主屏幕中我叫另一个具有ALV的屏幕。
当我将屏幕类型设为正常时,ALV网格开始在屏幕上显示。 但是,当我将第二种屏幕类型更改为"模式对话框"时,它消失了,仅显示空白屏幕。
任何人都可以准确地告诉我,是否可能,如果可能的话,我还需要编写什么额外的代码。
谢谢
一周热门 更多>