This example allow you to get all field and data from structure or table
*&---------------------------------------------------------------------*
*& Report ZTEST_Z_GET_STRUCTURE_FLD_NAME
*&
*&---------------------------------------------------------------------*
REPORT z_get_structure_fld_name.
**
PARAMETERS: dbtab TYPE tabname DEFAULT 'SPFLI',
rows TYPE i DEFAULT 1.
**
DATA: ls_struct TYPE zre_cont_vals. " rsbasidoc .
DATA: lr_structdescr TYPE REF TO cl_abap_structdescr,
lr_datadescr TYPE REF TO cl_abap_datadescr,
lr_datadescr_incl TYPE REF TO cl_abap_datadescr,
lt_components TYPE abap_component_tab,
ls_components TYPE LINE OF abap_component_tab,
lt_components_incl TYPE abap_component_tab,
ls_components_incl TYPE LINE OF abap_component_tab.
DATA: lo_dynamic_table TYPE REF TO data.
FIELD-SYMBOLS: <lt_table_structure> TYPE table,
<ls_table_structure> TYPE any.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS: <table> TYPE ANY TABLE,
<wa> TYPE any,
<comp> TYPE any.
*----------------------------------------------------------------------*
* CLASS demo DEFINITION
*----------------------------------------------------------------------*
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS. "demo DEFINITION
*----------------------------------------------------------------------*
* CLASS demo IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS demo IMPLEMENTATION.
METHOD main.
TRY.
CREATE DATA dref TYPE STANDARD TABLE OF (dbtab)
WITH NON-UNIQUE DEFAULT KEY.
ASSIGN dref->* TO <table>.
SELECT * FROM (dbtab) UP TO rows ROWS
INTO TABLE <table>.
LOOP AT <table> ASSIGNING <wa>.
EXIT.
ENDLOOP.
CATCH cx_sy_create_data_error.
WRITE 'Error in data creation'.
ENDTRY.
ENDMETHOD. "main
ENDCLASS. "demo IMPLEMENTATION
START-OF-SELECTION.
demo=>main( ).
lr_structdescr ?= cl_abap_structdescr=>describe_by_data( <wa> ).
lt_components = lr_structdescr->get_components( ).
LOOP AT lt_components INTO ls_components.
lr_datadescr = ls_components-type.
IF ls_components-as_include = space.
WRITE:/ ls_components-name, lr_datadescr->type_kind, lr_datadescr->length.
ELSE.
" IF include or append structure, you need to get that structures components now.
lr_structdescr ?= ls_components-type.
lt_components_incl = lr_structdescr->get_components( ).
LOOP AT lt_components_incl INTO ls_components_incl.
lr_datadescr_incl = ls_components_incl-type.
WRITE:/ ls_components_incl-name, lr_datadescr_incl->type_kind,
lr_datadescr_incl->length.
ENDLOOP.
ENDIF.
ENDLOOP.
No comments:
Post a Comment