ROHIT SHARMA
The Dynamic Table Uploader is a powerful interface designed to upload data from Non-SAP(Excel) to SAP Systems, while also providing full control
[DEV] ZAS
over the data lifecycle—uploading, displaying, adding, and deleting records. Thursday, 10 July, 2025, 11:21 am
1
2 REPORT zdynamic_table_uploader.
3
4
5 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
6 PARAMETERS: p_module TYPE zmodule-module OBLIGATORY, "Module
7 p_tdes TYPE zmodule_list-table_des, "Uploader
8 p_file TYPE rlgrap-filename DEFAULT 'C:\Users\' MODIF ID m1."File Path
9 PARAMETERS: r1 RADIOBUTTON GROUP g1 USER-COMMAND ucm,"Add/Delete Data
10 r2 RADIOBUTTON GROUP g1. "Display Data
11 SELECTION-SCREEN END OF BLOCK b1.
12
13 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "File Selection Help
14 CALL FUNCTION 'F4_FILENAME' IMPORTING file_name = p_file.
15
16 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tdes. "Uploader Selection Help
17 DATA(lt_dynpfields) = VALUE /bev3/chdynpread( ( fieldname = 'P_MODULE' ) ).
18 CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr
19 TABLES dynpfields = lt_dynpfields[] EXCEPTIONS OTHERS = 1.
20 DATA(lv_module) = VALUE #( lt_dynpfields[ 1 ]-fieldvalue OPTIONAL ).
21 SELECT table_des FROM zmodule_list WHERE module_name = @lv_module INTO TABLE @DATA(lt_values).
22 IF sy-subrc IS INITIAL.
23 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
24 EXPORTING retfield = 'TABLE_DES' dynpprog = sy-repid
25 dynpnr = sy-dynnr dynprofield = 'P_TDES'
26 value_org = 'S'
27 TABLES value_tab = lt_values
28 EXCEPTIONS OTHERS = 1.
29 ELSE.
30 MESSAGE 'No Entries Found For Selected Module.'
31 TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING.
32 ENDIF.
33
34 AT SELECTION-SCREEN OUTPUT. "Hide File Selection
35 IF r2 = 'X'.
36 LOOP AT SCREEN.
37 IF screen-group1 = 'M1'.
38 screen-active = '0'. MODIFY SCREEN.
39 ENDIF.
40 ENDLOOP.
41 ENDIF.
42
ASHANSHRAY
Page 1
ASHANSHRAY
[DEV] ZAS Thursday, 10 July, 2025, 11:21 am
43 START-OF-SELECTION.
44
45 AUTHORITY-CHECK OBJECT 'ZMODULE' ID 'ZMODULE_ID' FIELD p_module. "SU21 - Generate SAP_ALL
46 IF NOT sy-subrc IS INITIAL.
47 MESSAGE |You Are NOT Authorized TO Access { p_module } MODULE.|
48 TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING.
49 ELSE.
50 SELECT SINGLE table_name FROM zsac_module_list WHERE module_name = @p_module
51 AND table_des = @p_tdes INTO @DATA(p_table).
52 IF NOT sy-subrc IS INITIAL.
53 MESSAGE |Doesn't Exist { p_module } Module & { p_tdes } Uploader.|
54 TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING.
55 ENDIF.
56 ENDIF.
57
58 DATA lt_dref TYPE REF TO data. "Create Dynamic Table & Structure
59 CREATE DATA lt_dref TYPE TABLE OF (p_table).
60 FIELD-SYMBOLS <ft_table> TYPE STANDARD TABLE.
61 ASSIGN lt_dref->* TO <ft_table>.
62 FIELD-SYMBOLS <ft_table_n> TYPE STANDARD TABLE.
63 ASSIGN lt_dref->* TO <ft_table_n>.
64 DATA(l_tabledescr) = CAST cl_abap_tabledescr( cl_abap_tabledescr=>describe_by_data_ref( lt_dref ) ).
65 DATA(l_line_type) = l_tabledescr->get_table_line_type( ).
66 DATA(l_structdescr) = CAST cl_abap_structdescr( l_line_type ).
67 DATA(l_components) = l_structdescr->get_components( ).
68 DELETE l_components[] WHERE name = 'MANDT'.
69 "Hold Structure
70 DATA(l_cre) = cl_abap_structdescr=>create( l_components[] ).
71 DATA(l_def) = cl_abap_tabledescr=>create( p_line_type = l_cre ).
72 FREE:lt_dref. CREATE DATA lt_dref TYPE HANDLE l_def.
73 ASSIGN lt_dref->* TO <ft_table>.
74 DATA l_dref TYPE REF TO data.
75 CREATE DATA l_dref LIKE LINE OF <ft_table>.
76 ASSIGN l_dref->* TO FIELD-SYMBOL(<fs_table_h>).
77 "Hold Structure
78 IF ( r1 EQ abap_true ).
79 INSERT VALUE #( name = 'SELECT' type = cl_abap_elemdescr=>get_c( p_length = '1' ) ) INTO l_components[] INDEX 1.
80 ENDIF.
81 DATA(l_create) = cl_abap_structdescr=>create( l_components[] ).
82 DATA(l_new_dref) = cl_abap_tabledescr=>create( p_line_type = l_create ).
83 FREE:lt_dref. CREATE DATA lt_dref TYPE HANDLE l_new_dref.
84 ASSIGN lt_dref->* TO <ft_table>.
ASHANSHRAY
Page 2
ASHANSHRAY
[DEV] ZAS Thursday, 10 July, 2025, 11:21 am
85 DATA ls_dref TYPE REF TO data.
86 CREATE DATA ls_dref LIKE LINE OF <ft_table>.
87 ASSIGN ls_dref->* TO FIELD-SYMBOL(<fs_table>).
88
89 IF r2 EQ abap_true. "Display DB Data
90 SELECT FROM (p_table) FIELDS * INTO TABLE @<ft_table_n>[].
91 <ft_table>[] = CORRESPONDING #( <ft_table_n>[] ).
92 IF line_exists( <ft_table>[ 1 ] ).
93 cl_salv_table=>factory( IMPORTING r_salv_table = DATA(l_alv) CHANGING t_table = <ft_table>[] ).
94 DATA(l_function) = l_alv->get_functions( ). l_function->set_all( abap_true ).
95 DATA(l_columns) = l_alv->get_columns( ). l_columns->set_optimize( ).
96 DATA(l_dis_sett) = l_alv->get_display_settings( ). l_dis_sett->set_striped_pattern( abap_true ).
97 l_alv->display( ).
98 ELSE.
99 MESSAGE |No Data Found| TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING.
100 ENDIF.
101 ELSEIF r1 EQ abap_true. "Read Excel File Data
102 DATA lt_excel TYPE TABLE OF alsmex_tabline.
103 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
104 EXPORTING
105 filename = p_file
106 i_begin_col = 1
107 i_begin_row = 1
108 i_end_col = 99
109 i_end_row = 999999
110 TABLES
111 intern = lt_excel[]
112 EXCEPTIONS
113 OTHERS = 3.
114 IF sy-subrc = 0.
115 SORT lt_excel[] BY row. DATA lt_filds TYPE TABLE OF dfies.
116 LOOP AT lt_excel[] INTO DATA(ls_excel).
117 ASSIGN COMPONENT ls_excel-col OF STRUCTURE <fs_table_h> TO FIELD-SYMBOL(<dyn_field>).
118 IF sy-subrc IS INITIAL.
119 IF ls_excel-row = 1.
120 CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = p_table TABLES dfies_tab = lt_filds[]
121 EXCEPTIONS not_found = 1 internal_error = 2 OTHERS = 3.
122 DELETE lt_filds[] INDEX 1. TRANSLATE ls_excel-value TO UPPER CASE.
123 DATA(fieldname) = VALUE #( lt_filds[ ls_excel-col ]-fieldname OPTIONAL ).
124 IF fieldname NE ls_excel-value.
125 MESSAGE |Excel Sheet Hearder's & TABLE Field's Are Not Matching.|
126 TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING.
ASHANSHRAY
Page 3
ASHANSHRAY
[DEV] ZAS Thursday, 10 July, 2025, 11:21 am
127 ENDIF.
128 ELSE.
129 DATA(go_typedescr) = cl_abap_typedescr=>describe_by_data( <dyn_field> ).
130 IF go_typedescr->type_kind = cl_abap_typedescr=>typekind_date.
131 CALL FUNCTION 'KCD_EXCEL_DATE_CONVERT' EXPORTING excel_date = ls_excel-value date_format = 'TMJ'
132 IMPORTING sap_date = ls_excel-value.
133 <dyn_field> = ls_excel-value.
134 ELSE.
135 <dyn_field> = ls_excel-value.
136 ENDIF.
137 ENDIF.
138 ENDIF.
139 IF ls_excel-row GT 1.
140 AT END OF row.
141 <fs_table> = CORRESPONDING #( <fs_table_h> ).
142 APPEND <fs_table> TO <ft_table>. FREE:<fs_table_h>,<fs_table>.
143 ENDAT.
144 ENDIF.
145 ENDLOOP.
146 IF line_exists( <ft_table>[ 1 ] ).
147 cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = <ft_table>[] ).
148 cl_salv_controller_metadata=>get_lvc_fieldcatalog( EXPORTING r_columns = lo_alv->get_columns( )
149 r_aggregations = lo_alv->get_aggregations( )
150 RECEIVING t_fieldcatalog = DATA(it_fieldcat) ).
151 LOOP AT it_fieldcat[] ASSIGNING FIELD-SYMBOL(<fs_fieldcat>) WHERE fieldname = 'SELECT'.
152 <fs_fieldcat>-edit = abap_true. <fs_fieldcat>-checkbox = abap_true.
153 <fs_fieldcat>-scrtext_s = <fs_fieldcat>-scrtext_m = <fs_fieldcat>-scrtext_l = 'Select'.
154 ENDLOOP.
155 DATA(gref_alv) = NEW cl_gui_alv_grid( i_parent = cl_gui_container=>default_screen ).
156 DATA(l_layout) = VALUE lvc_s_layo( cwidth_opt = 'X' ).
157 CALL METHOD gref_alv->set_table_for_first_display "UCOM Edit - ALV
158 EXPORTING
159 is_layout = l_layout
160 i_save = 'A'
161 i_default = 'X'
162 CHANGING
163 it_outtab = <ft_table>[]
164 it_fieldcatalog = it_fieldcat[]
165 EXCEPTIONS
166 invalid_parameter_combination = 1
167 program_error = 2
168 too_many_lines = 3
ASHANSHRAY
Page 4
ASHANSHRAY
[DEV] ZAS Thursday, 10 July, 2025, 11:21 am
169 OTHERS = 4.
170 gref_alv->set_ready_for_input( i_ready_for_input = 1 ).
171 gref_alv->register_edit_event( EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
172 CALL SCREEN 100. "Create Screen 100
173 ENDIF.
174 ENDIF.
175 ENDIF.
176 *&---------------------------------------------------------------------*
177 *& Module STATUS_0100 OUTPUT
178 *&---------------------------------------------------------------------*
179 MODULE status_0100 OUTPUT.
180 SET PF-STATUS 'PF_STATUS'.
181 ENDMODULE.
182 *&---------------------------------------------------------------------*
183 *& Module USER_COMMAND_0100 INPUT
184 *&---------------------------------------------------------------------*
185 MODULE user_command_0100 INPUT.
186 CASE sy-ucomm.
187 WHEN '&F03'.
188 LEAVE TO SCREEN 0.
189 WHEN '&F12' OR '&F15'.
190 LEAVE PROGRAM.
191 WHEN '&ALL'.
192 LOOP AT <ft_table>[] ASSIGNING <fs_table>.
193 ASSIGN COMPONENT 'SELECT' OF STRUCTURE <fs_table> TO FIELD-SYMBOL(<l_select>). <l_select> = abap_true.
194 ENDLOOP.
195 CALL METHOD gref_alv->refresh_table_display.
196 WHEN '&SAL'.
197 LOOP AT <ft_table>[] ASSIGNING <fs_table>.
198 ASSIGN COMPONENT 'SELECT' OF STRUCTURE <fs_table> TO <l_select>. <l_select> = abap_false.
199 ENDLOOP.
200 CALL METHOD gref_alv->refresh_table_display.
201 WHEN '&ADD' OR '&DEL'.
202 FREE:<ft_table_n>[].
203 LOOP AT <ft_table>[] ASSIGNING <fs_table>.
204 ASSIGN COMPONENT 'SELECT' OF STRUCTURE <fs_table> TO <l_select>.
205 IF <l_select> = abap_true.
206 APPEND INITIAL LINE TO <ft_table_n>[] ASSIGNING FIELD-SYMBOL(<fs_table_n>).
207 <fs_table_n> = CORRESPONDING #( <fs_table> ).
208 ENDIF.
209 ENDLOOP.
210 IF line_exists( <ft_table_n>[ 1 ] ) AND sy-ucomm EQ '&ADD'.
ASHANSHRAY
Page 5
ASHANSHRAY
[DEV] ZAS Thursday, 10 July, 2025, 11:21 am
211 DATA(l_lines) = lines( <ft_table_n>[] ).
212 MODIFY (p_table) FROM TABLE <ft_table_n>[]. COMMIT WORK AND WAIT.
213 IF sy-subrc IS INITIAL.
214 MESSAGE |{ l_lines } Records Added Successfully.| TYPE 'I'. LEAVE LIST-PROCESSING.
215 ENDIF.
216 ELSEIF line_exists( <ft_table_n>[ 1 ] ) AND sy-ucomm EQ '&DEL'.
217 DATA:lv_answer TYPE c.
218 CALL FUNCTION 'POPUP_TO_CONFIRM'
219 EXPORTING
220 titlebar = 'DELETE Data'
221 text_question = 'DO you want TO DELETE records?'
222 text_button_1 = 'Yes'
223 icon_button_1 = 'ICON_OK'
224 text_button_2 = 'No'
225 icon_button_2 = 'ICON_CANCEL'
226 default_button = '2'
227 display_cancel_button = ''
228 IMPORTING
229 answer = lv_answer.
230 IF lv_answer = '1'.
231 l_lines = lines( <ft_table_n>[] ).
232 DELETE (p_table) FROM TABLE <ft_table_n>[]. COMMIT WORK AND WAIT.
233 IF sy-subrc IS INITIAL.
234 MESSAGE |{ l_lines } Records Deleted Successfully.| TYPE 'I'. LEAVE LIST-PROCESSING.
235 ENDIF.
236 ENDIF.
237 ENDIF.
238 ENDCASE.
239 ENDMODULE.
ASHANSHRAY
Page 6