0% found this document useful (0 votes)
11 views6 pages

Dynamic Table Uploader for SAP

Uploaded by

Chandu Ragimanu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views6 pages

Dynamic Table Uploader for SAP

Uploaded by

Chandu Ragimanu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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

You might also like