From 63ff4eed6de858c8fd60746686cda91fff5abdf2 Mon Sep 17 00:00:00 2001 From: oblomov <102328295+oblomov-dev@users.noreply.github.com> Date: Sat, 27 Jan 2024 12:31:11 +0100 Subject: [PATCH] add-search-app (#824) * add-search-app * Update src/02/02/z2ui5_cl_app_search_apps.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * update abaplint fixes * update startup app * update * update * update * update * update --------- Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/01/01/z2ui5_cl_util_func.clas.abap | 91 +++++++++++++ src/01/01/z2ui5_t_fw_02.tabl.xml | 98 ++++++++++++++ src/01/02/z2ui5_cl_fw_index_html.clas.abap | 3 +- src/01/02/z2ui5_t_fw_01.tabl.xml | 4 - src/01/03/z2ui5_cl_fw_app_startup.clas.abap | 48 +++++-- src/02/02/z2ui5_cl_app_search_apps.clas.abap | 120 ++++++++++++++++++ ...5_cl_app_search_apps.clas.testclasses.abap | 19 +++ src/02/02/z2ui5_cl_app_search_apps.clas.xml | 17 +++ 8 files changed, 384 insertions(+), 16 deletions(-) create mode 100644 src/01/01/z2ui5_t_fw_02.tabl.xml create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.abap create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.testclasses.abap create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.xml diff --git a/src/01/01/z2ui5_cl_util_func.clas.abap b/src/01/01/z2ui5_cl_util_func.clas.abap index b2b69e5f..a5040720 100644 --- a/src/01/01/z2ui5_cl_util_func.clas.abap +++ b/src/01/01/z2ui5_cl_util_func.clas.abap @@ -42,6 +42,31 @@ CLASS z2ui5_cl_util_func DEFINITION RETURNING VALUE(result) TYPE string. + CLASS-METHODS db_save + IMPORTING + uname TYPE clike OPTIONAL + handle TYPE clike OPTIONAL + handle2 TYPE clike OPTIONAL + handle3 TYPE clike OPTIONAL + data TYPE any + check_commit TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS db_load_by_id + IMPORTING + id TYPE clike OPTIONAL + EXPORTING + VALUE(result) TYPE any. + + CLASS-METHODS db_load_by_handle + IMPORTING + uname TYPE clike OPTIONAL + handle TYPE clike OPTIONAL + handle2 TYPE clike OPTIONAL + handle3 TYPE clike OPTIONAL + EXPORTING + VALUE(result) TYPE any. CLASS-METHODS source_get_method IMPORTING @@ -1508,4 +1533,70 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. ENDMETHOD. + + METHOD db_load_by_handle. + + DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_fw_02 WITH EMPTY KEY. + + SELECT data + FROM z2ui5_t_fw_02 + WHERE + uname = @uname + AND handle = @handle + AND handle2 = @handle2 + AND handle3 = @handle3 + INTO CORRESPONDING FIELDS OF TABLE @lt_db. + + DATA(ls_db) = lt_db[ 1 ]. + + trans_xml_2_any( + EXPORTING + xml = ls_db-data + IMPORTING + any = result + ). + + ENDMETHOD. + + METHOD db_load_by_id. + + DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_fw_02 WITH EMPTY KEY. + + SELECT data + FROM z2ui5_t_fw_02 + WHERE id = @id + INTO CORRESPONDING FIELDS OF TABLE @lt_db. + + DATA(ls_db) = lt_db[ 1 ]. + + trans_xml_2_any( + EXPORTING + xml = ls_db-data + IMPORTING + any = result + ). + + ENDMETHOD. + + METHOD db_save. + + DATA(ls_db) = VALUE z2ui5_t_fw_02( + id = uuid_get_c32( ) + uname = uname + handle = handle + handle2 = handle2 + handle3 = handle3 + data = trans_xml_by_any( data ) + ). + + MODIFY z2ui5_t_fw_02 FROM @ls_db. + + IF check_commit = abap_true. + COMMIT WORK AND WAIT. + ENDIF. + + result = ls_db-id. + + ENDMETHOD. + ENDCLASS. diff --git a/src/01/01/z2ui5_t_fw_02.tabl.xml b/src/01/01/z2ui5_t_fw_02.tabl.xml new file mode 100644 index 00000000..8b20c2e8 --- /dev/null +++ b/src/01/01/z2ui5_t_fw_02.tabl.xml @@ -0,0 +1,98 @@ + + + + + + Z2UI5_T_FW_02 + E + TRANSP + abap2UI5 - data storage + A + 1 + + + Z2UI5_T_FW_02 + A + 0 + APPL0 + N + + + + MANDT + X + 0 + C + 000006 + X + CHAR + 000003 + CHAR + + + ID + X + 0 + C + 000064 + X + CHAR + 000032 + CHAR + + + UNAME + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE2 + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE3 + 0 + C + 000064 + CHAR + 000032 + CHAR + + + DATA + 0 + g + 000008 + STRG + STRG + + + DATA2 + 0 + g + 000008 + STRG + STRG + + + + + diff --git a/src/01/02/z2ui5_cl_fw_index_html.clas.abap b/src/01/02/z2ui5_cl_fw_index_html.clas.abap index 1c907888..4869b5a9 100644 --- a/src/01/02/z2ui5_cl_fw_index_html.clas.abap +++ b/src/01/02/z2ui5_cl_fw_index_html.clas.abap @@ -169,7 +169,8 @@ CLASS Z2UI5_CL_FW_INDEX_HTML IMPLEMENTATION. ` }` && |\n| && ` }` && |\n| && ` )` && |\n| && - ` }catch(e){ BusyIndicator.hide(); MessageBox.error(e.toLocaleString()); }` && |\n| && +` }catch(e){ BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error( e.toLocaleString() , { title : "Unexpected Error Occured - App Terminated" , actions : [ ] , onClose : () => { new sap.m.BusyDialog({ text : "Please Restart t` && +`he App" }).open(); } } ) }` && |\n| && ` },` && |\n| && |\n| && ` async displayFragment(xml, viewProp, openById) {` && |\n| && diff --git a/src/01/02/z2ui5_t_fw_01.tabl.xml b/src/01/02/z2ui5_t_fw_01.tabl.xml index 1ae8c139..8249f76c 100644 --- a/src/01/02/z2ui5_t_fw_01.tabl.xml +++ b/src/01/02/z2ui5_t_fw_01.tabl.xml @@ -8,7 +8,6 @@ TRANSP X abap2UI5 - drafts - E A 1 @@ -44,7 +43,6 @@ 0 C 000064 - X CHAR 000032 CHAR @@ -54,7 +52,6 @@ 0 C 000064 - X CHAR 000032 CHAR @@ -64,7 +61,6 @@ 0 C 000064 - X CHAR 000032 CHAR diff --git a/src/01/03/z2ui5_cl_fw_app_startup.clas.abap b/src/01/03/z2ui5_cl_fw_app_startup.clas.abap index 76241400..455e52de 100644 --- a/src/01/03/z2ui5_cl_fw_app_startup.clas.abap +++ b/src/01/03/z2ui5_cl_fw_app_startup.clas.abap @@ -75,6 +75,10 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. editable = `true` )->content( )->_ns_m( ). + DATA(lv_url_search) = z2ui5_cl_util_func=>app_get_url( + client = client + classname = 'z2ui5_cl_app_search_apps' ). + content->label( `Step 1` )->text( `Create a new class in your abap system` )->label( `Step 2` @@ -86,6 +90,7 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. href = `https://github.com/abap2UI5/abap2UI5/blob/main/src/03/02/z2ui5_cl_app_hello_world.clas.abap` )->label( `Step 4` ). + IF ms_home-class_editable = abap_true. content->input( placeholder = `fill in the class name and press 'check'` @@ -109,7 +114,8 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. href = lv_url enabled = z2ui5_cl_util_func=>boolean_abap_2_json( xsdbool( ms_home-class_editable = abap_false ) ) ). - DATA(form) = grid->simpleform( title = `Samples` + + DATA(form) = grid->simpleform( title = `Apps` editable = abap_true layout = `ResponsiveGridLayout` ). @@ -121,15 +127,35 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. href = `https://github.com/abap2UI5/abap2UI5-samples` ). ENDIF. +data(lv_url_samples) = z2ui5_cl_util_func=>app_get_url( + client = client + classname = 'z2ui5_cl_demo_app_000' ). + DATA(cont) = form->content( )->_ns_m( ). - cont->label( ). - cont->button( + cont->label( `Samples`). +* cont->button( +* text = `Continue...` +* press = client->_event( val = `DEMOS` check_view_destroy = abap_true ) +* enabled = xsdbool( mv_check_demo = abap_true ) )->_go_new( ). + cont->link( text = `Continue...` - press = client->_event( val = `DEMOS` check_view_destroy = abap_true ) - enabled = xsdbool( mv_check_demo = abap_true ) )->_go_new( ). - cont->button( visible = abap_false )->link( text = `More on GitHub...` - target = `_blank` - href = `https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md` ). + target = `_blank` +* press = client->_event( val = `DEMOS` check_view_destroy = abap_true ) + href = lv_url_samples + enabled = xsdbool( mv_check_demo = abap_true ) + )->_go_new( ). + cont->button( visible = abap_false ). + + cont->label( `Local` + )->link( text = `Search apps on your system...` + target = `_blank` + href = lv_url_search + ). + + cont->label( `Online` )->link( text = `More on GitHub...` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md` ). + client->view_display( form->_stringify( ) ). @@ -143,8 +169,8 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. IF mv_check_initialized = abap_false. mv_check_initialized = abap_true. z2ui5_on_init( ). - view_display_start( ). - return. + view_display_start( ). + RETURN. ENDIF. IF client->get( )-check_on_navigated = abap_true. @@ -156,7 +182,7 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. ASSIGN ls_result-row->* TO . ms_home-classname = . view_display_start( ). - return. + RETURN. ENDIF. CATCH cx_root. ENDTRY. diff --git a/src/02/02/z2ui5_cl_app_search_apps.clas.abap b/src/02/02/z2ui5_cl_app_search_apps.clas.abap new file mode 100644 index 00000000..5c31744f --- /dev/null +++ b/src/02/02/z2ui5_cl_app_search_apps.clas.abap @@ -0,0 +1,120 @@ +CLASS z2ui5_cl_app_search_apps DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_app, + name TYPE string, + visible TYPE abap_bool, + END OF ty_app. + DATA mt_apps TYPE STANDARD TABLE OF ty_app WITH EMPTY KEY. + + DATA check_initialized TYPE abap_bool. + DATA mv_search_value TYPE string. + + PROTECTED SECTION. + METHODS search. + METHODS view_display + IMPORTING + client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_app_search_apps IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mt_apps = VALUE #( FOR row IN z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ) + ( name = row ) ). + search( ). + view_display( client ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + view_display( client ). + ENDIF. + + CASE client->get( )-event. + + WHEN `ON_PRESS`. + DATA(lt_arg) = client->get( )-t_event_arg. + DATA(lv_app) = lt_arg[ 1 ]. + + DATA li_app TYPE REF TO z2ui5_if_app. + CREATE OBJECT li_app TYPE (lv_app). + client->nav_app_call( li_app ). + +* client->message_toast_display( lv_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'ON_SEARCH'. + search( ). + client->view_model_update( ). + client->message_toast_display( |backend search done| ). + ENDCASE. + + ENDMETHOD. + + METHOD search. + + DATA lr_app TYPE REF TO ty_app. + + LOOP AT mt_apps REFERENCE INTO lr_app. + lr_app->visible = abap_false. + IF lr_app->name CS 'DEMO'. + CONTINUE. + ENDIF. + IF lr_app->name CS mv_search_value. + lr_app->visible = abap_true. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + + METHOD view_display. + + + + DATA(page) = z2ui5_cl_xml_view=>factory( + )->shell( + )->page( + title = 'abap2UI5 - Search Apps' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack is not initial ) + )->header_content( + )->search_field( + value = client->_bind_edit( mv_search_value ) + search = client->_event( 'ON_SEARCH' ) + change = client->_event( 'ON_SEARCH' ) + width = `17.5rem` + id = `SEARCH` + )->get_parent( ). + + LOOP AT mt_apps REFERENCE INTO DATA(lr_app). + DATA(lv_tabix) = sy-tabix. + page->generic_tile( + class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout' + press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ) ) + header = client->_bind( val = lr_app->name tab = mt_apps tab_index = lv_tabix ) + visible = client->_bind( val = lr_app->visible tab = mt_apps tab_index = lv_tabix ) ). + ENDLOOP. + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/02/z2ui5_cl_app_search_apps.clas.testclasses.abap b/src/02/02/z2ui5_cl_app_search_apps.clas.testclasses.abap new file mode 100644 index 00000000..b6345815 --- /dev/null +++ b/src/02/02/z2ui5_cl_app_search_apps.clas.testclasses.abap @@ -0,0 +1,19 @@ +CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING + DURATION short + RISK LEVEL dangerous. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_unit_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_app) = NEW z2ui5_cl_app_search_apps( ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/02/z2ui5_cl_app_search_apps.clas.xml b/src/02/02/z2ui5_cl_app_search_apps.clas.xml new file mode 100644 index 00000000..95fd3923 --- /dev/null +++ b/src/02/02/z2ui5_cl_app_search_apps.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_APP_SEARCH_APPS + E + abap2UI5 - find all apps on the system + 1 + X + X + X + X + + + +