当前位置:文档之家› SAP动态内表与动态SQL技术

SAP动态内表与动态SQL技术


7
RTTI
2. 定义列结构 CLEAR: COMPDESC. WA_COMPONENTS-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( 'EKPO-MATNR WA_COMPONENTS-NAME = 'MATNR'. APPEND WA_COMPONENTS TO IT_COMPONENTS. WA_COMPONENTS-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( 'EKPO-MENGE WA_COMPONENTS-NAME = 'MENGE'. APPEND WA_COMPONENTS TO IT_COMPONENTS. WA_COMPONENTS-TYPE ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( CELLSTAB ). WA_COMPONENTS-NAME = 'CELLSTAB'. APPEND WA_COMPONENTS TO IT_COMPONREATE
使用CL_ALV_TABLE_CREATE创建动态内表:
1. 定义动态内表的数据类型
type-pools: slis. field-symbols: <dyn_table> type standard table,
<dyn_wa>, <dyn_field>. data: dy_table type ref to data, dy_line type ref to data, wa_fcat type lvc_s_fcat, it_fcat type lvc_t_fcat.
write:/ <dyn_field>. endif. endif.
6
RTTI
使用cl_alv_table_create=>create_dynamic_table动态创建内表的时候,如 果是Deep Structure的结构的内表,程序Dump。这时就需要使用RTTI来创建。
1. 定义数据类型
DATA:
8
RTTI
3. 创建内表
CL_STRU = CL_ABAP_STRUCTDESCR=>CREATE( COMPONENTS ). CL_TABL = CL_ABAP_TABLEDESCR=>CREATE( CL_STRU ). CREATE DATA CL_HANDLE TYPE HANDLE CL_TABL. ASSIGN CL_HANDLE->* TO <FS_TABLE>.
5
动态内表的操作
1. 获取内表的行指针; 2. 获取指定的字段; 3. 读/写指定字段的值;
read table <dyn_table> assigning <dyn_wa> index 1. if sy-subrc = 0.
assign component ‘MATNR’ of structure <dyn_wa> to <dyn_field>. if sy-subrc = 0.
clear wa_fcat. wa_fcat-fieldname = ‘MAKTX’. wa_fcat-datatype = ‘CHAR’. wa_fcat-intlen = 40. append wa_fcat to it_fcat.
4
CL_ALV_TABLE_CREATE
3. 创建内表
call method cl_alv_table_create=>create_dynamic_table
DATA: IT_CELLSTAB TYPE LVC_T_STYL, WA_CELLSTAB TYPE LVC_S_STYL.
FIELD-SYMBOLS: <FS_TABLE> TYPE STANDARD TABLE , <FS_LINE> TYPE ANY, <FS_CELLSTAB> TYPE LVC_T_STYL.
4. 操作 SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE <GT_ITAB>
UP TO 10 ROWS.
WA_CELLSTAB-FIELDNAME = 'MENGE'.
WA_CELLSTAB-STYLE
= CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
exporting
it_fieldcatalog = it_fcat
importing
ep_table
= dy_table.
assign dy_table->* to <dyn_table>. create data dy_line like line of <dyn_table>. assign dy_line->* to <dyn_wa>.
” 内表指针 ” 工作区 ” 字段
”行 ” 列结构
3
CL_ALV_TABLE_CREATE
2. 定义列结构 动态内表表结构的定义必须使用表结构与table type: lvc_t_fcat一样的内表.
clear wa_fcat. wa_fcat-fieldname = ‘MATNR’. wa_fcat-datatype =’CHAR’. wa_fcat-intlen = 18. append wa_fcat to it_fcat.
CL_STRU TYPE REF TO CL_ABAP_STRUCTDESCR, CL_TABL TYPE REF TO CL_ABAP_TABLEDESCR, CL_HANDLE TYPE REF TO DATA, WA_COMPONENTS TYPE ABAP_COMPONENTDESCR, IT_COMPONENTS TYPE ABAP_COMPONENT_TAB.
SAP动态内表与动态SQL技术
1
动态内表的创建
当程序运行时才能确定内表的结构,我们就需要用到动态内表。 动态内表的创建一般有两种方法: 1. 使用类CL_ALV_TABLE_CREATE的方法CREATE_DYNAMIC_TABLE; 2. 使用RTTI(Run Time Type Services):CL_ABAP_TABLEDESCR
相关主题