您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: