Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

To create a deep structure for dynamic internal table.

Former Member
0 Likes
1,668

Hello

My ALV has fields which are defined dynamically during execution.

so, i did it in the following way,

Declared Field symbolds, DREF and fieldcatalog as,

FIELD-SYMBOLS: <t_dyntable> TYPE STANDARD TABLE,

<fs_dyntable>.

DATA: dref_dyntab TYPE REF TO data,

dref_dynwa TYPE REF TO data.

DATA: ts_fieldcatalog TYPE lvc_t_fcat.

DATA: wa_fieldcatalog TYPE lvc_s_fcat.

Updated Fieldcatalog dynamically as,

*function module to read segment structure

CALL FUNCTION 'SEGMENT_READ'

EXPORTING

segmenttyp = v_segment_name

TABLES

segmentstructure = ts_seg_structure

EXCEPTIONS

no_authority = 1

segment_not_existing = 2

OTHERS = 3.

IF sy-subrc <> 0.

CASE sy-subrc.

WHEN '1'.

MESSAGE e024.

STOP.

WHEN '2'.

MESSAGE e025 WITH v_segment_name.

STOP.

WHEN OTHERS.

MESSAGE e023.

ENDCASE.

ENDIF.

*FETCH FIELDS FROM STRUCTURE OF SEGMENT AND CREATE FIELDCATALOG FOR

  • EACH FIELD OF SEGMENT (DYNAMIC FIELD CATALOG)

LOOP AT ts_seg_structure INTO wa_seg_structure.

ADD 1 TO v_counter.

wa_fieldcatalog-fieldname = wa_seg_structure-fieldname.

wa_fieldcatalog-col_pos = v_counter.

wa_fieldcatalog-ref_table = wa_seg_structure-segtyp.

APPEND wa_fieldcatalog TO ts_fieldcatalog.

CLEAR wa_fieldcatalog.

ENDLOOP.

and generated dynamic internal table using fieldcatalog as,

*--Method to get the structure of table using fieldcatalog.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = ts_fieldcatalog

IMPORTING

*--Variable of type REF TO DATA.

ep_table = dref_dyntab.

IF sy-subrc <> 0.

MESSAGE e023.

ENDIF.

*--Dynamic internal tables required when show segments selected

IF p_selseg IS NOT INITIAL.

ASSIGN dref_dyntab->* TO <t_dyntable>.

*--Create dynamic work area and assign to FS

CREATE DATA dref_dynwa LIKE LINE OF <t_dyntable>.

ASSIGN dref_dynwa->* TO <fs_dyntable>.

And then i populated this <t_dyntable> which is being passed as data-table to method

CL_GUI_ALV_GRID => SET_TABLE_FOR_FIRST_DISPLAY

for ALV grid Display along with above used filedcatalog ts_fieldcatalog.

Things are fine till here, but now i have the requirement to edit selected rows of the ALV display..

As you might be aware, we need a field

TS_STYLEROW TYPE lvc_t_styl, (i.e, a field of type 'h' and we can say as an internal table inside an internal table or else as a deep structure)

in the output internal table <t_dyntable> to meet our requirement.

My issue is about declaring one such field of type 'h' in this dynamically created internal table ''<t_dyntable>".

I tried in the following way by adding one such field to fieldcatalog :

*Field for Styling

ADD 1 TO v_counter.

wa_fieldcatalog-fieldname = 'TS_STYLEROW'.

wa_fieldcatalog-tabname = 'TS_STYLE'.

wa_fieldcatalog-col_pos = v_counter.

wa_fieldcatalog-no_out = 'X'.

wa_fieldcatalog-inttype = 'h'. " I even mentioned this

APPEND wa_fieldcatalog TO ts_fieldcatalog.

CLEAR wa_fieldcatalog.

But this is creating a field of type 'C' in the table <t_dyntable> instead of what i was expecting

Guyz and respected,

Please advice me with the solution or ur ideas....

Note : The overall requirement is create a deep structure for dynamically generated internal table.

Your help is highly appreciated and unforgettable..!!!!!!!

Hello

My ALV has fields which are defined dynamically during execution.

so, i did it in the following way,

Declared Field symbolds, DREF and fieldcatalog as,

FIELD-SYMBOLS: <t_dyntable> TYPE STANDARD TABLE,

<fs_dyntable>.

DATA: dref_dyntab TYPE REF TO data,

dref_dynwa TYPE REF TO data.

DATA: ts_fieldcatalog TYPE lvc_t_fcat.

DATA: wa_fieldcatalog TYPE lvc_s_fcat.

Updated Fieldcatalog dynamically as,

*function module to read segment structure

CALL FUNCTION 'SEGMENT_READ'

EXPORTING

segmenttyp = v_segment_name

TABLES

segmentstructure = ts_seg_structure

EXCEPTIONS

no_authority = 1

segment_not_existing = 2

OTHERS = 3.

IF sy-subrc <> 0.

CASE sy-subrc.

WHEN '1'.

MESSAGE e024.

STOP.

WHEN '2'.

MESSAGE e025 WITH v_segment_name.

STOP.

WHEN OTHERS.

MESSAGE e023.

ENDCASE.

ENDIF.

*FETCH FIELDS FROM STRUCTURE OF SEGMENT AND CREATE FIELDCATALOG FOR

  • EACH FIELD OF SEGMENT (DYNAMIC FIELD CATALOG)

LOOP AT ts_seg_structure INTO wa_seg_structure.

ADD 1 TO v_counter.

wa_fieldcatalog-fieldname = wa_seg_structure-fieldname.

wa_fieldcatalog-col_pos = v_counter.

wa_fieldcatalog-ref_table = wa_seg_structure-segtyp.

APPEND wa_fieldcatalog TO ts_fieldcatalog.

CLEAR wa_fieldcatalog.

ENDLOOP.

and generated dynamic internal table using fieldcatalog as,

*--Method to get the structure of table using fieldcatalog.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = ts_fieldcatalog

IMPORTING

*--Variable of type REF TO DATA.

ep_table = dref_dyntab.

IF sy-subrc <> 0.

MESSAGE e023.

ENDIF.

*--Dynamic internal tables required when show segments selected

IF p_selseg IS NOT INITIAL.

ASSIGN dref_dyntab->* TO <t_dyntable>.

*--Create dynamic work area and assign to FS

CREATE DATA dref_dynwa LIKE LINE OF <t_dyntable>.

ASSIGN dref_dynwa->* TO <fs_dyntable>.

And then i populated this <t_dyntable> which is being passed as data-table to method

CL_GUI_ALV_GRID => SET_TABLE_FOR_FIRST_DISPLAY

for ALV grid Display along with above used filedcatalog ts_fieldcatalog.

Things are fine till here, but now i have the requirement to edit selected rows of the ALV display..

As you might be aware, we need a field

TS_STYLEROW TYPE lvc_t_styl, (i.e, a field of type 'h' and we can say as an internal table inside an internal table or else as a deep structure)

in the output internal table <t_dyntable> to meet our requirement.

My issue is about declaring one such field of type 'h' in this dynamically created internal table ''<t_dyntable>".

I tried in the following way by adding one such field to fieldcatalog :

*Field for Styling

ADD 1 TO v_counter.

wa_fieldcatalog-fieldname = 'TS_STYLEROW'.

wa_fieldcatalog-tabname = 'TS_STYLE'.

wa_fieldcatalog-col_pos = v_counter.

wa_fieldcatalog-no_out = 'X'.

wa_fieldcatalog-inttype = 'h'. " I even mentioned this

APPEND wa_fieldcatalog TO ts_fieldcatalog.

CLEAR wa_fieldcatalog.

But this is creating a field of type 'C' in the table <t_dyntable> instead of what i was expecting

Guyz and respected,

Please advice me with the solution or ur ideas....

Note : The overall requirement is create a deep structure for dynamically generated internal table.

Your help is highly appreciated and unforgettable..!!!!!!!

4 REPLIES 4
Read only

Former Member
0 Likes
968

>

> Guyz and respected,

> Please advice me with the solution or ur ideas....

> Note : The overall requirement is create a deep structure for dynamically generated internal table.

>

>

> Your help is highly appreciated and unforgettable..!!!!!!!

did u try on search on forum,

I found these in the very first search result so do use the search option next time onwards.

check this blog on adding deep structure to dynamic internal table

/people/subramanian.venkateswaran2/blog/2004/11/19/dynamic-internal-table

also see this thread,

Read only

Former Member
0 Likes
968

hi,

thanks

Read only

uwe_schieferstein
Active Contributor
0 Likes
968

Hello Raja

You may have a look at my Wiki posting

[Creating Flat and Complex Internal Tables Dynamically using RTTI|https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/creating%2bflat%2band%2bcomplex%2binternal%2btables%2bdynamically%2busing%2brtti]

Regards

Uwe

Read only

Former Member
0 Likes
968

hi Raja,

Long time passed. , you must are already a expert now.
I have the same issue like you, how do you resolve your problem? please shared with me.

Can`t convert 'h' to a standard table type.

thanks very much.

Former Member, if you know, guide me, thanks.

Regards,

Archer