一个ALV(OO)的实例
个人感觉还是OO的方法较简单容易理解。这个实例,包含了grid形式全屏显示, list显示 和 grid在容器里显示的三种情况。
实例需要定义一个screen 0100 ,包含一个名为 ‘CONTAINER’的容器。第一种情况下实现了页眉页脚的显示,对列标题修改,选定行 列以及单元格。
Report YY_ALV_TEST .
*变量定义
TYPES ty_spfli TYPE spfli OCCURS 0.
DATA: gr_table TYPE REF TO cl_salv_table,
gr_funct TYPE REF TO cl_salv_functions,
gr_columns type ref to cl_salv_columns_table,
gr_column type ref to CL_SALV_COLUMN_table.
*选择屏幕设计
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
PARAMETERS: p_full RADIOBUTTON GROUP gp,
p_list RADIOBUTTON GROUP gp,
p_grid RADIOBUTTON GROUP gp.
SELECTION-SCREEN END OF BLOCK blk.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
* ALV操作类(定义)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS: getdata "取得要显示的数据
RETURNING value(lt_tab) TYPE ty_spfli,
alv_full "全屏Grid列表处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_list "普通List处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_grid "在自定义屏幕上显示的列表
IMPORTING value(lt_tab) TYPE ty_spfli,
main. "主方法
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* ALV操作类(实现)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要显示的数据
METHOD getdata.
SELECT * INTO TABLE lt_tab FROM spfli.
ENDMETHOD. "getdata
*输出全屏网格列表的方法
METHOD alv_full.
DATA: lr_selections TYPE REF TO cl_salv_selections,
lt_column TYPE salv_t_column,
lt_row TYPE salv_t_row,
lt_cell TYPE salv_t_cell,
ls_cell TYPE salv_s_cell.
DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
lr_grid2 TYPE REF TO cl_salv_form_layout_grid,
lr_text TYPE REF TO cl_salv_form_text,
lr_action TYPE REF TO cl_salv_form_action_info,
lr_header TYPE REF TO cl_salv_form_header_info,
lr_label TYPE REF TO cl_salv_form_label.
"创建实例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_funct = gr_table->get_functions( )."<< 此行和下一行用來顯示標題的功能按鈕
gr_funct->set_all( Abap_True ). ">>
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( 'X' ).
gr_column ?= gr_columns->Get_Column( 'PERIOD' ). "<<此行和下一行來隱藏'PERIOD'欄位
gr_column->SET_VISIBLE( abap_false ). ">>
gr_column ?= gr_columns->Get_Column( 'DISTANCE' ). "<<此行和下一行設置列標題顯示名
gr_column->SET_LONG_TEXT('飛行距離' ). ">>
"取得类CL_SALV_SELECTIONS的实例
lr_selections = gr_table->get_selections( ).
"设置选择模式
lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
"选择列
APPEND 'FLTIME' TO lt_column.
APPEND 'DISTANCE' TO lt_column.
lr_selections->set_selected_columns( lt_column ).
"选择行
APPEND 3 TO lt_row.
APPEND 4 TO lt_row.
lr_selections->set_selected_rows( lt_row ).
"选择一个单元格
ls_cell-row = 7.
ls_cell-columnname = 'CITYFROM'.
lr_selections->set_current_cell( ls_cell ).
"页眉页脚
CREATE OBJECT: lr_grid,lr_grid2.
lr_header = lr_grid->create_header_information(
row = 1
column = 1
text = 'Header Information'
).
lr_label = lr_grid->create_label(
row = 2
column = 1
text = 'Label'
).
lr_action = lr_grid->create_action_information(
row = 3
column = 1
text = 'Action Information'
).
lr_text = lr_grid->create_text(
text = 'text'
row = 4
column = 1
).
gr_table->set_top_of_list( lr_grid ).
lr_text = lr_grid2->create_text(
text = 'end of page'
row = 1
column = 1
).
gr_table->set_end_of_list( lr_grid2 ).
" "弹出窗口设置
" gr_table->set_screen_popup(
" start_column = 1
" end_column = 120
" start_line = 1
" end_line = 20 ).
gr_table->display( ).
ENDMETHOD. "alv_ful
*输出全屏普通列表的方法
METHOD alv_list.
DATA: lr_display TYPE REF TO cl_salv_display_settings.
"创建实例
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = 'X'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_funct = gr_table->get_functions( ).
gr_funct->set_all( 'X' ).
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( 'X' ).
"设置ALV的显示样式
lr_display = gr_table->get_display_settings( ).
lr_display->set_striped_pattern( 'X' ). "设置颜色间隔显示
lr_display->set_list_header( 'Elliott''s ALV Test' ). "设置ALV的抬头
lr_display->set_horizontal_lines( '' ). "设置水平线是否显示
lr_display->set_vertical_lines( '' ). "设置垂直线是否显示
gr_table->display( ).
ENDMETHOD. "alv_list
*输出在自定义屏幕上的列表
METHOD alv_grid.
CALL SCREEN '0100'.
ENDMETHOD. "alv_grid
*主方法,整合数据
METHOD main.
DATA: lt_tab TYPE TABLE OF spfli.
"取得要显示的数据
lt_tab = me->getdata( ).
"判断选择屏幕的选择条件调用不同的方法
CASE 'X'.
WHEN p_full.
me->alv_full( lt_tab ).
WHEN p_list.
me->alv_list( lt_tab ).
WHEN p_grid.
me->alv_grid( lt_tab ).
ENDCASE.
ENDMETHOD. "main
ENDCLASS. "lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* MODULE status_0100
*----------------------------------------------------------------------*
* PBO 屏幕输出前执行
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
"定义变量
DATA: lr_container TYPE REF TO cl_gui_custom_container,
lr_alv2 TYPE REF TO lcl_alv,
lt_tab TYPE TABLE OF spfli.
"创建容器实例
IF cl_salv_table=>is_offline( ) = ''.
CREATE OBJECT lr_container
EXPORTING
container_name = 'CONTAINER'.
ENDIF.
"创建类LCL_ALV实例
CREATE OBJECT lr_alv2.
"取得列表数据
lt_tab = lr_alv2->getdata( ).
"创建ALV实例
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = lr_container
container_name = 'CONTAINER'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示ALV列表
gr_funct = gr_table->get_functions( ).
gr_funct->set_all( Abap_True ).
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( 'X' ).
gr_table->display( ).
"释放内存
FREE lt_tab.
ENDMODULE. "status_0100
*----------------------------------------------------------------------*
* MODULE user_command_0100
*----------------------------------------------------------------------*
* PAI 屏幕输出后的动作
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ENDMODULE. "user_command_0100
*报表执行
START-OF-SELECTION.
DATA lr_alv TYPE REF TO lcl_alv.
CREATE OBJECT lr_alv.
lr_alv->main( ).
一个ALV(OO)的实例相关推荐
- ABAP ALV OO 自定义Toolbar 和Command及listmenu按钮
ALV OO 自定义Toolbar 和Command及listmenu按钮 前言 OOALV容器 OOALV 工具栏 1.定义OO 对象及字段 2.OO ALV FIELDCAT 字段定义 3.定义类 ...
- php 返回一个json对象,PHP给前端返回一个JSON对象的实例讲解
解决问题:用php做后台时,如何给前端发起的AJAX请求返回一个JSON格式的"对象": 说明:我本身是一个前端,工作久了之后发现要是不掌握一门后端开发语言的话,总感觉有点无力.最 ...
- python生成一个窗口_PyQt5创建一个新窗口的实例
更多python教程请到友情连接: 菜鸟教程www.piaodoo.com 人人影视www.sfkyty.com 飞卢小说网www.591319.com 韩剧网www.op-kg.com 兴化论坛ww ...
- 用python写搜索引擎_用python做一个搜索引擎(Pylucene)的实例代码
1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...
- 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码
1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...
- python写一个游戏多少代码-使用Python写一个贪吃蛇游戏实例代码
我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...
- python游戏脚本实例-使用Python写一个贪吃蛇游戏实例代码
我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...
- Java Tread多线程(0)一个简单的多线程实例
作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...
- android 7 创建文件夹,Android 在 res/layout 文件夹 下创建一个 子文件夹实例
Android 资源文件夹 Layout 文件夹 Layout 文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹,你会发现xml文件报错. 如何在Layout文件夹下方 ...
最新文章
- Code-First Migrations随Entity Framework 4.3一同发布
- 一个图片 在另一个图片定位_淋雨图片孤身一人 一个人在淋雨的图片_新闻资讯...
- 实验一 Part 1 开发环境的配置运行
- Marvell 88E1111 linux driver
- Learning-Python【0】:Windows环境下Python2和Python3的安装
- Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案
- azure云数据库_保护Azure SQL数据库免于意外删除
- Android音频开发(2):如何采集一帧音频
- JWT跨域身份验证解决方案
- 【车道线检测与寻迹】2月13日 CV导论+数字图像处理与opencv实践+canny边缘检测
- BOOST库介绍(六)——容器
- 通过JavaScript脚本轻松实现视频通话
- 企业工资管理系统论文
- 非接触式IC卡的分类(三)
- 计算机主机的三大部分,计算机系统的三大组成部分
- 无线桥接怎么设置网关和dns服务器,斐讯K2路由器怎么设置桥接_斐讯K2无线中继设置教程-192路由网...
- properties解耦数据库参数和SQL参数的传递
- JavaScript实现二级联动下拉菜单
- 困难模式60级斗士双持武器(一手一把)技能点加发!--个人意见!
- UG NX中的一条曲线的点集进行导出时顺序是乱的,如何进行排序或按照导出点集