Gyan Factory - SAP Technical Project support
GET Project support at low cost
Gyan Factory
SAP Technical Project Support
Saturday, December 12, 2015
RTTS : Dynamic internal table creation
Sometime we need to create internal table dynamically at runtime.
Suppose there is a requirement like we have certain field need to populate based on some condition.
If I tell you more practically like we need to create internal table dynamically when a excel file will be uploaded and there would not be fixed fields (different fields can be uploaded in the excel file as per the requirement at different time).
The requirement can be like when we need to work with access sequence in SD.
Or the requirement would be like if you need to create internal table based on the selection screen input.
Here I have tried to bring a simplest program where you can put the fields as per your requirement in the selection screen and can form the internal table based on the selection screen input fields dynamically.
Steps:
Get the field names from the selection screen input.
Get the domain details from the DD03L table based on the field names.
Prepare the fieldcatalog for next step.
CALL METHOD cl_alv_table_create=>create_dynamic_table using the fieldcatalog.
Get the <fs_data> from the above method and
ASSIGN <fs_data>->* TO <fs_it>.
6. Our dynamic internal table <fs_it> has been created.
So.. let’s go..
REPORT
z_demo_rtts
.
TABLES
:
tkeig
.
*** Tables
DATA
:
it_data
TYPE REF TO data
.
DATA
:
it_fieldcatalog
TYPE
lvc_t_fcat
.
*** Structure
DATA
:
wa_fieldcatalog
TYPE
lvc_s_fcat
,
wa_dd03l
TYPE
dd03l
.
*** Data References
DATA
:
new_line
TYPE REF TO data
.
*** Field Symbols
FIELD-SYMBOLS
:
<fs_data>
TYPE REF TO data
,
<fs_it>
TYPE ANY TABLE
,
<fs_wa>
,
<fs_wa_component>
.
DATA
:
v_field_count
TYPE i
,
v_count
TYPE i
.
SELECT-OPTIONS
:
s_field
FOR
tkeig
-
fieldname
.
LOOP AT
s_field
.
SELECT SINGLE
*
FROM
dd03l
INTO
wa_dd03l
WHERE
fieldname
=
s_field
-
low
.
IF
sy
-
subrc
=
0
.
wa_fieldcatalog
-
fieldname
=
s_field
-
low
.
wa_fieldcatalog
-
inttype
=
wa_dd03l
-
inttype
.
APPEND
wa_fieldcatalog
TO
it_fieldcatalog
.
ENDIF
.
ENDLOOP
.
*wa_fieldcatalog-fieldname = 'CARRID'. "Fieldname
*wa_fieldcatalog-inttype = 'C'. "Internal Type C-> Character
*APPEND wa_fieldcatalog TO it_fieldcatalog.
ASSIGN
it_data
TO
<fs_data>
.
CALL METHOD
cl_alv_table_create
=>
create_dynamic_table
EXPORTING
it_fieldcatalog
=
it_fieldcatalog
IMPORTING
ep_table
=
<fs_data>
EXCEPTIONS
generate_subpool_dir_full
=
1
OTHERS
=
2
.
IF
sy
-
subrc <>
0
.
ENDIF
.
*** So <fs_it> now points to our dynamic internal table.
ASSIGN
<fs_data>
->
*
TO
<fs_it>
.
*** Next step is to create a work area for our dynamic internal table.
CREATE DATA
new_line
LIKE LINE OF
<fs_it>
.
*** A field-symbol to access that work area
ASSIGN
new_line
->
*
TO
<fs_wa>
.
*** And to put the data in the internal table
SELECT
*
FROM
vbap
UP TO
2
ROWS
INTO
CORRESPONDING
FIELDS OF TABLE
<fs_it>
.
LOOP AT
s_field
.
WRITE
:
s_field
-
low
.
ENDLOOP
.
DESCRIBE TABLE
s_field
LINES
v_field_count
.
*** Access contents of internal table
LOOP AT
<fs_it>
ASSIGNING
<fs_wa>
.
NEW-LINE
.
v_count
=
0
.
DO
v_field_count
TIMES
.
v_count
=
v_count +
1
.
ASSIGN COMPONENT
v_count
OF STRUCTURE
<fs_wa>
TO
<fs_wa_component>
.
WRITE
:
<fs_wa_component>
.
WRITE
:
' '
.
ENDDO
.
* ASSIGN COMPONENT 2 OF STRUCTURE <fs_wa> TO <fs_wa_component>.
* WRITE: <fs_wa_component>.
ENDLOOP
.
Selection screen input:
Output:
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment