ABAP OO与ALV结合方式探索(1)
用OO来开发,尤其是在复杂业务的开发过程中
从程序设计的角度而言,应该更简单一点
而ALV是二次开发中登场很高的一个控件
最近做了一些尝试,探索OO的代码和ALV的结合使用
使用控件型的ALV
ALV直接写在BO对象中
本质上,只是用OO的语法来重写了一下form的调用方式
初步实现了OO和ALV的使用
TYPES:
BEGIN OF ts_bo,
datum TYPE sy-datum,
uzeit TYPE sy-uzeit,
value TYPE string,
END OF ts_bo,
tt_bo TYPE ts_bo OCCURS 0. CLASS lcl_bo DEFINITION.
PUBLIC SECTION.
METHODS:
mock,"模拟业务操作
alv_config," alv 显示参数
alv_display."alv PRIVATE SECTION.
DATA:
gt_bo TYPE tt_bo,
gt_fieldcat TYPE lvc_t_fcat," 显示字段列表
gs_layout TYPE lvc_s_layo , " 页面布局
g_container TYPE REF TO cl_gui_custom_container, " 容器
g_grid TYPE REF TO cl_gui_alv_grid. " 显示Grid ENDCLASS. CLASS lcl_bo IMPLEMENTATION.
METHOD mock.
DATA: ls_bo TYPE ts_bo.
DO 10 TIMES.
ls_bo-datum = sy-datum + sy-index.
ls_bo-uzeit = sy-uzeit.
ls_bo-value = 'Times:' && sy-index.
APPEND ls_bo TO gt_bo.CLEAR ls_bo.
ENDDO.
ENDMETHOD. METHOD alv_config.
DATA:
ls_fieldcat TYPE lvc_s_fcat.
ls_fieldcat-fieldname = 'DATUM'.ls_fieldcat-coltext = '日期'. APPEND ls_fieldcat TO gt_fieldcat.CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'UZEIT'.ls_fieldcat-coltext = '时间'. APPEND ls_fieldcat TO gt_fieldcat.CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'VALUE'.ls_fieldcat-coltext = '内容'. APPEND ls_fieldcat TO gt_fieldcat.CLEAR ls_fieldcat. gs_layout-sel_mode = 'A'.
gs_layout-zebra = 'X' .
gs_layout-cwidth_opt = 'X'.
ENDMETHOD.
METHOD alv_display.
IF g_grid IS INITIAL.
CREATE OBJECT g_container
EXPORTING
container_name = 'C0100'. CREATE OBJECT g_grid
EXPORTING
i_parent = g_container. CALL METHOD g_grid->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* is_variant = gs_variant
i_save = 'A'
i_default = 'X'
* is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* it_toolbar_excluding = gt_exclude
* IT_HYPERLINK =
CHANGING
it_outtab = gt_bo
it_fieldcatalog = gt_fieldcat
* it_sort = gt_sort
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ELSE.
CALL METHOD g_grid->refresh_table_display.
ENDIF. ENDMETHOD. "display ENDCLASS. DATA:
ok_code TYPE sy-ucomm,
go_bo TYPE REF TO lcl_bo. START-OF-SELECTION.
CREATE OBJECT go_bo.
go_bo->mock( ).
go_bo->alv_config( ).
CALL SCREEN 100. MODULE status_0100 OUTPUT.
SET PF-STATUS 'PS100'.
go_bo->alv_display( ).
ENDMODULE. " STATUS_0100 OUTPUT MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK'.
SET SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
效果如下:

从代码上也能体现
method仅仅是替代了form的作用
并没有体现出OO的什么特性
如果一个程序中有多个ALV 多个复杂的对象
唯一的好处就是每个对象的数据独立了出来
比一股脑的全局数据要好一点
一个BO对象既要关注取数逻辑
又要关注显示功能
从设计模式中类的角度而言
无法满足单一职责的要求
显然这种代码的组织方式还可以改进
未完待续…
下一篇 数据与显示的分离
ABAP OO与ALV结合方式探索(1)的更多相关文章
- ABAP OO与ALV结合方式探索(2)
接上篇 一开始设计的BO 类是为了实现功能而实现功能 从类的单一职责的角度而言 先把这个BO对象拆分 这里又有一个需要考虑的点: 如何传递内表数据到ALV 如果引入一个中间变量,数据就会被do ...
- ABAP OO的八大理由
原贴地址:http://scnblogs.techweb.com.cn/abaplv/archives/127.html 几年前SAP BASIS 4.6为ABAP扩展了OO功能,这是很多传统的ABA ...
- OO的ALV隐藏工具栏的form
OO的ALV隐藏工具栏: ***展示数据 CALL METHOD gr_alvgrid->set_table_for_first_display EXPORTING is_variant = g ...
- 通过接口标准化ABAP OO开发
本文是对接口编程的讨论,希望能对年轻的开发者有所帮助. 要点: 通过接口对类方法进行更高层的抽象 接口使代码清晰易读 接口使你可以创建模拟对象(Mockup Object)以提高代码的可测试性 帮助实 ...
- ABAP分享二 ALV标准范例DEMO汇总
SAP软件针对ALV的使用方法,提供了ALV标准demo程序: sap提供的ALV标准demo程序,只是展示简单的数据,用function ALV即可,若有复杂的增删改查操作 建议使用OO ALV,下 ...
- ABAP OO 开发语法整理
[转自 http://blog.csdn.net/saphome/article/details/6956933] 在类中,只能用TYPE 附加关键字指定数据类型. •TYPES: 一般的类型定义方法 ...
- ABAP分享六 alv显示的几种方式的简单示例
方法1,也是大家常见的方法通过函数 REUSE_ALV_GRID_DISPLAY TYPES: BEGIN OF ty_spfli, "定义结构 carrid like s ...
- ABAP分享五 ALV修改单元格并将修改数据更新到数据表中示例1
*下面的代码是在alv字段中修改字段的内容,点击保存后就可以保存数据至数据表. TABLES: spfli. DATA: wa_fieldcat TYPE lvc_s_fcat , " 相 ...
- OO ALV 学习参考
http://blog.csdn.net/sapliumeng/article/details/18653491 一.ALV介绍 The ALV Grid Control (ALV = SAPLi ...
随机推荐
- 0c-33-@class,循环retain
2个对象互相有着引用,A中有B,B中有A. // 对于循环retain的情况,对象不能够释放,此时只能让一方使用assign一方使用retain,retain用于对象assign用于基本类型,assi ...
- IPC——数据报套接字通信
Linux进程间通信——使用数据报套接字 前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接 ...
- fir.im Weekly - 2016 移动开发技术大回顾
2016 年是移动技术发展迅速的一年,认认真真回顾这一年必不可少.@移动开发前线 的 这篇 2016移动开发技术巡礼 ,精心盘点了 2016 年 移动开发技术大事件,分为 iOS/Android平台篇 ...
- 项目源码--IOS自定义视频播放器
下载源码 技术要点: 1. 视频播放器功能的实现 2. 视频文件的扫描与管理 3. Ipad UI的实现 4.源码详细的中文注释 ……. 详细介绍: 1. 视频播放器功能的实现 源码基于MediaPl ...
- jquery ui 改写cloes事件
htmlAjax:{//模板ajax请求参数设置项 url:"template/task/task_create.html", data ...
- XACML-条件评估(Condition evaluation),规则评估(Rule evaluation),策略评估(Policy evaluation),策略集评估(PolicySet evaluation)
本文由@呆代待殆原创,转载请注明出处. 一.条件评估(Condition evaluation) <Condition>元素缺失时或评估结果为真时,条件值为True. <Condit ...
- Java基础知识强化106:Java中 int 的各进制之间的转换
1.二.八.十.十六进制之间的转换 下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...
- 转js contains 方法
function Jcontains(root, el) { if (root.compareDocumentPosition) return root === el || !!(root.compa ...
- TFS 2010 使用手册(二)项目集合与项目
1.项目集合 1.1 项目集合创建 打开TFS管理控制台,点击“团队项目集合”. 图1点击“团队项目集合” 图2 点击“创建集合” 然后按照向导一步步完成项目集合的创建. 1.2 项目集合的删除 选中 ...
- 源自梦想 自定义ViewGroup的整理_2
Android项目: 1.准备资源图片.图片放到hdip里和mdip里对想过的影响:对于320*480的模拟器,默认去mdip里去找图片资源,拿过来的图片可以直接用,清晰度不变.要是所要找的图片在hd ...