CLASS ztf_handler DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_http_extension. PROTECTED SECTION. TYPES t_sap_tables TYPE STANDARD TABLE OF dd02t WITH EMPTY KEY. DATA path TYPE string. DATA searched_string TYPE string. DATA page TYPE i. METHODS html_page RETURNING VALUE(html) TYPE string. METHODS html_shellbar RETURNING VALUE(html) TYPE string. METHODS html_searchbar RETURNING VALUE(html) TYPE string. METHODS html_table RETURNING VALUE(html) TYPE string. METHODS html_table_rows RETURNING VALUE(html) TYPE string. METHODS sap_table_getcount RETURNING VALUE(count) TYPE i. METHODS sap_table_getlist RETURNING VALUE(sap_tables) TYPE t_sap_tables. PRIVATE SECTION. ENDCLASS. CLASS ztf_handler IMPLEMENTATION. METHOD if_http_extension~handle_request. IF server->request->get_header_field( if_http_header_fields_sap=>request_method ) = `GET`. me->path = server->request->get_header_field( if_http_header_fields_sap=>path_translated_expanded ). me->searched_string = escape( val = server->request->get_form_field( `q` ) format = cl_abap_format=>e_html_text ). IF server->request->get_header_field( `hx-request` ) IS INITIAL. server->response->append_cdata( html_page( ) ). server->response->append_cdata( html_shellbar( ) ). server->response->append_cdata( html_searchbar( ) ). server->response->append_cdata( html_table( ) ). ELSE. CASE server->request->get_header_field( `app-action` ). WHEN `search`. server->response->append_cdata( html_table( ) ). WHEN `search_init`. CLEAR searched_string. server->response->append_cdata( html_searchbar( ) ). server->response->append_cdata( html_table( ) ). WHEN `scroll`. page = server->request->get_header_field( `app-page` ). server->response->append_cdata( html_table_rows( ) ). ENDCASE. ENDIF. server->response->set_status( code = 200 reason = if_http_status=>reason_200 ). server->response->set_content_type( `text/html` ). ENDIF. ENDMETHOD. METHOD html_page. CONCATENATE `https://sap.github.io/fundamental-styles/` `theming-base-content/content/Base/baseLib/baseTheme/fonts` INTO DATA(fonts_url). CONCATENATE `` `` `` `` `` `` 'Table finder'(tfi) `` `` `` `` `` `` `` `` `` `` INTO html. ENDMETHOD. METHOD html_shellbar. CONCATENATE `
` `
` `
` `` `` 'Table finder'(tfi) `` `
` `
` `
` INTO html. ENDMETHOD. METHOD html_searchbar. CONCATENATE `` INTO html. ENDMETHOD. METHOD html_table. DATA(table_count) = |{ sap_table_getcount( ) NUMBER = USER }|. DATA(table_rows) = html_table_rows( ). CONCATENATE `` `` `` `` `` `` `` `` table_rows `` `
` 'Table'(tab) `` `` table_count `` `` `` 'Description'(des) `
` INTO html. ENDMETHOD. METHOD html_table_rows. page = COND #( WHEN page IS INITIAL THEN 1 ELSE page ). DATA(sap_tables) = sap_table_getlist( ). IF lines( sap_tables ) > 0. DATA(next_page) = |{ page + 1 }|. CONCATENATE `` `` `` INTO html. LOOP AT sap_tables INTO DATA(sap_table). CONCATENATE html `` `` sap_table-tabname `` `` sap_table-ddtext `` `` INTO html. ENDLOOP. ENDIF. ENDMETHOD. METHOD sap_table_getlist. DATA(search_name) = COND #( WHEN searched_string = to_upper( searched_string ) THEN searched_string && `%` ELSE `[]` ). DATA(search_desc) = COND #( WHEN searched_string <> to_upper( searched_string ) THEN `%` && searched_string && `%` ELSE `[]` ). DATA(offset) = 100 * ( page - 1 ). SELECT dd02l~tabname, ddtext FROM dd02l LEFT JOIN dd02t ON dd02t~tabname = dd02l~tabname AND dd02t~ddlanguage = @sy-langu AND dd02t~as4local = dd02l~as4local AND dd02t~as4vers = dd02l~as4vers WHERE tabclass IN ( `TRANSP`, `CLUSTER`, `POOL` ) AND ( dd02l~tabname LIKE @search_name OR ddtext LIKE @search_desc ) ORDER BY dd02l~tabname INTO CORRESPONDING FIELDS OF TABLE @sap_tables UP TO 100 ROWS OFFSET @offset. ENDMETHOD. METHOD sap_table_getcount. DATA(search_name) = COND #( WHEN searched_string = to_upper( searched_string ) THEN searched_string && `%` ELSE `[]` ). DATA(search_desc) = COND #( WHEN searched_string <> to_upper( searched_string ) THEN `%` && searched_string && `%` ELSE `[]` ). SELECT COUNT( DISTINCT dd02l~tabname ) FROM dd02l LEFT JOIN dd02t ON dd02t~tabname = dd02l~tabname AND dd02t~ddlanguage = @sy-langu AND dd02t~as4local = dd02l~as4local AND dd02t~as4vers = dd02l~as4vers WHERE tabclass IN ( `TRANSP`, `CLUSTER`, `POOL` ) AND ( dd02l~tabname LIKE @search_name OR ddtext LIKE @search_desc ) INTO @count. ENDMETHOD. ENDCLASS.