process_file_details

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.