ABAP 动态的实现任意表的ALV显示
2011-11-23 22:20
423 查看
程序没有什么实用性,就是把一个表的内容全部显示出来了,仅用于看看数据都是什么样子的,但是其中的动态的方法还是值得研究学习的。这些方法是从我的前辈身上学到的,我小小的实践了一下,本来认为在编写程序的可以尽可能的实现程序的可配置型,然后这种想法是虽然好,不过自己没有办法实现。例如
我想 DATA 内表 TYPE TABLE OF 任意表的名称。
开始 简单的认为 DATA GR_TABNAME TYPE TABNAME.
DATA 内表 TYPE TABLE OF (GR_TABNAME).
然而这是行不通的。于是采用了动态的方式实现了类似的思想。
第一部分:程序框架
REPORT ZALV_20090304_EVENT.
INCLUDE ZALV_DATA_INTI.
INCLUDE ZALV_EVENT_F01.
START-OF-SELECTION.
PERFORM SUB_ALV_DATA_GET.
第二部分:INCLUDE ZALV_DATA_INTI.
TYPE-POOLS:ABAP.
PARAMETERS P_NAME TYPE OBJNAME.
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
TABNAME = P_NAME
TABLES
* X031L_TAB =
DFIES_TAB = LT_TABLE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA TYPE REF TO CL_ABAP_DATADESCR.
DATA L_STRING TYPE STRING.
DATA LT_COMP TYPE ABAP_COMPONENT_TAB.
DATA LS_COMP LIKE LINE OF LT_COMP.
DATA E_WA TYPE REF TO DATA.
DATA E_TABLE TYPE REF TO DATA.
FIELD-SYMBOLS <FS_TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <FS_STRUC> TYPE ANY.
LOOP AT LT_TABLE INTO LS_TABLE.
CONCATENATE LS_TABLE-TABNAME '-' LS_TABLE-FIELDNAME INTO L_STRING.
* L_STRING = LS_COMP-NAME.
LS_COMP-NAME = LS_TABLE-FIELDNAME.
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = L_STRING
RECEIVING
P_DESCR_REF = LR_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LS_COMP-TYPE ?= LR_TYPE.
APPEND LS_COMP TO LT_COMP.
CLEAR LS_COMP.
ENDLOOP.
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = LT_COMP
RECEIVING
P_RESULT = LR_STRUC
.
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = LR_STRUC
RECEIVING
P_RESULT = LR_TABLE
.
CREATE DATA E_WA TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.
ASSIGN E_WA->* TO <FS_STRUC>.
ASSIGN E_TABLE->* TO <FS_TABLE>.
第三部分:INCLUDE ZALV_EVENT_F01.
FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE <FS_TABLE> FROM (P_NAME).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_NAME
TABLES
T_OUTTAB = <FS_TABLE>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
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. " SUB_ALV_DATA_GET
我想 DATA 内表 TYPE TABLE OF 任意表的名称。
开始 简单的认为 DATA GR_TABNAME TYPE TABNAME.
DATA 内表 TYPE TABLE OF (GR_TABNAME).
然而这是行不通的。于是采用了动态的方式实现了类似的思想。
第一部分:程序框架
REPORT ZALV_20090304_EVENT.
INCLUDE ZALV_DATA_INTI.
INCLUDE ZALV_EVENT_F01.
START-OF-SELECTION.
PERFORM SUB_ALV_DATA_GET.
第二部分:INCLUDE ZALV_DATA_INTI.
TYPE-POOLS:ABAP.
PARAMETERS P_NAME TYPE OBJNAME.
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
TABNAME = P_NAME
TABLES
* X031L_TAB =
DFIES_TAB = LT_TABLE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA TYPE REF TO CL_ABAP_DATADESCR.
DATA L_STRING TYPE STRING.
DATA LT_COMP TYPE ABAP_COMPONENT_TAB.
DATA LS_COMP LIKE LINE OF LT_COMP.
DATA E_WA TYPE REF TO DATA.
DATA E_TABLE TYPE REF TO DATA.
FIELD-SYMBOLS <FS_TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <FS_STRUC> TYPE ANY.
LOOP AT LT_TABLE INTO LS_TABLE.
CONCATENATE LS_TABLE-TABNAME '-' LS_TABLE-FIELDNAME INTO L_STRING.
* L_STRING = LS_COMP-NAME.
LS_COMP-NAME = LS_TABLE-FIELDNAME.
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = L_STRING
RECEIVING
P_DESCR_REF = LR_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LS_COMP-TYPE ?= LR_TYPE.
APPEND LS_COMP TO LT_COMP.
CLEAR LS_COMP.
ENDLOOP.
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = LT_COMP
RECEIVING
P_RESULT = LR_STRUC
.
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = LR_STRUC
RECEIVING
P_RESULT = LR_TABLE
.
CREATE DATA E_WA TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.
ASSIGN E_WA->* TO <FS_STRUC>.
ASSIGN E_TABLE->* TO <FS_TABLE>.
第三部分:INCLUDE ZALV_EVENT_F01.
FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE <FS_TABLE> FROM (P_NAME).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_NAME
TABLES
T_OUTTAB = <FS_TABLE>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
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. " SUB_ALV_DATA_GET
相关文章推荐
- ABAP 动态的实现任意表的ALV显示
- ABAP开发如何动态的实现任意表的ALV显示
- ABAP实现ALV表头动态输出--日期
- abap在普通屏幕实现动态显示隐藏屏幕元素
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能 activeandbadboy [原作]
- 使用jQuery Uploadify借助Dorado平台实现批量上传文件动态显示实时上传文件状态
- Java 程序设计 利用线程实现动态显示系统时间
- QT下利用QWT来实现二维曲线图动态显示
- XtraGrid控件,实现在界面中动态修改列显示,列名列宽
- 利用动态图层实现数据的实时显示
- Ajax实现动态显示并操作表信息的方法
- WEB Struts2 国际化构建,并实现显示动态信息
- 用VC实现动态改变Windows的显示特性
- js实现在文本框输入图片的路径,在下方动态显示图片
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子)
- 如何把导航条做成sitefactory政府版的样子实现动态读取子栏目显示
- 关于动态加载的页面实现任意位置拖动
- WEB Struts2 国际化构建,并实现显示动态信息