ABAP - OO ALV基本实现步骤

  • 新建程序
  • 定义屏幕
  • PBO实现
  • PAI实现
  • 完整代码

新建程序

使用T-code:SE38

新建Report: ZOOALV

为新建的Report分配一个package,在这里我用本地包代替,实际工作中会有很多个环境,这个package是用来装传输请求,起到在不同环境中的传输代码的作用,在这里不做详细阐明,如下图点击Local Object,进入ABAP 编辑器界面

定义屏幕

在该界面中有两种创建屏幕的方式:

  1. 使用代码CALL SCREEN 100,然后双击100进行创建;
  2. 点击ABAP编辑器菜单工具栏中的Display Object List按钮,在编辑器的左侧会出现导航界面,右键左侧导航栏中刚刚新建的Report:ZOOALV,点击Create --> Screen

点击之后进入如下界面,添加Title,点击保存并激活,屏幕创建成功

点击菜单工具栏中的Layout按钮,为屏幕增加用于显示ALV Grid的容器,点击Custom Control在这里不要忘记定义容器的NAME: go_container

画好容器之后不要忘了检查Element List容器的NAME是否添加成功,然后再将ok_code添加好,在这里用来显示ALV的屏幕就画好了

接下来开始实现PBO & PAI

PBO实现

PBO = perform before output

  1. 可以在PBO里面实例化容器(cl_gui_custom_container)和ALV Grid(cl_gui_alv_grid)
  2. 定义GUI Status & GUI Title - 不详细阐述如何创建的了
  3. 获取处理输出数据
  4. 调用第一次显示ALV的方法:set_table_for_first_display
MODULE status_0100 OUTPUT.SET PF-STATUS 'STATUS'.SET TITLEBAR 'STATUS_TITLE'."instantiationPERFORM instantiation."Get DataPERFORM get_data."First displayPERFORM display.ENDMODULE.
FORM instantiation .CREATE OBJECT go_containerEXPORTINGcontainer_name = 'GO_CONTAINER'.CREATE OBJECT go_gridEXPORTINGi_parent = go_container.ENDFORM.
FORM get_data .SELECT * FROM sflight INTO TABLE gt_outtab UP TO 100 ROWS.
ENDFORM.
FORM display .DATA: lo_event TYPE REF TO cl_event_receiver.DATA: ls_layout TYPE lvc_s_layo."Resgister event method for cl_gui_alv_gridCREATE OBJECT lo_event.SET HANDLER lo_event->handle_hotspot_click FOR go_grid.SET HANDLER lo_event->handle_double_click FOR go_grid.SET HANDLER lo_event->handle_toolbar FOR go_grid.SET HANDLER lo_event->handle_command FOR go_grid.SET HANDLER lo_event->handle_data_changed FOR go_grid.ls_layout-sel_mode = 'D'.ls_layout-cwidth_opt = 'X'.ls_layout-grid_title = 'OO ALV Grid Title'.CALL METHOD go_grid->set_table_for_first_displayEXPORTING i_structure_name = 'SFLIGHT'is_layout        = ls_layoutCHANGING  it_outtab        = gt_outtab.
ENDFORM.

PAI实现

PAI = Perform After Input

在PAI中定义user-command

MODULE user_command_0100 INPUT.DATA: ok_code TYPE syst_ucomm.ok_code = sy-ucomm.CASE ok_code.WHEN 'BACK'.LEAVE TO SCREEN 0.WHEN OTHERS.ENDCASE.ENDMODULE.

下面是完整代码

完整代码

*&---------------------------------------------------------------------*
*& Report ZOOALV
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zooalv."MAIN
CALL SCREEN 100."Data
DATA: go_grid TYPE REF TO cl_gui_alv_grid,go_container TYPE REF TO cl_gui_custom_container.DATA: gt_outtab TYPE TABLE OF sflight.CLASS cl_event_receiver DEFINITION.PUBLIC SECTION."Statement right click event methodMETHODS handle_right_clickFOR EVENT right_click OF cl_gui_alv_grid."Statement hotspot click event methodMETHODS handle_hotspot_clickFOR EVENT hotspot_click OF cl_gui_alv_gridIMPORTING e_row_id e_column_id."Statement double click event methodMETHODS handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_row e_column."Statement toolbar event methodMETHODS handle_toolbarFOR EVENT toolbar OF cl_gui_alv_gridIMPORTING e_object e_interactive."Statement user-command event methodMETHODS handle_commandFOR EVENT user_command OF cl_gui_alv_gridIMPORTING e_ucomm."Statement data change event methodMETHODS handle_data_changedFOR EVENT data_changed OF cl_gui_alv_gridIMPORTING er_data_changed.
ENDCLASS.CLASS cl_event_receiver IMPLEMENTATION."implementation right click methodMETHOD handle_right_click.BREAK mingyu.ENDMETHOD."implementation hotspot click methodMETHOD handle_hotspot_click.BREAK mingyu.ENDMETHOD."implementation double click methodMETHOD handle_double_click.BREAK mingyu.ENDMETHOD."implementation toolbar methodMETHOD handle_toolbar.BREAK mingyu.ENDMETHOD."implementation user-command methodMETHOD handle_command.BREAK mingyu.ENDMETHOD."implementation data changed methodMETHOD handle_data_changed.BREAK mingyu.ENDMETHOD.ENDCLASS.*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.SET PF-STATUS 'STATUS'.SET TITLEBAR 'STATUS_TITLE'."instantiationPERFORM instantiation."Get DataPERFORM get_data."First displayPERFORM display.ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.DATA: ok_code TYPE syst_ucomm.ok_code = sy-ucomm.CASE ok_code.WHEN 'BACK'.LEAVE TO SCREEN 0.WHEN OTHERS.ENDCASE.ENDMODULE.
*&---------------------------------------------------------------------*
*& Form INSTANTIATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM instantiation .CREATE OBJECT go_containerEXPORTINGcontainer_name = 'GO_CONTAINER'.CREATE OBJECT go_gridEXPORTINGi_parent = go_container.ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_data .SELECT * FROM sflight INTO TABLE gt_outtab UP TO 100 ROWS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display .DATA: lo_event TYPE REF TO cl_event_receiver.DATA: ls_layout TYPE lvc_s_layo."Resgister event method for cl_gui_alv_gridCREATE OBJECT lo_event.SET HANDLER lo_event->handle_hotspot_click FOR go_grid.SET HANDLER lo_event->handle_double_click FOR go_grid.SET HANDLER lo_event->handle_toolbar FOR go_grid.SET HANDLER lo_event->handle_command FOR go_grid.SET HANDLER lo_event->handle_data_changed FOR go_grid.ls_layout-sel_mode = 'D'.ls_layout-cwidth_opt = 'X'.ls_layout-grid_title = 'OO ALV Grid Title'.CALL METHOD go_grid->set_table_for_first_displayEXPORTING i_structure_name = 'SFLIGHT'is_layout        = ls_layoutCHANGING  it_outtab        = gt_outtab.
ENDFORM.

ABAP - OO ALV基本实现步骤相关推荐

  1. SAP ABAP OO ALV全屏显示

    通过CL_GUI_SPLITTER_CONTAINER拆分容器,实现OO ALV全屏幕显示. 1.创建屏幕0100 . 代码实现如下: DATA SPLITTER TYPE REF TO CL_GUI ...

  2. abap oo alv

    OO ALV 1.相关类 CL_GUI_ALV_GRID CL_GUI_CUSTOM_CONTAINER CL_GUI_DOCKING_CONTAINER CL_GUI_SPLITTER_CONTAI ...

  3. 【ABAP】OO ALV 概述

    •OO ALV,是指通过面向对象(Object-Oriented)的方式实现的ALV输出 •基本使用原理: –通过界面调用,在界面的Customer Control控件中,输出ALV •CLASS A ...

  4. OO ALV简单报表之DOCKING容器实现

    OO ALV报表实现 后面再说其他的 由简入繁助于理解 下面介绍一下OO ALV的灵魂 两个类(SE24查看): CL_GUI_ALV_GRID CL_GUI_DOCKING_CONTAINER 介绍 ...

  5. ABAP:ALV中自定义搜索帮助

    如果希望ALV中某字段具有搜索帮助,第一种办法当然是对表中某字段的引用,设置ref_table.ref_field,将自动触发该字段所带的搜索帮助. 可不可以直接设置Searh Help呢?应该不可以 ...

  6. 【转载】SAP OO ALV 在自定义屏幕上添加ALV控件 一个屏幕上使用2个ALV

    终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...

  7. SAP OO ALV 一个屏幕上使用2个ALV

    终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...

  8. ABAP OO的八大理由(四)

    OO编程优于过程编程的五个原因 下面的部分里我们将着重论述OO编程的主要优点,尽管这里所提到的优点与其他的OO语言(JAVA C++)没有什么太大的区别,我们这里着重在ABAP OO与传统的ABAP程 ...

  9. OO ALV 工具栏对于的功能码

    原文地址:OO ALV 工具栏对于的功能码作者:Lemon 图标与对应的 功能码 明细 &DETAIL 检查 &CHECK 刷新 &REFRESH 剪切 &LOCAL& ...

最新文章

  1. 什么是 ABAP Field Symbol
  2. sum和total的区别
  3. 小程序 获取当前用户地址及地图显示
  4. 职场上不会“装傻”,才是真的傻!
  5. [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
  6. 阿里大数据部门真实工作场景,和你想象的一样吗?
  7. puppet的相关介绍
  8. 经过一年的煎熬,我们还是决定把系统升级成基于 Spring Cloud 的微服务架构
  9. 机器学习--文本分析(jieba)
  10. JAVA毕业设计共享汽车管理系统计算机源码+lw文档+系统+调试部署+数据库
  11. 【Linux】进程通信、同步、IO复用代码
  12. Ajax 传参的两种方式
  13. 【测绘程序设计】——角度与弧度的转换
  14. 修改植物大战僵尸游戏存档(Java实现版)
  15. windows nginx出现 was not signaled for 5s的看过来
  16. 《前端》localStorage 和 sessionStorage-将数据存入(取出)缓存的方法-2020年10月6日
  17. 点餐系统Sprint1总结
  18. Javaweb开发入职第一天
  19. matlab圆周运动仿真,Matlab软件在推导匀速圆周运动方程及绘制图像上的应用
  20. Windows 11 修改本地账户名称

热门文章

  1. 你的分布式应用真的需要那么多同步调用么?-转自阿里中间件
  2. SINS/NHC组合导航(一)
  3. 从微服务架构实施看企业数字化转型
  4. vant官网-vant ui 首页-移动端Vue组件库
  5. 职业“小三劝退师”,真的能拯救你的婚姻吗?
  6. 预告:关于php制作桌面软件的方案与未来规划
  7. Spring 源码解读第七弹!bean 标签的解析
  8. 转:devel包 和 非devel包的区别
  9. Jquery(二)之高级用法
  10. 关掉移动光猫的路由功能,用自己的路由器拨号