Find CDS Views for a Table

*&---------------------------------------------------------------------*
*& Report ZUTL_FIND_CDS_FOR_TABLE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
   REPORT zutl_find_cds_for_table.
 
   TABLES: ddldependency,dd25t,dd26s.
 
   DATA: gt_25t   TYPE  STANDARD TABLE OF dd25t,
         gs_25t   TYPE dd25t,
 
         lt_final TYPE TABLE OF zfind_cds.
 
   CONSTANTS: gc_true  TYPE sap_bool VALUE 'X',
              gc_false TYPE sap_bool VALUE ' '.
 
* Deferred Class Definition
   CLASS lcl_handle_events DEFINITION DEFERRED.
 
   DATA: gt_outtab TYPE STANDARD TABLE OF alv_t_t2.
   DATA: gr_table   TYPE REF TO cl_salv_table.
   DATA: gr_container TYPE REF TO cl_gui_custom_container.
 
*...  object for handling the events of cl_salv_table
   DATA: gr_events TYPE REF TO lcl_handle_events.
   DATA: g_okcode TYPE syucomm.
   DATA: it_bdcdata TYPE bdcdata OCCURS 0 WITH HEADER LINE      .
   DATA:wa_bdcdata TYPE bdcdata .
 
* Event Handler Class Definition
   CLASS lcl_handle_events DEFINITION.
     PUBLIC SECTION.
       METHODS:
         on_link_click FOR EVENT link_click OF cl_salv_events_table
           IMPORTING row column.
   ENDCLASS .
 
* Event Handler Class Implementation
   CLASS lcl_handle_events IMPLEMENTATION.
 
* On Click Method
     METHOD on_link_click.
 
       READ TABLE lt_final INTO DATA(lwa_final) INDEX row.
 
       PERFORM bdc_dynpro      USING 'SAPLSD_ENTRY' '1000'.
       PERFORM bdc_field       USING 'BDC_CURSOR'
                                     'RSRD1-TBMA_VAL'.
       PERFORM bdc_field       USING 'BDC_OKCODE'
                                     '=WB_DISPLAY'.
       PERFORM bdc_field       USING 'BDC_OKCODE'
                                     '=WB_DISPLAY'.
       PERFORM bdc_field       USING 'RSRD1-TBMA'
                                     'X'.
       PERFORM bdc_field       USING 'RSRD1-TBMA_VAL'
                                     lwa_final-SqlViewname.
*   Navigate to Data Dictionary
       CALL TRANSACTION 'SE11' USING it_bdcdata
                                     MODE 'E'
                                     UPDATE 'A' .
 
       CLEAR:it_bdcdata, it_bdcdata[].
 
     ENDMETHOD.
 
   ENDCLASS.
 
* Selection Screen
   SELECT-OPTIONS: s_view FOR dd25t-ddtext NO INTERVALS ,
                   s_tab  FOR dd26s-tabname NO INTERVALS.
 
   PARAMETERS: ch_std  TYPE c AS CHECKBOX DEFAULT 'X',
               ch_cust TYPE c AS CHECKBOX DEFAULT 'X'.
* At Selection Screen
   AT SELECTION-SCREEN.
 
* Start of Selection
   START-OF-SELECTION.
 
* Pull the data from the db tables
*    SELECT
*    a~viewname,
*    ddtext,
*    objecttype
*      FROM dd25t AS a INNER JOIN ddldependency AS b
*      ON a~viewname = b~objectname
*      INNER JOIN dd26s AS c
*      ON a~viewname = c~viewname
*      INTO TABLE @DATA(lt_final)
*      WHERE a~ddtext IN @s_view AND
*            c~tabname IN @s_tab.
 
     SELECT * FROM zfind_cds
       INTO TABLE @lt_final
         WHERE CdsText IN @s_view
         AND   BaseTableName IN @s_tab.
     IF sy-subrc IS NOT INITIAL.
       MESSAGE 'No Data found' TYPE 'E'.
     ENDIF.
 
*    LOOP AT lt_final INTO DATA(ls_final).
*      MOVE-CORRESPONDING ls_final TO gs_25t .
*
*      APPEND gs_25t TO gt_25t.
*      CLEAR:gs_25t.
*    ENDLOOP.
*
*    SORT gt_25t BY viewname ASCENDING.
*
*    DELETE ADJACENT DUPLICATES FROM gt_25t COMPARING viewname.
*
*    DESCRIBE TABLE  gt_25t LINES DATA(l_tabix).
*
*    DATA: l_count TYPE c LENGTH 7.
*    l_count = l_tabix.
 
     IF ch_std = abap_false.
       DELETE lt_final WHERE ObjectIdentifier = 'Standard'.
     ENDIF.
     IF ch_cust = abap_false.
       DELETE lt_final WHERE ObjectIdentifier = 'Custom'.
     ENDIF.
 
     IF lT_final IS INITIAL.
       MESSAGE 'No Data found' TYPE 'E'.
     ENDIF.
 
 
     SORT lt_final BY CdsViewName ASCENDING.
     DELETE ADJACENT DUPLICATES FROM lt_final COMPARING CdsViewName.
 
     DATA(l_msg) = |Total no. of CDS found {  lines( lt_final ) }|.
     MESSAGE l_msg TYPE 'I'.
     TRY.
* Call Factory Method
         CALL METHOD cl_salv_table=>factory
           IMPORTING
             r_salv_table = gr_table
           CHANGING
             t_table      = lt_final[].
       CATCH cx_salv_msg.                                "#EC NO_HANDLER
     ENDTRY.
 
     DATA: lr_functions TYPE REF TO cl_salv_functions_list.
 
     lr_functions = gr_table->get_functions( ).
     lr_functions->set_default( abap_true ).
 
     DATA: lr_columns TYPE REF TO cl_salv_columns_table,
           lr_column  TYPE REF TO cl_salv_column_table.
 
     lr_columns = gr_table->get_columns( ).
     lr_columns->set_optimize( gc_true ).
 
     lr_column ?= lr_columns->get_column( 'SQLVIEWNAME' ).
     lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
     lr_column->set_icon( if_salv_c_bool_sap=>true ).
     lr_column->set_long_text( 'SQLVIEWNAME' ).
 
     DATA: lr_events TYPE REF TO cl_salv_events_table.
     lr_events = gr_table->get_event( ).
 
     CREATE OBJECT gr_events.
 
* Set Handler
     SET HANDLER gr_events->on_link_click FOR lr_events.
 
* Display ALV
     gr_table->display( ).
 
*---------------------------------------------------
* form for bdc dynpro
*---------------------------------------------------
   FORM bdc_dynpro USING program
                         dynpro.
     CLEAR it_bdcdata.
     wa_bdcdata-program = program.
     wa_bdcdata-dynpro = dynpro.
     wa_bdcdata-dynbegin = 'X'.
     APPEND wa_bdcdata TO it_bdcdata.
     CLEAR:wa_bdcdata.
 
   ENDFORM.                    "bdc_dynpro
*---------------------------------------------------
*        form for bdc field
*---------------------------------------------------
   FORM bdc_field  USING fnam
                         fval.
     CLEAR it_bdcdata.
     wa_bdcdata-fnam = fnam.
     wa_bdcdata-fval = fval.
     APPEND wa_bdcdata TO it_bdcdata.
     CLEAR:wa_bdcdata.
   ENDFORM.                    "bdc_field

Output : None

%d bloggers like this: