You can now define a local type dynamically. This is only supported in 6.40. Here's how it goes: REPORT ZDANY_DYN_LOCAL_TYPES. * We read information about each fields of SFLIGHT (see ABAP FAQ #2) struct_type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT' ). * We also need the information about the type "typ_count", note that * we should use class cl_abap_elemdescr instead of cl_abap_typedescr elem_type ?= cl_abap_elemdescr=>describe_by_name( 'TYP_COUNT' ). * we read all fleids of SFLIGHT and create a component table comp_tab = struct_type->get_components( ). * We add manually the counter comp_fld-name = 'L_COUNT'. comp_fld-type = elem_type. insert comp_fld into comp_tab index 1. * we create the structure struct_type = cl_abap_structdescr=>create( comp_tab ). * ... and the internal table itab_type = cl_abap_tabledescr=>create( struct_type ). * The new thing here is the "type handle" which create a pointer to a * handle create data dref type handle itab_type. * we finally assign a field symbol to the pointer because we cannot * directly access a pointer. assign dref->* to * At the end of this small program, internal table lt_hardcoded and * lt_dynamic are the same break-point.****************** hardcoded "old style" local type *******************
* This is a normal hardcoded local type
types : begin of typ_hardcoded,
l_count type i,
lt_sflight type sflight.
types : end of typ_hardcoded.
* create a table based on hardcoded type
data : lt_hardcoded type table of typ_hardcoded.
****************** dynamic "new wave" local type *******************
types: typ_count type i.
field-symbols :
data: dref type ref to data,
itab_type type ref to cl_abap_tabledescr,
struct_type type ref to cl_abap_structdescr,
elem_type type ref to cl_abap_elemdescr,
comp_tab type cl_abap_structdescr=>component_table,
comp_fld type cl_abap_structdescr=>component.
You can now define a local type dynamically. This is only supported in 6.40. Here's how it goes: REPORT ZDANY_DYN_LOCAL_TYPES. * We read information about each fields of SFLIGHT (see ABAP FAQ #2) struct_type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT' ). * We also need the information about the type "typ_count", note that * we should use class cl_abap_elemdescr instead of cl_abap_typedescr elem_type ?= cl_abap_elemdescr=>describe_by_name( 'TYP_COUNT' ). * we read all fleids of SFLIGHT and create a component table comp_tab = struct_type->get_components( ). * We add manually the counter comp_fld-name = 'L_COUNT'. comp_fld-type = elem_type. insert comp_fld into comp_tab index 1. * we create the structure struct_type = cl_abap_structdescr=>create( comp_tab ). * ... and the internal table itab_type = cl_abap_tabledescr=>create( struct_type ). * The new thing here is the "type handle" which create a pointer to a * handle create data dref type handle itab_type. * we finally assign a field symbol to the pointer because we cannot * directly access a pointer. assign dref->* to * At the end of this small program, internal table lt_hardcoded and * lt_dynamic are the same break-point.****************** hardcoded "old style" local type *******************
* This is a normal hardcoded local type
types : begin of typ_hardcoded,
l_count type i,
lt_sflight type sflight.
types : end of typ_hardcoded.
* create a table based on hardcoded type
data : lt_hardcoded type table of typ_hardcoded.
****************** dynamic "new wave" local type *******************
types: typ_count type i.
field-symbols :
data: dref type ref to data,
itab_type type ref to cl_abap_tabledescr,
struct_type type ref to cl_abap_structdescr,
elem_type type ref to cl_abap_elemdescr,
comp_tab type cl_abap_structdescr=>component_table,
comp_fld type cl_abap_structdescr=>component.
No comments:
Post a Comment