SAP OOALV分割屏幕 cl_gui_docking_containercl_gui_splitter_container <转载>
原文链接:https://blog.csdn.net/LuciferousYam/article/details/124527800
同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据。
需要用到四个对象类:
cl_gui_docking_container 屏幕容器类
cl_gui_splitter_container 分割屏幕类
cl_gui_container 屏幕容器类
cl_gui_alv_grid 屏幕对象类
显示效果如下:
代码如下:
TABLES: sflight."抬头数据输出
TYPES: BEGIN OF ty_head.INCLUDE TYPE scarr.
TYPES: slbox TYPE c,light TYPE icon_d,message TYPE string,END OF ty_head.DATA: gt_head TYPE TABLE OF ty_head,gs_head TYPE ty_head."行项目数据输出
TYPES: BEGIN OF ty_item.INCLUDE TYPE sflight.
TYPES: slbox TYPE c,light TYPE icon_d,message TYPE string,END OF ty_item.DATA: gt_item TYPE TABLE OF ty_item,gs_item TYPE ty_item."字段属性定义
DATA: gs_fcat TYPE lvc_s_fcat.
DATA: gt_fcat_h TYPE lvc_t_fcat,gt_fcat_i TYPE lvc_t_fcat.
DATA: gs_layout_h TYPE lvc_s_layo,gs_layout_i TYPE lvc_s_layo.
DATA: gs_variant_h TYPE disvariant,gs_variant_i TYPE disvariant,gv_colno TYPE i.
DATA: gt_ui_func TYPE ui_functions. "隐藏alv菜单控件DATA: ok_code TYPE sy-ucomm. "用户功能码接收
DATA: save_ok TYPE sy-ucomm. "用户功能码接收"ALV grid
DATA: gs_dock TYPE REF TO cl_gui_docking_container,gs_splitter TYPE REF TO cl_gui_splitter_container, "分割屏幕类gs_container_h TYPE REF TO cl_gui_container, "抬头容器gs_container_i TYPE REF TO cl_gui_container, "行项目容器gs_grid_h TYPE REF TO cl_gui_alv_grid, "抬头屏幕对象类gs_grid_i TYPE REF TO cl_gui_alv_grid. "行项目屏幕对象类CONSTANTS: gc_h TYPE c VALUE 'H'. "抬头标识符
CONSTANTS: gc_i TYPE c VALUE 'I'. "行项目标识符"选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
SELECT-OPTIONS: s_carrid FOR sflight-carrid.
SELECTION-SCREEN END OF BLOCK blk1 .START-OF-SELECTION."取数PERFORM frm_select_data.END-OF-SELECTION."输出屏幕准备PERFORM frm_prepare_alv."调用100屏幕输出CALL SCREEN 0100.*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.SET PF-STATUS 'ZSTATUS_0100'.SET TITLEBAR 'ZTITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.save_ok = ok_code.CLEAR ok_code.CASE save_ok.WHEN 'ZBACK' .LEAVE TO SCREEN 0. "返回上一个屏幕WHEN 'ZCANCEL'.LEAVE TO SCREEN 0.WHEN 'EXIT'.LEAVE PROGRAM. "返回程序WHEN OTHERS.ENDCASE.ENDMODULE.*&---------------------------------------------------------------------*
*& Module INIT_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_alv OUTPUT.IF gs_dock IS INITIAL."屏幕分割PERFORM frm_split_screen."创建alv gridPERFORM frm_create_grid."显示数据PERFORM frm_display_alv USING gc_h gs_grid_h.PERFORM frm_display_alv USING gc_i gs_grid_i.ELSE."alv 刷新PERFORM frm_refresh_alv USING gs_grid_h.PERFORM frm_refresh_alv USING gs_grid_i.ENDIF.ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_data .SELECT *FROM scarrINTO CORRESPONDING FIELDS OF TABLE gt_headWHERE carrid IN s_carrid.SELECT *FROM sflightINTO CORRESPONDING FIELDS OF TABLE gt_itemWHERE carrid IN s_carrid.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PREPARE_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_prepare_alv .
* ALV字段属性PERFORM frm_build_fieldcat.* 屏幕隐藏按钮PERFORM frm_build_ui_functions.* 屏幕布局PERFORM frm_set_layout.* 屏幕自定义布局参数PERFORM frm_set_variant.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat .DEFINE m_fcat_0100.CLEAR gs_fcat.gs_fcat-fieldname = &1.gs_fcat-ref_field = &2.gs_fcat-ref_table = &3.gs_fcat-coltext =gs_fcat-seltext =gs_fcat-tooltip =gs_fcat-reptext =gs_fcat-scrtext_l = &4.gs_fcat-checkbox = &5.gs_fcat-edit = &6.gs_fcat-hotspot = &7.gv_colno = gv_colno + 1.gs_fcat-col_pos = gv_colno.CASE &8.WHEN gc_h.APPEND gs_fcat TO gt_fcat_h.WHEN gc_i.APPEND gs_fcat TO gt_fcat_i.WHEN OTHERS.ENDCASE.END-OF-DEFINITION.REFRESH: gt_fcat_h.CLEAR: gv_colno.* 抬头屏幕字段
* m_fcat_0100 'SLBOX' '' '' '复选框' 'X' '' '' GC_H.m_fcat_0100 'CARRID' '' '' '航线代码' '' '' '' gc_h.m_fcat_0100 'CARRNAME' '' '' '航线名称' '' '' '' gc_h.m_fcat_0100 'CURRCODE' '' '' '航班的本地货币' '' '' '' gc_h.m_fcat_0100 'URL' '' '' '航线 URL' '' '' '' gc_h.REFRESH: gt_fcat_i.CLEAR: gv_colno.
* 行项目屏幕字段
* m_fcat_0100 'SLBOX' '' '' '复选框' 'X' '' '' GC_I.m_fcat_0100 'CARRID' '' '' '航线代码' '' '' '' gc_i.m_fcat_0100 'CONNID' '' '' '航班连接编号' '' '' '' gc_i.m_fcat_0100 'FLDATE' '' '' '航班日期' '' '' '' gc_i.m_fcat_0100 'PRICE' '' '' '航空运费' '' '' '' gc_i.m_fcat_0100 'CURRENCY' '' '' '航班的本地货币' '' '' '' gc_i.m_fcat_0100 'PLANETYPE' '' '' '飞机类型' '' '' '' gc_i.m_fcat_0100 'SEATSMAX' '' '' '经济舱的最大容量' '' '' '' gc_i.m_fcat_0100 'SEATSOCC' '' '' '占据的经济舱座位' '' '' '' gc_i.m_fcat_0100 'PAYMENTSUM' '' '' '当前预定总数' '' '' '' gc_i.m_fcat_0100 'SEATSMAX_B' '' '' '商务舱的最大容量' '' '' '' gc_i.m_fcat_0100 'SEATSOCC_B' '' '' '占据的商务舱座位' '' '' '' gc_i.m_fcat_0100 'SEATSMAX_F' '' '' '头等舱的最大容量' '' '' '' gc_i.m_fcat_0100 'SEATSOCC_F' '' '' '占据的头等舱座位' '' '' '' gc_i.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_UI_FUNCTIONS
*&---------------------------------------------------------------------*
* build ui functions for alv
*----------------------------------------------------------------------*
FORM frm_build_ui_functions.DATA: ls_ui_func TYPE ui_func.REFRESH: gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy_row .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_cut .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_refresh .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_move_row .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_undo .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_pc_file .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_delete_row .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_insert_row .APPEND ls_ui_func TO gt_ui_func.ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_append_row.APPEND ls_ui_func TO gt_ui_func.ENDFORM. " FRM_BUILD_UI_FUNCTIONS
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
* Set output layout
*----------------------------------------------------------------------*
FORM frm_set_layout .CLEAR: gs_layout_h.gs_layout_h-zebra = 'X'. "striped patterngs_layout_h-cwidth_opt = 'X'. "Optimized widthgs_layout_i = gs_layout_h.ENDFORM. " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& FORM FRM_SET_VARIANT
*&---------------------------------------------------------------------*
* SET OUTPUT VARIANT
*----------------------------------------------------------------------*
FORM frm_set_variant ."用于区分抬头和项目的布局CLEAR: gs_variant_h.gs_variant_h-handle = '1001'.gs_variant_h-report = sy-repid.CLEAR: gs_variant_i.gs_variant_i-handle = '2001'.gs_variant_i-report = sy-repid.ENDFORM. " FRM_SET_VARIANT
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT_SCREEN
*&---------------------------------------------------------------------*
* Split screen
*----------------------------------------------------------------------*
FORM frm_split_screen."创建屏幕容器:comtainerCREATE OBJECT gs_dockEXPORTINGrepid = sy-repiddynnr = '0100'side = cl_gui_docking_container=>dock_at_leftextension = 200metric = 0ratio = 95EXCEPTIONScntl_error = 1cntl_system_error = 2create_error = 3lifetime_error = 4lifetime_dynpro_dynpro_link = 5OTHERS = 6.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.*拆分成一行二列部分*CREATE OBJECT gs_splitterEXPORTINGparent = gs_dockrows = 2columns = 1.*第一行一列*CALL METHOD gs_splitter->get_containerEXPORTINGrow = 1column = 1RECEIVINGcontainer = gs_container_h.*第二行一列*CALL METHOD gs_splitter->get_containerEXPORTINGrow = 2column = 1RECEIVINGcontainer = gs_container_i.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_CREATE_GRID
*&---------------------------------------------------------------------*
* Create alv grid on the screen
*----------------------------------------------------------------------*
FORM frm_create_grid ."创建抬头屏幕对象CREATE OBJECT gs_grid_hEXPORTINGi_parent = gs_container_h."准备输入事件CALL METHOD gs_grid_h->set_ready_for_inputEXPORTINGi_ready_for_input = 1."check data changedCALL METHOD gs_grid_h->check_changed_data."数据变更事件CALL METHOD gs_grid_h->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_modified."创建行项目屏幕对象CREATE OBJECT gs_grid_iEXPORTINGi_parent = gs_container_i.ENDFORM. " FRM_CREATE_GRID
*&---------------------------------------------------------------------*
*& FORM FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* Display in ALV
*----------------------------------------------------------------------*
FORM frm_display_alv USING pv_flg TYPE cpv_grid TYPE REF TO cl_gui_alv_grid .CASE pv_flg.WHEN gc_h.CALL METHOD pv_grid->set_table_for_first_displayEXPORTING
* I_CONSISTENCY_CHECK = 'X'is_variant = gs_variant_hit_toolbar_excluding = gt_ui_funci_save = 'A'i_default = 'X' "允许定义默认布局is_layout = gs_layout_hCHANGINGit_outtab = gt_headit_fieldcatalog = gt_fcat_hEXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.WHEN gc_i.CALL METHOD pv_grid->set_table_for_first_displayEXPORTING
* I_CONSISTENCY_CHECK = 'X'is_variant = gs_variant_iit_toolbar_excluding = gt_ui_funci_save = 'A'i_default = 'X' "允许定义默认布局is_layout = gs_layout_iCHANGINGit_outtab = gt_itemit_fieldcatalog = gt_fcat_iEXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.WHEN OTHERS.ENDCASE.ENDFORM. " FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& FORM FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
* Refresh ALV
*----------------------------------------------------------------------*
* -->PV_GRID GRID对象
*----------------------------------------------------------------------*
FORM frm_refresh_alv USING pv_grid TYPE REF TO cl_gui_alv_grid."刷新变量DATA: ls_stable TYPE lvc_s_stbl."刷新显示CLEAR ls_stable.ls_stable-row = 'X'."基于行刷新ls_stable-col = 'X'."基于列刷新CALL METHOD pv_grid->refresh_table_displayEXPORTINGis_stable = ls_stableEXCEPTIONSfinished = 0OTHERS = 0.ENDFORM. " FRM_REFRESH_ALV
屏幕逻辑流如下:
PROCESS BEFORE OUTPUT.MODULE STATUS_0100.MODULE init_alv.PROCESS AFTER INPUT.MODULE USER_COMMAND_0100.
状态栏按钮如下:
代码可以直接粘贴运行,只需自建一个100屏幕和状态栏即可。
OVER……
SAP OOALV分割屏幕 cl_gui_docking_containercl_gui_splitter_container <转载>相关推荐
- SAP OOALV分割屏幕
同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据. 需要用到四个对象类: cl_gui_docking_container 屏幕容器类 cl_gui_splitter_container 分割屏 ...
- OOALV 分割屏幕
1功能说明 需要开发一个报表,分为上下两个部分,下边需要再分割为左右两个部分,点击上边部分的行,下边两个报表信息发生变化. 效果如下: 2代码实现 1.数据查询 分别查询MARA.MARC.MAKT三 ...
- 如何在 SAP 轻松访问屏幕上以不同的布局创建不同的启动板
目的 您将了解如何在 SAP 轻松访问屏幕上以不同的布局创建不同的启动板. 在脚本文件夹中创建此文件,用于自定义 SAP 轻松访问屏幕:SAPLSMTR_NAVIGATION.E0100.sjs // ...
- 自定义 SAP 采购订单屏幕
由于这是我的第一篇博客文章,因此我想使用Liquid UI在SAP Easy Access屏幕上向您展示简化的SAP流程.Liquid UI 是一个企业平台,供 SAP 用户创建简化且自动化的 SAP ...
- js判断浏览器\屏幕分辨率(转载)
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- ScrollView 分割屏幕效果
1 CGRect screentRect = self.view.bounds; 2 CGRect bigRect = screentRect; 3 bigRect.size.width *= 2.0 ...
- SAP 财务月结<转载>
原文链接:https://zhuanlan.zhihu.com/p/109274142 月结是财务人员每月最忙的时候,也是最辛苦的时候.初次接触SAP的财务人员对SAP月结可能会比较陌生,尤其是成本结 ...
- 十分钟看懂语义分割技术【转载】
大多数人接触 "语义" 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复.嗯,看到这里你应该已经猜到了,图像领域也是存在 ...
- 【转】SAP采购订单屏幕增强
为采购订单增加一个页标签,在其中放入客户自定义字段, 1. CMOD 增强接口: MM06E005 EXIT_SAPMM06E_006 为子屏幕参数传入出口(抬头) EXIT_SAPMM06E_008 ...
最新文章
- Android开发中手机存储路径问题
- java基础(六章)
- 965. 单值二叉树
- LeetCode 112. Path Sum
- 基于Fabric的性能测试与调优实践
- LiveNVR视频流拉转接入传统海康大华宇视安防摄像机如何获取通道视频直播流地址 RTSP/WebRTC/RTMP/HLS/HTTP-FLV/WS-FLV
- 固定效应模型VS随机效应模型
- android维持登录状态
- Visual Studio Code中设置HTML/HTML5模板
- tidb server的oom问题优化探索
- 武魂java_js及jsp.java查错的几种方式
- 网络攻防之——指纹识别工具
- 黑客入侵微软邮件服务器部署勒索软件、惠普更新打印机漏洞|12月2日全球网络安全热点
- DBSCAN聚类算法原理及图解
- 2.整理华子面经--2
- php求价格最低,php-将Woo-commerce变体销售价格调至低于实际价格
- RK3568烧录系统
- Tryhackme -Skynet(考点:smb 密码爆破 cuppa RFI cronjob - tar提权)
- Grammer -- 助动词
- 友盟添加网站统计步骤
热门文章
- 武汉科技大学计算机考研资料汇总
- python dataframe增加一行_python - 在pandas.DataFrame中添加一行
- Django搭建个人博客:重置用户密码
- 转行软件测试的最佳时机,一定要好好看看
- 初学oracle--join的整体实例说明
- 阅读nutch.Analysis.jj
- 房屋出租系统(初级)
- 使用pydub的坑-----Permission denied: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpmt80te3g.wav'
- SDHK_Tool.Dynamic.SD_Motor_Angle 角度旋转电机
- php 自动翻译函数(中文翻译成英文)