OO ALV简单报表之DOCKING容器实现
OO ALV报表实现 后面再说其他的 由简入繁助于理解
下面介绍一下OO ALV的灵魂
两个类(SE24查看):
CL_GUI_ALV_GRID
CL_GUI_DOCKING_CONTAINER
介绍实现步骤:
1、创建程序(都会)
2、创建屏幕(OOALV与FUNCTION ALV的区别,屏幕自己创建,所以扩展性好)
创建GUI状态
3、撸代码
代码如下:
TABLES: SFLIGHT."输出结构
TYPES: BEGIN OF TY_OUTPUT.INCLUDE STRUCTURE SFLIGHT.
TYPES: ZBOX TYPE C,SEATSOCC_O TYPE SFLIGHT-SEATSOCC. "经济舱剩余座位
TYPES: END OF TY_OUTPUT.DATA: GT_OUTPUT TYPE TABLE OF TY_OUTPUT. "输出内表
DATA: GS_OUTPUT TYPE TY_OUTPUT. "输出工作区DATA: GS_LAYOUT TYPE LVC_S_LAYO. "布局
DATA: GT_FIELDCAT TYPE LVC_T_FCAT. "字段属性内表
DATA: GS_FIELDCAT TYPE LVC_S_FCAT. "
DATA: GV_COL TYPE I.DATA: OK_CODE TYPE SY-UCOMM. "用户功能码接收
DATA: SAVE_OK TYPE SY-UCOMM. "用户功能码接收"声明灵魂
DATA: GS_ALV TYPE REF TO CL_GUI_ALV_GRID. "屏幕alv对象
*DATA: GS_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GS_DOCK TYPE REF TO CL_GUI_DOCKING_CONTAINER. "屏幕容器对象"选择屏幕
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."调用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_ALV IS INITIAL.PERFORM FRM_SET_GRID.PERFORM FRM_SET_LAYOUT.PERFORM FRM_SET_FIELDCAT.PERFORM FRM_DISPLAY_ALV.ELSE.PERFORM FRM_REFRESH_ALV.ENDIF.ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SELECT_DATA .SELECT *FROM SFLIGHTINTO CORRESPONDING FIELDS OF TABLE GT_OUTPUTWHERE CARRID IN S_CARRID."数据处理LOOP AT GT_OUTPUT INTO GS_OUTPUT.GS_OUTPUT-SEATSOCC_O = GS_OUTPUT-SEATSMAX - GS_OUTPUT-SEATSOCC.MODIFY GT_OUTPUT FROM GS_OUTPUT.ENDLOOP.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_GRID ."实例化屏幕容器CREATE OBJECT GS_DOCKEXPORTING
* PARENT =REPID = SY-REPID "当前程序DYNNR = '0100' "屏幕编号SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_LEFT "容器吸附左侧EXTENSION = 1300 "ALV的宽度
* STYLE =
* LIFETIME = lifetime_default
* CAPTION =METRIC = 0
* RATIO = 100 "ALV的比率,优先级高于上面的EXTENSION
* NO_AUTODEF_PROGID_DYNNR =
* NAME =EXCEPTIONSCNTL_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-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.*
* CREATE OBJECT GS_CON
* EXPORTING
** PARENT =
* CONTAINER_NAME = 'GC_CON'
** STYLE =
** LIFETIME = lifetime_default
** REPID = SY-REPID
** DYNNR = '0100'
** NO_AUTODEF_PROGID_DYNNR =
* EXCEPTIONS
* CNTL_ERROR = 1
* CNTL_SYSTEM_ERROR = 2
* CREATE_ERROR = 3
* LIFETIME_ERROR = 4
* LIFETIME_DYNPRO_DYNPRO_LINK = 5
* OTHERS = 6.
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF."实例化alv展示对象CREATE OBJECT GS_ALVEXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =I_PARENT = GS_DOCK
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACEEXCEPTIONSERROR_CNTL_CREATE = 1ERROR_CNTL_INIT = 2ERROR_CNTL_LINK = 3ERROR_DP_CREATE = 4OTHERS = 5.IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .CLEAR: GS_LAYOUT.GS_LAYOUT-CWIDTH_OPT = 'X'.GS_LAYOUT-ZEBRA = 'X'.GS_LAYOUT-BOX_FNAME = 'ZBOX'. "左侧选择块GS_LAYOUT-SEL_MODE = 'A'. "A 左端有选择块 SPACE 空白
* GS_LAYOUT-EDIT = 'X'.GS_LAYOUT-DETAILINIT = 'X'.GS_LAYOUT-DETAILTITL = '详细信息'.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .DEFINE M_FIELDCAT.CLEAR GS_FIELDCAT.GS_FIELDCAT-FIELDNAME = &1.GS_FIELDCAT-REF_TABLE = &2.GS_FIELDCAT-REF_FIELD = &3.GS_FIELDCAT-SCRTEXT_L = &4.GV_COL = GV_COL + 1.GS_FIELDCAT-COL_POS = GV_COL.APPEND GS_FIELDCAT TO GT_FIELDCAT.END-OF-DEFINITION.REFRESH GT_FIELDCAT.CLEAR GV_COL.M_FIELDCAT 'CARRID' 'SFLIGHT' 'CARRID' '航线'.M_FIELDCAT 'CONNID' 'SFLIGHT' 'CONNID' '航班'.M_FIELDCAT 'FLDATE' 'SFLIGHT' 'FLDATE' '航班日期'.M_FIELDCAT 'PRICE' 'SFLIGHT' 'PRICE' '航空运费'.M_FIELDCAT 'CURRENCY' 'SFLIGHT' 'CURRENCY' '价格'.M_FIELDCAT 'PLANETYPE' 'SFLIGHT' 'PLANETYPE' '飞机类型'.M_FIELDCAT 'SEATSMAX' 'SFLIGHT' 'SEATSMAX' '经济舱位'.M_FIELDCAT 'SEATSOCC' 'SFLIGHT' 'SEATSOCC' '经济舱占据位'.M_FIELDCAT 'SEATSOCC_O' 'SFLIGHT' 'SEATSOCC' '经济舱剩余位'.M_FIELDCAT 'PAYMENTSUM' 'SFLIGHT' 'PAYMENTSUM' '当前预定总数'.M_FIELDCAT 'SEATSMAX_B' 'SFLIGHT' 'SEATSMAX_B' '商务舱位'.M_FIELDCAT 'SEATSOCC_B' 'SFLIGHT' 'SEATSOCC_B' '商务舱占据位'.M_FIELDCAT 'SEATSMAX_F' 'SFLIGHT' 'SEATSMAX_F' '头等舱位'.M_FIELDCAT 'SEATSOCC_F' 'SFLIGHT' 'SEATSOCC_F' '头等舱占据位'.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .DATA: LS_VARIANT TYPE DISVARIANT.LS_VARIANT-REPORT = 'H001'."调用方法生成alvCALL METHOD GS_ALV->SET_TABLE_FOR_FIRST_DISPLAYEXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =IS_VARIANT = LS_VARIANTI_SAVE = 'A'I_DEFAULT = 'X'IS_LAYOUT = GS_LAYOUT
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING = GT_UI_FUNC
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =CHANGINGIT_OUTTAB = GT_OUTPUTIT_FIELDCATALOG = GT_FIELDCAT
* IT_SORT =
* IT_FILTER =EXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR = 2TOO_MANY_LINES = 3OTHERS = 4.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_REFRESH_ALV .DATA: LS_STABLE TYPE LVC_S_STBL.LS_STABLE-COL = 'X'.LS_STABLE-ROW = 'X'.CALL METHOD GS_ALV->REFRESH_TABLE_DISPLAYEXPORTINGIS_STABLE = LS_STABLE
* I_SOFT_REFRESH =EXCEPTIONSFINISHED = 1OTHERS = 2.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
代码中有一块代码需要解释一下
为什么要将OK_CODE复制一份然后清空呢
这里引用一下大佬博文中的说明:
在程序中你应该使用OK_CODE来代替SY-UCOMM,这有两种原因:第一,ABAP程序可以完全控制在它里面定义的变量,第二,你不应该修改ABAP系统变量的值。然而,你必须在ABAP程序中清空OK_CODE,因为以下几个原因:如果一个屏幕中的某个按钮未设置Function Code时也是可以触发PAI事件时,并且由于其Function Code此时为空而不会去设置OK_CODE(但此时SYST- UCOMM 或 SY-UCOMM会被重新设置为空),这样的话OK_CODE中的值还为上一次触发PAI时所设置的Function Code。所以一般情况下在使用OK_CODE之前,先将OK_CODE拷贝到SAVE_OK变量中,并随后将OK_CODE清空,以便为下一次PAI事件所使用做准备(比如下一屏幕直接在屏幕上按回车时,Function Code为空,因为在回车时命令框里没有输入任何命令,则此时OK_CODE字段不会被设置,所以还回沿用上次所设置的OK_CODE,所以就会出现问题)
地址:博文地址
运行效果:
附:还有另外一种方法,用CL_GUI_CUSTOM_CONTAINER容器实现,这里就不做介绍了,想了解的同学可以自行百度或谷歌。
OVER。
OO ALV简单报表之DOCKING容器实现相关推荐
- ALV (一)、funtion ALV,OO ALV,SALV
ALV报表是我们再SAP经常需要用到的一种报表格式,除此之外还有list报表以及report的报表,他们之间可以相互的替换,但是ALV自带的函数会更多一些. 通常我们在使用ALV报表的时候有三种方式, ...
- 【ABAP】OO ALV 概述
•OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出 •基本使用原理: –通过界面调用,在界面的Customer Control控件中,输出ALV •CLASS A ...
- abap oo alv
OO ALV 1.相关类 CL_GUI_ALV_GRID CL_GUI_CUSTOM_CONTAINER CL_GUI_DOCKING_CONTAINER CL_GUI_SPLITTER_CONTAI ...
- SAP ABAP OO ALV全屏显示
通过CL_GUI_SPLITTER_CONTAINER拆分容器,实现OO ALV全屏幕显示. 1.创建屏幕0100 . 代码实现如下: DATA SPLITTER TYPE REF TO CL_GUI ...
- ABAP - OO ALV基本实现步骤
ABAP - OO ALV基本实现步骤 新建程序 定义屏幕 PBO实现 PAI实现 完整代码 新建程序 使用T-code:SE38 新建Report: ZOOALV 为新建的Report分配一个pac ...
- SAP小技巧 DOCKING容器解决分辨率问题
一 前言 通过SAP ENJOY演示中心可以学习SAP常用容器的用法(TCODE: DWDM ) 其中有5个DEMO程序介绍不同的容器 自定义容器 固定容器(DOCKING容器) 拆分器容器 easy ...
- python开源报表系统_流程设计器、表单设计器和简单报表管理开源OA系统smart-web...
smart-web2是一套相对简单的OA系统:包含了流程设计器,表单设计器,权限管理,简单报表管理等功能: 系统后端基于SpringMVC+Spring+Hibernate框架,前端页面采用JQuer ...
- OO ALV 工具栏对于的功能码
原文地址:OO ALV 工具栏对于的功能码作者:Lemon 图标与对应的 功能码 明细 &DETAIL 检查 &CHECK 刷新 &REFRESH 剪切 &LOCAL& ...
- OO ALV 设置搜索帮助的三种方式 ONF4 EVENT
一.在 FIELDCAT 中设置参照 二.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST ' 三.CALL FUNCTION ' HELP_VALUES_GE ...
最新文章
- Sentinel 高可用流量管理框架
- 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究
- html5边框有圆弧,CSS圆角有立体感的DIV边框
- 5.spring boot使用FastJson解析JSON数据
- exception日志 php_PHP 错误与异常的日志记录
- 使用Eclipse+PyDev创建Django项目一windows下
- Android开发 ---如何操作资源目录中的资源文件2
- vue hot true 不起作用_Vue + Flask 小知识(二)
- MacOS之Chrome弹框:代理要求提供用户名和密码(已解决)
- 基于SOCKS的IPv4向IPv6过渡技术
- 使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...
- (亲测有效).net framework 在计算机上已安装了更高的 4.x 版本,则无法安装以前的 4.5 版本。
- uniapp怎么使用阿里矢量图标,阿里矢量图标下载,阿里矢量图标应用,改变iconfont,uniapp 引用阿里矢量图标
- java-用for循环打印大写字母(部分简单大写字母)
- 【论文阅读笔记】faster rcnn 代码阅读细节
- C++编写COM组件
- 少儿教育和游戏的火花在哪里?
- 苹果笔记本怎样设置解除屏保时不需要输入密码
- 前端工作随笔日记 Day01
- docker push 到私服问题 : Retrying in 5 seconds