ABAP开发如何动态的实现任意表的ALV显示
2015-07-13 14:58
246 查看
在ABAP开发中如何动态的实现任意表的ALV的显示,以下是具体操作步骤:
第一部分:程序框架
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 TYPE STANDARD TABLE.
FIELD-SYMBOLS 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 .
ASSIGN E_TABLE->* TO .
第三部分:INCLUDE ZALV_EVENT_F01.
FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE FROM (P_NAME).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_NAME
TABLES
T_OUTTAB =
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
第一部分:程序框架
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 TYPE STANDARD TABLE.
FIELD-SYMBOLS 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 .
ASSIGN E_TABLE->* TO .
第三部分:INCLUDE ZALV_EVENT_F01.
FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE FROM (P_NAME).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_NAME
TABLES
T_OUTTAB =
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
相关文章推荐
- BASIS--如何删除开发用户的开发Key
- 黑马程序员--Objective-C——第一个OC程序
- nodejs-2:模块与包管理工具
- webx--petstore
- 记录我的Spring学习过程,大神勿看
- 抓包工具之:Wireshark 和 RawCap
- Lucene初接触
- HTML5 Canvas clearRect無法清除問題
- Kafka设计解析(三):Kafka High Availability (下)
- ABAP-获取用户的组织结构权限
- 轮播图demo
- ORA-00119 ORA-00132 解决方案
- python 之 模拟GET/POST提交
- Html jquery实现根据 IOS和Android访问跳转
- Angel工作室EasyUI通用权限管理框架正式发布
- Kafka设计解析(二):Kafka High Availability (上)
- 支持连接池和结果集缓存的MySQL数据库JDBC通用框架的轻量级封装(一)——粗略实现
- 置换的玩笑(搜索)(中等)(计蒜之道 测试赛 c)
- MM中如何更改物料的评估类
- PP 关于工单领料的总结