in src/zgoog_i_bqtr_gen_mass_cds_c01.prog.abap [0:0]
METHOD process_file_details.
DATA lo_mass_cds TYPE REF TO lcl_cdsview_mass_cr.
CREATE OBJECT lo_mass_cds.
IF gt_excel_data IS NOT INITIAL.
CLEAR: gv_input_rec_cnt, gv_output_rec_cnt.
DESCRIBE TABLE gt_excel_data LINES gv_input_rec_cnt.
LOOP AT gt_excel_data ASSIGNING FIELD-SYMBOL(<fs_excel_data>).
TRANSLATE <fs_excel_data>-tablename TO UPPER CASE.
IF <fs_excel_data>-cdsviewname IS INITIAL. "generate cds view name if not provided in the input file
CONCATENATE 'Z_' <fs_excel_data>-tablename '_CDS' INTO <fs_excel_data>-cdsviewname.
ENDIF.
TRANSLATE <fs_excel_data>-cdsviewname TO UPPER CASE.
ENDLOOP.
ENDIF.
SORT gt_excel_data BY cdsviewname.
DELETE ADJACENT DUPLICATES FROM gt_excel_data.
IF gt_excel_data IS NOT INITIAL.
"check if cds view is already created
SELECT tadir~obj_name,tadir~devclass,e070~strkorr,ddldependency~objectname FROM tadir
INNER JOIN e071
ON tadir~obj_name = e071~obj_name
INNER JOIN e070
ON e071~trkorr = e070~trkorr
INNER JOIN ddldependency
ON tadir~obj_name = ddldependency~ddlname
INTO TABLE @gt_tr_cds_details
FOR ALL ENTRIES IN @gt_excel_data
WHERE tadir~obj_name = @gt_excel_data-cdsviewname
AND tadir~delflag = @abap_false.
ENDIF.
CLEAR gs_output.
IF gt_tr_cds_details IS NOT INITIAL.
LOOP AT gt_excel_data ASSIGNING FIELD-SYMBOL(<fs_excel_data2>).
READ TABLE gt_tr_cds_details INTO gs_tr_cds_details WITH KEY obj_name = <fs_excel_data2>-cdsviewname.
IF sy-subrc = 0.
gs_output-tablename = <fs_excel_data2>-tablename.
gs_output-cdsviewname = <fs_excel_data2>-cdsviewname.
gs_output-sqlviewname = gs_tr_cds_details-objectname.
gs_output-package = gs_tr_cds_details-devclass.
gs_output-transport = gs_tr_cds_details-strkorr.
gs_output-status = 'CDS view already exists'.
APPEND gs_output TO gt_output.
<fs_excel_data2>-tablename = 'X'.
ENDIF.
CLEAR: gs_tr_cds_details, gs_output.
ENDLOOP.
ENDIF.
CLEAR gt_dd03l_extract[].
DELETE gt_excel_data WHERE tablename = 'X'.
SORT gt_excel_data BY tablename.
DESCRIBE TABLE gt_excel_data LINES gv_output_rec_cnt.
IF gt_excel_data[] IS NOT INITIAL.
LOOP AT gt_excel_data INTO gs_excel_data.
"fetch the table metadata
* CALL FUNCTION 'IUUC_DD03L_EXTRACT'
* EXPORTING
* iv_tabname = gs_excel_data-tablename
* TABLES
* it_fieldlist = gt_dd03l_extract[].
SELECT *
FROM dd03l
INTO TABLE gt_dd03l_extract.
IF sy-subrc = 0 AND gt_dd03l_extract IS NOT INITIAL.
IF lo_mass_cds IS BOUND.
CLEAR: gv_keyfieldlist, gv_nonkeyfieldlist.
"prepare the cds body for key and non key fields
CALL METHOD lo_mass_cds->prepare_data
IMPORTING
ev_keyfieldlist = gv_keyfieldlist
ev_nonkeyfieldlist = gv_nonkeyfieldlist.
"prepare the cds view header, annotations and combine with body to get the entire cds view string
CALL METHOD lo_mass_cds->create_objects
IMPORTING
ev_tabdesc = DATA(lv_tabdesc)
ev_ddl_source = DATA(lv_ddl_source)
ev_final_string = DATA(lv_final_string)
ev_sql_view = DATA(lv_sql_view).
"create the cds view object
CALL METHOD lo_mass_cds->create_cds
EXPORTING
iv_tabdesc = lv_tabdesc
iv_ddl_source = lv_ddl_source
iv_final_string = lv_final_string
iv_sql_view = lv_sql_view.
ENDIF.
ELSE.
CLEAR gs_output.
gs_output-tablename = gs_excel_data-tablename.
gs_output-cdsviewname = 'N/A'.
gs_output-sqlviewname = 'N/A'.
gs_output-package = 'N/A'.
gs_output-transport = 'N/A'.
gs_output-status = 'Invalid Table Name'.
APPEND gs_output TO gt_output.
gv_output_rec_cnt = gv_output_rec_cnt - 1.
CLEAR gs_output.
ENDIF.
CLEAR: gs_excel_data, gt_dd03l_extract[], gv_keyfieldlist, gv_nonkeyfieldlist.
ENDLOOP.
ENDIF.
IF gt_output[] IS NOT INITIAL.
CALL METHOD lo_mass_cds->display_op.
ELSE.
MESSAGE 'No data selected' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.