- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- *&---------------------------------------------------------------------*
- *& Form create Structure dynamically
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- <dyn_field> TYPE any,
- <dyn_rec> TYPE any,
- <dyn_tab> TYPE ANY TABLE.
- DATA:
- l_ref_type_descr_ddic TYPE REF TO cl_abap_typedescr,
- l_ref_type_descr_line TYPE REF TO cl_abap_typedescr,
- l_ref_struct_descr_line TYPE REF TO cl_abap_structdescr,
- l_tab_component TYPE cl_abap_structdescr=>component_table.
- DATA:
- lop_tabledescr TYPE REF TO cl_abap_tabledescr,
- ldp_dynaic_record TYPE REF TO data,
- ldp_dyn_table TYPE REF TO data,
- lop_strucdescr TYPE REF TO cl_abap_structdescr.
- l_ref_type_descr_ddic = cl_abap_typedescr=>describe_by_name( i_tdef ).
- l_ref_struct_descr_line ?= l_ref_type_descr_ddic.
- l_tab_component = l_ref_struct_descr_line->get_components( ).
- lop_strucdescr = cl_abap_structdescr=>create( l_tab_component ).
- CREATE DATA ldp_dynaic_record TYPE HANDLE lop_strucdescr.
- lop_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lop_strucdescr ).
- CREATE DATA ldp_dyn_table TYPE HANDLE lop_tabledescr.
- GeSHi ©
2. ) Durch Reduktion der Felder einer Vorlage Struktur
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- DATA: ls_mara TYPE t005t, " Struktur mit Obermenge der Felder, die in der Zielstruktur vorhanden sein sollen
- lr_data TYPE REF TO data.
- DATA(lt_components) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( ls_mara ) )->get_components( ).
- AND name <> 'LAND1'
- AND name <> 'LANDX'.
- CREATE DATA lr_data TYPE HANDLE lo_descr_reduced.
- GeSHi ©
3.) Separate Erzeugung :
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- <dyn_field> TYPE any,
- <dyn_rec> TYPE any,
- <dyn_tab> TYPE ANY TABLE.
- UNASSIGN:
- <dyn_field>,
- <dyn_rec>,
- <dyn_tab>.
- CALL FUNCTION 'RPY_TABLE_READ'
- EXPORTING
- table_name = i_tdef
- tabl_fields = t_field_def
- EXCEPTIONS
- cancelled = 1
- not_found = 2
- permission_error = 3
- illegal_type = 4
- OTHERS = 5.
- EXIT.
- DATA:
- ldp_dyn_table TYPE REF TO data,
- lop_tabledescr TYPE REF TO cl_abap_tabledescr,
- ldp_dynaic_record TYPE REF TO data,
- lop_strucdescr TYPE REF TO cl_abap_structdescr,
- ls_component TYPE abap_componentdescr,
- lt_component TYPE abap_component_tab.
- *FIELDNAME OFFSET LENGTH T FIELDTEXT
- *MANDT 000000 000003 C
- *MATNR 000003 000018 C
- *SPRAS 000021 000002 C
- *MAKTX 000023 000040 C
- *MAKTG 000063 000040 C
- . l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_c( p_length = l_field_length ).
- l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_c( p_length = l_field_length ).
- l_field_length = s_field_def-intlength
- . l_decimals = s_field_def-decimals.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_p( p_length = l_field_length p_decimals = l_decimals ).
- l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_n( p_length = l_field_length ).
- ls_component-name = s_field_def-fieldname.
- ls_component-type ?= cl_abap_elemdescr=>describe_by_data( p_data = lv_int1 ).
- ls_component-type ?= cl_abap_elemdescr=>describe_by_data( p_data = lv_int2 ).
- ls_component-type ?= cl_abap_elemdescr=>describe_by_data( p_data = lv_int4 ).
- l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_d( ).
- l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_t( ).
- l_field_length = s_field_def-length.
- ls_component-name = s_field_def-fieldname.
- ls_component-type = cl_abap_elemdescr=>get_c( p_length = l_field_length ).
- lop_strucdescr = cl_abap_structdescr=>create( lt_component ).
- CREATE DATA ldp_dynaic_record TYPE HANDLE lop_strucdescr.
- lop_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lop_strucdescr ).
- CREATE DATA ldp_dyn_table TYPE HANDLE lop_tabledescr.
- GeSHi ©
Einen konkreten Anwendungsfall gibt es z.B. HIER
gruß Jens