简单的OO ALV小示例
OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV。它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕。
示例展示:


1. 进入实用程序-->显示对象列表:

2.点击创建屏幕9000:

3. 开始画第一个屏幕:

4.画图如下:

部分字段属性:




5. 记得此处输入OK_CODE用于接受屏幕返回值:

6.启用9000 OUTPUT INPUT.

7.双击MODULE STATUS_9000.设置屏幕为A1,激活显示屏幕状态栏,点击创建-->GUI状态:



8.双击MODULE USER_COMMAND_9000.对屏幕状态进行响应:
DATA: ok_code(3).
MODULE USER_COMMAND_9000 INPUT.
DATA lv_ok(3).
lv_ok = ok_code.
CASE lv_ok.
WHEN 'YES'.
CALL SCREEN 9001.
WHEN '&F1'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
9.制作OO ALV屏幕9001用于装载数据:


10. 设置MODULE STATUS_9001.MODULE USER_COMMAND_9001.如下:
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'A2'.
ENDMODULE.
MODULE USER_COMMAND_9001 INPUT.
lv_ok = ok_code.
CASE lv_ok.
WHEN 'YES' OR '&F1'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
11.添加MODULE INIT_ALV.处理OO ALV数据:

12.源代码如下(因此示例只是自己学习所用,代码仍有改进之处):
*&---------------------------------------------------------------------*
*& Report ZTEST004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST004.
*======================================================================*
* 说明书编号 :
* 程序名称 : ZSDR16
* 程序描述 :
* 功能顾问 : XIONGHN
* 开发顾问 :
* 开始日期 :
* 完成日期 :
*======================================================================*
* 修改历史.
*----------------------------------------------------------------------*
*
*序号. 修改人 日期 描述
*--- ----------- ---- -----------
*
*
*======================================================================*
* Tables used in the program
*TABLES: likp , lips , zsdf04_1.
*======================================================================*
*======================================================================*
* Type declarations in the program
*======================================================================*
*TYPE-POOLS: SLIS.
TYPES: BEGIN OF ty_alv,
vkorg TYPE vbak-vkorg,
tl_netwr TYPE vbap-netwr,
waerk TYPE vbap-waerk,
year TYPE char4,
month TYPE char2,
END OF ty_alv.
TYPES: BEGIN OF ty_vbakpa,
vkorg TYPE vbak-vkorg,
erdat TYPE vbak-erdat,
netwr TYPE vbap-netwr,
waerk TYPE vbap-waerk,
END OF ty_vbakpa.
TYPES: BEGIN OF ty_vbakpb,
vkorg TYPE vbak-vkorg,
erdat TYPE vbak-erdat,
netwr TYPE vbap-netwr,
waerk TYPE vbap-waerk,
END OF ty_vbakpb.
*======================================================================*
* Internal Tables used in the program
*======================================================================*
DATA : gt_fcat TYPE TABLE OF lvc_s_fcat,
gs_fcat TYPE lvc_s_fcat,
gs_layo TYPE lvc_s_layo.
DATA: go_alva TYPE REF TO cl_gui_alv_grid,
go_alvb TYPE REF TO cl_gui_alv_grid,
go_cona TYPE REF TO cl_gui_custom_container,
go_conb TYPE REF TO cl_gui_custom_container.
DATA: gt_dataa TYPE TABLE OF ty_alv,
gs_dataa TYPE ty_alv.
DATA: gt_datab TYPE TABLE OF ty_alv,
gs_datab TYPE ty_alv.
DATA: gt_vbakpa TYPE TABLE OF ty_vbakpa,
gs_vbakpa TYPE ty_vbakpa.
DATA: gt_vbakpb TYPE TABLE OF ty_vbakpb,
gs_vbakpb TYPE ty_vbakpb.
DATA: gt_waerka TYPE vbap-waerk,
gt_waerkb TYPE vbap-waerk.
DATA: gv_vkorga TYPE vbak-vkorg,
gv_vkorgb TYPE vbak-vkorg,
gv_yeara TYPE char4,
gv_yearb TYPE char4,
gv_montha TYPE char2,
gv_monthb TYPE char2.
DATA: ok_code(3).
*======================================================================*
* Data declarations in the program
*======================================================================*
*======================================================================*
* CONSTANTS
*======================================================================*
*======================================================================*
* Input Selection Screen
*======================================================================*
*======================================================================*
* Initialization
*======================================================================*
INITIALIZATION.
*======================================================================*
* At Selection Screen
*======================================================================*
AT SELECTION-SCREEN.
*======================================================================*
* AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT .
*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
*======================================================================*
* Start of Selection
*======================================================================*
START-OF-SELECTION.
CALL SCREEN 9000.
*======================================================================*
* End of Selection
*======================================================================*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GT_DATA .
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_vbakpa
FROM vbak
JOIN vbap ON vbak~vbeln = vbap~vbeln
WHERE vkorg = gv_vkorga.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_vbakpb
FROM vbak
JOIN vbap ON vbak~vbeln = vbap~vbeln
WHERE vbak~vkorg = gv_vkorgb.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form HDL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM HDL_DATA .
CLEAR gt_dataa.
CLEAR gt_datab.
SELECT DISTINCT vbap~waerk
FROM vbap
JOIN vbak ON vbap~vbeln = vbak~vbeln
INTO gt_waerka WHERE vbak~vkorg = gv_vkorga.
LOOP AT gt_vbakpa INTO gs_vbakpa
WHERE waerk = gt_waerka
AND erdat+0(4) = gv_yeara
AND erdat+4(2) = gv_montha.
gs_dataa-vkorg = gs_vbakpa-vkorg.
gs_dataa-waerk = gt_waerka.
gs_dataa-year = gv_yeara.
gs_dataa-month = gv_montha.
IF sy-subrc = 0.
gs_dataa-tl_netwr = gs_vbakpa-netwr + gs_dataa-tl_netwr.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
APPEND gs_dataa TO gt_dataa.
CLEAR gs_dataa.
CLEAR gs_vbakpa.
ENDIF.
ENDSELECT.
SELECT DISTINCT vbap~waerk
FROM vbap
JOIN vbak ON vbap~vbeln = vbak~vbeln
INTO gt_waerkb WHERE vbak~vkorg = gv_vkorgb.
LOOP AT gt_vbakpb INTO gs_vbakpb
WHERE waerk = gt_waerkb
AND erdat+0(4) = gv_yearb
AND erdat+4(2) = gv_monthb.
gs_datab-vkorg = gs_vbakpb-vkorg.
gs_datab-waerk = gt_waerkb.
gs_datab-year = gv_yearb.
gs_datab-month = gv_monthb.
IF sy-subrc = 0.
gs_datab-tl_netwr = gs_vbakpb-netwr + gs_datab-tl_netwr.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
APPEND gs_datab TO gt_datab.
CLEAR gs_datab.
CLEAR gs_vbakpb.
ENDIF.
ENDSELECT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_SHOW .
PERFORM init_layout.
PERFORM frm_set_fieldset.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INIT_LAYOUT .
CLEAR gs_layo.
gs_layo-cwidth_opt = 'X'.
gs_layo-zebra = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDSET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_FIELDSET .
PERFORM frm_init_fieldcat USING 'VKORG' '销售组织' 'X' 10.
PERFORM frm_init_fieldcat USING 'TL_NETWR' '销售额' space 10.
PERFORM frm_init_fieldcat USING 'WAERK' '销售币别' space 6.
PERFORM frm_init_fieldcat USING 'YEAR' '年份' space 6.
PERFORM frm_init_fieldcat USING 'MONTH' '月份' space 4.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0396 text
* -->P_0397 text
* -->P_SPACE text
* -->P_10 text
*----------------------------------------------------------------------*
FORM FRM_INIT_FIELDCAT USING VALUE(p_fieldname) TYPE lvc_fname
VALUE(p_scrtext) TYPE scrtext_l
VALUE(p_key) TYPE lvc_key
VALUE(p_len) TYPE lvc_outlen.
gs_fcat
-fieldname = p_fieldname.
gs_fcat
-scrtext_l = p_scrtext.
gs_fcat
-key = p_key.
gs_fcat
-outputlen = p_len.
APPEND gs_fcat to gt_fcat.
CLEAR gs_fcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'A1'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS 'A2'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_ALV OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE INIT_ALV OUTPUT.
CLEAR gt_fcat.
PERFORM con_free.
PERFORM gt_data.
PERFORM hdl_data.
IF gt_dataa IS INITIAL AND gt_datab IS INITIAL.
MESSAGE '没有符合的数据,请重新查询' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
PERFORM alv_show.
ENDIF.
CREATE OBJECT go_cona
EXPORTING
container_name
= 'CONA'.
CREATE OBJECT go_alva
EXPORTING
i_parent
= go_cona.
CALL METHOD go_alva->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT
= gs_layo
CHANGING
IT_OUTTAB
= gt_dataa
IT_FIELDCATALOG
= gt_fcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION
= 1
PROGRAM_ERROR
= 2
TOO_MANY_LINES
= 3
others = 4
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
IF go_conb IS INITIAL.
CREATE OBJECT go_conb
EXPORTING
container_name
= 'CONB'.
CREATE OBJECT go_alvb
EXPORTING
i_parent
= go_conb.
CALL METHOD go_alvb->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT
= gs_layo
CHANGING
IT_OUTTAB
= gt_datab
IT_FIELDCATALOG
= gt_fcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION
= 1
PROGRAM_ERROR
= 2
TOO_MANY_LINES
= 3
others = 4
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ELSE.
CALL METHOD go_alvb->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
DATA lv_ok(3).
lv_ok
= ok_code.
CASE lv_ok.
WHEN 'YES'.
CALL SCREEN 9001.
WHEN '&F1'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
lv_ok
= ok_code.
* CLEAR ok_code.
CASE lv_ok.
WHEN 'YES' OR '&F1'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form CON_FREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CON_FREE .
IF go_alva IS NOT INITIAL.
CALL METHOD go_alva->FREE
EXCEPTIONS
CNTL_ERROR
= 1
CNTL_SYSTEM_ERROR
= 2
others = 3
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
FREE go_alva.
ENDIF.
IF go_cona IS NOT INITIAL.
CALL METHOD go_cona->free
EXCEPTIONS
CNTL_ERROR
= 1
CNTL_SYSTEM_ERROR
= 2
OTHERS = 3.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
FREE go_cona.
ENDIF.
ENDIF.
ENDFORM.
简单的OO ALV小示例的更多相关文章
- 简单的OO ALV显示ALV及下载
REPORT OO_ALV. CLASS OO_ALV DEFINITION. PUBLIC SECTION. METHODS:GET_DATA IMPORTING AMOUNT TYPE I,&qu ...
- ALV详解:OO ALV
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 最简单的视音频播放示例7:SDL2播放RGB/YUV
本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...
- UEditor之实现配置简单的图片上传示例
UEditor之实现配置简单的图片上传示例 原创 2016年06月11日 18:27:31 开心一笑 下班后,阿华到楼下小超市买毛巾,刚买完出来,就遇到同一办公楼里另一家公司的阿菲,之前与她远远的有过 ...
- ReactNative新手学习之路06滚动更新ListView数据的小示例
本节带领大家学习使用ListView 做一个常用的滚动更新数据示例: 知识点: initialListSize={200} 第一次加载多少数据行 onEndReached={this.onEndRea ...
- Nginx 简单的负载均衡配置示例(转载)
原文地址:Nginx 简单的负载均衡配置示例(转载) 作者:水中游于 www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP. 用户访问http://www ...
- 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)
本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...
- MVC客户端验证的小示例
MVC客户端验证的小示例 配置客户端验证的可用性: <configuration> <appSettings> <add key="ClientValidat ...
- python实现简单的循环购物车小功能
python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...
随机推荐
- 【php】单例模式和工厂模式
单例模式:防止重复实例化,避免大量的new操作,减少消耗系统和内存的资源,使得有且仅有一个实例对象 header("Content-type: text/html; charset=utf- ...
- 用shell统计表格数据
今天有个人问了这样一个问题,图片是原题,在这个题的基础上写了一个实现方法 首先日志存到a.txt文本里,如下 Zhangsan|lisi1|0|Zhangsan|lisi2|10|Zhangsan|l ...
- .NET常用功能
1.判断对象判不为null或不为""或不为"undefined" public static bool isNotNullOrBlank(Object obj) ...
- Cocos Creator学习一:学习目录以及v2.0 必须关注的网址
学习目录: <Cocos Creator学习二:查找节点和查找组件> <Cocos Creator学习三:生命周期回调函数> <Cocos Creator学习四:按钮响应 ...
- 外排序 External sorting
2019-04-17 18:11:34 外排序(External sorting)是指能够处理极大量数据的排序算法.通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘) ...
- 浅谈Pool对象
Pool对象的技术指标: 避免频繁创建经常使用的稀有资源,提高工作效率. 控制阀值,很多情况下一些关键资源都有一个最佳并发数,超过这个拐点性能有可能急剧下降,也有可能继续增大并发数性能不能提升. 安全 ...
- Envoy 源码分析--network L4 filter manager
目录 Envoy 源码分析--network L4 filter manager FilterManagerImpl addWriteFilter addReadFilter addFilter in ...
- XFS文件系统的备份和恢复
1.工具 XFS文件系统提供了xfsdump和xfsrestore来协助备份.恢复XFS文件系统中的数据,xfsdump按inode顺序来备份XFS文件系统,备份时不需要卸载文件系统,备份和恢复的过程 ...
- 《Hello world 团队》第二次作业:团队项目选题报告
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验六 团队作业2:团队项目选题 团队名称 <hello--world团队> ...
- linux 一键安装lnmp环境
①,登陆后运行:screen -S lnmp ②.如果提示screen: command not found 命令不存在可以执行: yum install wget ③. 执行命令:wget ...