From dd31464414edb7c380602be0c23309aba7abde22 Mon Sep 17 00:00:00 2001 From: oblomov <102328295+oblomov-dev@users.noreply.github.com> Date: Sat, 20 May 2023 08:55:19 +0200 Subject: [PATCH] demos and refactoring (#237) * overflow toolbar menu item * table popin * test * popups features * popup * popup * POPUPS * popups * popup * popups * refactoring * REFACTORING * popover * refactoring * demos * refactoring * refactoring * demos * demos * demos * demo * demos * demos * demo * demos * demo * demos * demos * demos * refactoring * abaplint --- src/00/z2ui5_cl_app_demo_00.clas.abap | 15 +- src/00/z2ui5_cl_app_demo_06.clas.abap | 34 +- src/00/z2ui5_cl_app_demo_07.clas.abap | 3 +- src/00/z2ui5_cl_app_demo_12.clas.abap | 46 +- src/00/z2ui5_cl_app_demo_20.clas.abap | 10 +- src/00/z2ui5_cl_app_demo_22.clas.abap | 23 +- src/00/z2ui5_cl_app_demo_25.clas.abap | 2 +- src/00/z2ui5_cl_app_demo_26.clas.abap | 2 +- src/00/z2ui5_cl_app_demo_38.clas.abap | 2 +- src/00/z2ui5_cl_app_demo_44.clas.abap | 6 +- src/00/z2ui5_cl_app_demo_49.clas.abap | 719 ++++++------ src/00/z2ui5_cl_app_demo_51.clas.abap | 103 ++ src/00/z2ui5_cl_app_demo_51.clas.xml | 16 + src/00/z2ui5_cl_app_demo_52.clas.abap | 142 +++ src/00/z2ui5_cl_app_demo_52.clas.xml | 16 + src/00/z2ui5_cl_app_demo_53.clas.abap | 1033 +++++++++++++++++ .../z2ui5_cl_app_demo_53.clas.locals_imp.abap | 747 ++++++++++++ src/00/z2ui5_cl_app_demo_53.clas.xml | 16 + src/00/z2ui5_cl_app_demo_54.clas.abap | 151 +++ src/00/z2ui5_cl_app_demo_54.clas.xml | 16 + src/00/z2ui5_cl_app_demo_55.clas.abap | 151 +++ src/00/z2ui5_cl_app_demo_55.clas.xml | 16 + src/00/z2ui5_cl_xml_view.clas.abap | 940 ++++++++------- src/z2ui5_cl_http_handler.clas.abap | 362 +++--- ...z2ui5_cl_http_handler.clas.locals_imp.abap | 198 ++-- ...2ui5_cl_http_handler.clas.testclasses.abap | 4 +- src/z2ui5_if_app.intf.abap | 4 +- src/z2ui5_if_client.intf.abap | 34 +- 28 files changed, 3678 insertions(+), 1133 deletions(-) create mode 100644 src/00/z2ui5_cl_app_demo_51.clas.abap create mode 100644 src/00/z2ui5_cl_app_demo_51.clas.xml create mode 100644 src/00/z2ui5_cl_app_demo_52.clas.abap create mode 100644 src/00/z2ui5_cl_app_demo_52.clas.xml create mode 100644 src/00/z2ui5_cl_app_demo_53.clas.abap create mode 100644 src/00/z2ui5_cl_app_demo_53.clas.locals_imp.abap create mode 100644 src/00/z2ui5_cl_app_demo_53.clas.xml create mode 100644 src/00/z2ui5_cl_app_demo_54.clas.abap create mode 100644 src/00/z2ui5_cl_app_demo_54.clas.xml create mode 100644 src/00/z2ui5_cl_app_demo_55.clas.abap create mode 100644 src/00/z2ui5_cl_app_demo_55.clas.xml diff --git a/src/00/z2ui5_cl_app_demo_00.clas.abap b/src/00/z2ui5_cl_app_demo_00.clas.abap index 1509cbc6..52d370ff 100644 --- a/src/00/z2ui5_cl_app_demo_00.clas.abap +++ b/src/00/z2ui5_cl_app_demo_00.clas.abap @@ -70,7 +70,7 @@ CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION. grid->simple_form( title = 'HowTo - Tables I' layout = 'ResponsiveGridLayout' )->content( 'form' )->button( text = 'List I' press = client->_event( 'z2ui5_cl_app_demo_03' ) )->button( text = 'List II' press = client->_event( 'z2ui5_cl_app_demo_48' ) - )->button( text = 'Toolbar, Container, Sort' press = client->_event( 'z2ui5_cl_app_demo_06' ) + )->button( text = 'Toolbar & Container' press = client->_event( 'z2ui5_cl_app_demo_06' ) ). grid->simple_form( title = 'HowTo - Tables II' layout = 'ResponsiveGridLayout' )->content( 'form' @@ -103,6 +103,7 @@ CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION. )->button( text = 'Views - Normal, Generic, XML' press = client->_event( 'z2ui5_cl_app_demo_23' ) )->button( text = 'Import UI5-XML-View' press = client->_event( 'z2ui5_cl_app_demo_31' ) )->button( text = 'Custom Control' press = client->_event( 'z2ui5_cl_app_demo_37' ) + )->button( text = 'Change CSS' press = client->_event( 'z2ui5_cl_app_demo_50' ) ). grid->simple_form( title = 'HowTo - Extensions II' layout = 'ResponsiveGridLayout' )->content( 'form' @@ -111,15 +112,19 @@ CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION. )->button( text = 'ext. Library' press = client->_event( 'z2ui5_cl_app_demo_40' ) ). - grid->simple_form( title = 'HowTo - More I' layout = 'ResponsiveGridLayout' )->content( 'form' + grid->simple_form( title = 'HowTo - More' layout = 'ResponsiveGridLayout' )->content( 'form' )->button( text = 'Side Effects' press = client->_event( 'z2ui5_cl_app_demo_27' ) )->button( text = 'Integer, Decimals, Dates, Time' press = client->_event( 'z2ui5_cl_app_demo_47' ) + )->button( text = 'Change Model at Runtime' press = client->_event( 'z2ui5_cl_app_demo_35' ) " )->button( text = 'FE Table' press = client->_event( 'z2ui5_cl_app_demo_49' ) ). - grid->simple_form( title = 'HowTo - More II' layout = 'ResponsiveGridLayout' )->content( 'form' - )->button( text = 'Change CSS' press = client->_event( 'z2ui5_cl_app_demo_50' ) - )->button( text = 'Change Model at Runtime' press = client->_event( 'z2ui5_cl_app_demo_35' ) + grid->simple_form( title = 'HowTo -List Report' layout = 'ResponsiveGridLayout' )->content( 'form' + )->button( text = 'Cell with Popover' press = client->_event( 'z2ui5_cl_app_demo_52' ) + )->button( text = 'Filter' press = client->_event( 'z2ui5_cl_app_demo_53' ) + )->button( text = 'Layout' press = client->_event( 'z2ui5_cl_app_demo_55' ) + )->button( text = 'Navigation' press = client->_event( 'z2ui5_cl_app_demo_54' ) + ). DATA(form) = page->grid( 'L9 M12 S12' diff --git a/src/00/z2ui5_cl_app_demo_06.clas.abap b/src/00/z2ui5_cl_app_demo_06.clas.abap index a86e6d2f..5b0fc6fc 100644 --- a/src/00/z2ui5_cl_app_demo_06.clas.abap +++ b/src/00/z2ui5_cl_app_demo_06.clas.abap @@ -60,6 +60,15 @@ CLASS Z2UI5_CL_APP_DEMO_06 IMPLEMENTATION. WHEN 'BUTTON_POST'. client->popup_message_box( 'button post was pressed' ). + WHEN 'MENU_DEFAULT'. + client->popup_message_box( 'menu default pressed' ). + + WHEN 'MENU_01'. + client->popup_message_box( 'menu 01 pressed' ). + + WHEN 'MENU_02'. + client->popup_message_box( 'menu 02 pressed' ). + WHEN 'BACK'. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). @@ -117,15 +126,30 @@ CLASS Z2UI5_CL_APP_DEMO_06 IMPLEMENTATION. unit = 'EUR' )->get_parent( )->toolbar_spacer( - )->button( - text = 'counter descending' + )->overflow_toolbar_toggle_button( icon = 'sap-icon://sort-descending' press = client->_event( 'SORT_DESCENDING' ) - )->button( - text = 'counter ascending' + )->overflow_toolbar_toggle_button( icon = 'sap-icon://sort-ascending' press = client->_event( 'SORT_ASCENDING' ) - ). + + )->overflow_toolbar_menu_button( + text = `Export` + type = `Transparent` + tooltip = `Export` + defaultaction = client->_event( 'MENU_DEFAULT' ) + icon = `sap-icon://share` + buttonMode = `Split` + )->_generic( `menu` )->_generic( `Menu` + )->menu_item( + press = client->_event( 'MENU_01' ) + text = `Export as PDF` + icon = `sap-icon://pdf-attachment` + )->menu_item( + press = client->_event( 'MENU_02' ) + text = `Export to Excel` + icon = `sap-icon://excel-attachment` + ). tab->columns( )->column( diff --git a/src/00/z2ui5_cl_app_demo_07.clas.abap b/src/00/z2ui5_cl_app_demo_07.clas.abap index 63f42fb1..f1d03651 100644 --- a/src/00/z2ui5_cl_app_demo_07.clas.abap +++ b/src/00/z2ui5_cl_app_demo_07.clas.abap @@ -58,6 +58,7 @@ ENDCLASS. CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION. + METHOD ui5_on_event. CASE client->get( )-event. @@ -85,12 +86,10 @@ CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION. WHEN 'POPUP_DESCR'. ms_file_edit = mt_file[ selkz = abap_true ]. app-view_popup = 'DESCR'. - app-next-check_set_prev_view = abap_true. WHEN 'POPUP_DATA'. ms_file_edit = mt_file[ selkz = abap_true ]. app-view_popup = 'DATA'. - app-next-check_set_prev_view = abap_true. WHEN 'BACK'. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). diff --git a/src/00/z2ui5_cl_app_demo_12.clas.abap b/src/00/z2ui5_cl_app_demo_12.clas.abap index 4ea58f75..f4c0dc29 100644 --- a/src/00/z2ui5_cl_app_demo_12.clas.abap +++ b/src/00/z2ui5_cl_app_demo_12.clas.abap @@ -7,7 +7,10 @@ CLASS z2ui5_cl_app_demo_12 DEFINITION PUBLIC. DATA mv_popup_view TYPE string. DATA mv_main_view TYPE string. DATA mv_check_initialized TYPE abap_bool. - data mv_set_prev_view type abap_bool. + DATA mv_set_prev_view TYPE abap_bool. + + DATA mv_check_popup TYPE abap_bool. + PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -27,6 +30,12 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. mv_set_prev_view = ''. mv_popup_view = ''. + IF mv_check_popup = abap_true. + mv_check_popup = abap_false. + DATA(app) = CAST z2ui5_cl_app_demo_20( client->get_app( client->get( )-id_prev_app ) ). + client->popup_message_toast( app->mv_event && ` pressed` ). + ENDIF. + CASE client->get( )-event. WHEN 'BUTTON_POPUP_01'. @@ -50,32 +59,36 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. mv_popup_view = 'POPUP_INFO_FRONTEND_CLOSE'. WHEN 'BUTTON_POPUP_04'. - mv_set_prev_view = abap_true. + mv_main_view = ``. mv_popup_view = 'POPUP_DECIDE'. WHEN 'BUTTON_POPUP_05'. + mv_check_popup = abap_true. client->nav_app_call( z2ui5_cl_app_demo_20=>factory( i_text = '(new app )this is a popup to decide, the text is send from the previous app and the answer will be send back' i_cancel_text = 'Cancel ' i_cancel_event = 'POPUP_DECIDE_CANCEL' i_confirm_text = 'Continue' i_confirm_event = 'POPUP_DECIDE_CONTINUE' - i_check_show_previous_view = abap_false ) ). + ) ). + RETURN. WHEN 'BUTTON_POPUP_06'. + mv_check_popup = abap_true. client->nav_app_call( z2ui5_cl_app_demo_20=>factory( i_text = '(new app )this is a popup to decide, the text is send from the previous app and the answer will be send back' i_cancel_text = 'Cancel' i_cancel_event = 'POPUP_DECIDE_CANCEL' i_confirm_text = 'Continue' i_confirm_event = 'POPUP_DECIDE_CONTINUE' ) ). + RETURN. WHEN 'BACK'. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). ENDCASE. - DATA(lo_main) = Z2UI5_CL_XML_VIEW=>factory( )->shell( ). + DATA(lo_main) = z2ui5_cl_xml_view=>factory( )->shell( ). CASE mv_main_view. @@ -88,7 +101,7 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. )->header_content( )->link( text = 'Source_Code' target = '_blank' - href = Z2UI5_CL_XML_VIEW=>hlp_get_source_code_url( app = me get = client->get( ) ) + href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) )->get_parent( ). DATA(grid) = page->grid( 'L7 M12 S12' )->content( 'layout' @@ -107,8 +120,8 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. press = client->_event( 'BUTTON_POPUP_03' ) )->label( 'Demo' )->button( - text = 'popup rendering, background rendering (previous view)' - press = client->_event( 'BUTTON_POPUP_04' ) + text = 'popup rendering, hold background view' + press = client->_event( val = 'BUTTON_POPUP_04' hold_view = abap_true ) )->get_parent( )->get_parent( ). grid->simple_form( 'Popup in new App' )->content( 'form' @@ -118,12 +131,12 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. press = client->_event( 'BUTTON_POPUP_05' ) )->label( 'Demo' )->button( - text = 'popup rendering, background rendering (previous view)' - press = client->_event( 'BUTTON_POPUP_06' ) ). + text = 'popup rendering, hold previous view' + press = client->_event( val = 'BUTTON_POPUP_06' hold_view = abap_true ) ). ENDCASE. - DATA(lo_popup) = Z2UI5_CL_XML_VIEW=>factory_popup( ). + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). CASE mv_popup_view. @@ -158,11 +171,14 @@ CLASS Z2UI5_CL_APP_DEMO_12 IMPLEMENTATION. ENDCASE. - client->set_next( VALUE #( - xml_main = lo_main->get_root( )->xml_get( ) - xml_popup = cond #( when mv_popup_view is not INITIAL then lo_popup->get_root( )->xml_get( ) ) - check_set_prev_view = mv_set_prev_view - ) ). + DATA(ls_next) = VALUE z2ui5_if_client=>ty_s_next( + xml_main = lo_main->get_root( )->xml_get( ) + xml_popup = COND #( WHEN mv_popup_view IS NOT INITIAL THEN lo_popup->get_root( )->xml_get( ) ) + ). + IF mv_main_view = ``. + ls_next-xml_main = ``. + ENDIF. + client->set_next( ls_next ). ENDMETHOD. ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_20.clas.abap b/src/00/z2ui5_cl_app_demo_20.clas.abap index 9a6bad3d..605cbe93 100644 --- a/src/00/z2ui5_cl_app_demo_20.clas.abap +++ b/src/00/z2ui5_cl_app_demo_20.clas.abap @@ -11,7 +11,6 @@ CLASS z2ui5_cl_app_demo_20 DEFINITION PUBLIC. i_cancel_event TYPE string i_confirm_text TYPE string i_confirm_event TYPE string - i_check_show_previous_view TYPE abap_bool DEFAULT abap_true RETURNING VALUE(result) TYPE REF TO z2ui5_cl_app_demo_20. @@ -22,8 +21,7 @@ CLASS z2ui5_cl_app_demo_20 DEFINITION PUBLIC. DATA mv_cancel_event TYPE string. DATA mv_confirm_text TYPE string. DATA mv_confirm_event TYPE string. - DATA mv_check_show_previous_view TYPE abap_bool. - data mv_next_event type string. + data mv_event type string. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -42,7 +40,7 @@ CLASS Z2UI5_CL_APP_DEMO_20 IMPLEMENTATION. result->mv_cancel_event = i_cancel_event. result->mv_confirm_text = i_confirm_text. result->mv_confirm_event = i_confirm_event. - result->mv_check_show_previous_view = i_check_show_previous_view. + " result->mv_check_show_previous_view = i_check_show_previous_view. ENDMETHOD. @@ -56,13 +54,11 @@ CLASS Z2UI5_CL_APP_DEMO_20 IMPLEMENTATION. CASE client->get( )-event. WHEN mv_cancel_event OR mv_confirm_event. - mv_next_event = client->get( )-event. + mv_event = client->get( )-event. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). ENDCASE. client->set_next( VALUE #( - check_set_prev_view = mv_check_show_previous_view - xml_main = Z2UI5_CL_XML_VIEW=>factory( )->get_root( )->xml_get( ) xml_popup = Z2UI5_CL_XML_VIEW=>factory_popup( )->dialog( 'abap2UI5 - Popup to decide' )->vbox( diff --git a/src/00/z2ui5_cl_app_demo_22.clas.abap b/src/00/z2ui5_cl_app_demo_22.clas.abap index 7f532943..b92f286b 100644 --- a/src/00/z2ui5_cl_app_demo_22.clas.abap +++ b/src/00/z2ui5_cl_app_demo_22.clas.abap @@ -34,7 +34,7 @@ ENDCLASS. -CLASS z2ui5_cl_app_demo_22 IMPLEMENTATION. +CLASS Z2UI5_CL_APP_DEMO_22 IMPLEMENTATION. METHOD z2ui5_if_app~main. @@ -59,7 +59,7 @@ CLASS z2ui5_cl_app_demo_22 IMPLEMENTATION. ENDIF. - app-s_next-t_scroll_pos = VALUE #( + app-s_next-t_scroll = VALUE #( ( name = 'id_page' ) ( name = 'id_text3' ) ). @@ -70,35 +70,36 @@ CLASS z2ui5_cl_app_demo_22 IMPLEMENTATION. "nothing to do, default mode WHEN 'BUTTON_SCROLL_BOTTOM'. - app-s_next-t_scroll_pos = VALUE #( ( name = 'id_page' value = '99999' ) ). + app-s_next-t_scroll = VALUE #( ( name = 'id_page' value = '99999' ) ). WHEN 'BUTTON_SCROLL_UP'. DATA(lv_pos) = CONV i( app-s_get-t_scroll_pos[ name = `id_page` ]-value ) - 500. - app-s_next-t_scroll_pos = VALUE #( ( name = 'id_page' value = lv_pos ) ). + app-s_next-t_scroll = VALUE #( ( name = 'id_page' value = lv_pos ) ). WHEN 'BUTTON_SCROLL_DOWN'. - lv_pos = CONV i( app-s_get-t_scroll_pos[ name = `id_page` ]-value ) + 500. - app-s_next-t_scroll_pos = VALUE #( ( name = 'id_page' value = lv_pos ) ). + lv_pos = CONV i( value #( app-s_get-t_scroll_pos[ name = `id_page` ]-value optional ) ) + 500. + app-s_next-t_scroll = VALUE #( ( name = 'id_page' value = lv_pos ) ). WHEN 'BUTTON_SCROLL_HOLD'. - app-s_next-t_scroll_pos = app-s_get-t_scroll_pos. + app-s_next-t_scroll = app-s_get-t_scroll_pos. WHEN 'BUTTON_FOCUS_FIRST'. - app-s_next-s_cursor_pos = VALUE #( id = 'id_text1' cursorpos = '3' selectionstart = '3' selectionend = '3' ). + app-s_next-s_cursor = VALUE #( id = 'id_text1' cursorpos = '3' selectionstart = '3' selectionend = '3' ). WHEN 'BUTTON_FOCUS_SECOND'. - app-s_next-s_cursor_pos = VALUE #( id = 'id_text2' cursorpos = '5' selectionstart = '5' selectionend = '10' ). + app-s_next-s_cursor = VALUE #( id = 'id_text2' cursorpos = '5' selectionstart = '5' selectionend = '10' ). WHEN 'BUTTON_FOCUS_END'. - app-s_next-s_cursor_pos = VALUE #( id = 'id_text3' cursorpos = '99999' selectionstart = '99999' selectionend = '999999' ). + app-s_next-s_cursor = VALUE #( id = 'id_text3' cursorpos = '99999' selectionstart = '99999' selectionend = '999999' ). - app-s_next-t_scroll_pos = VALUE #( + app-s_next-t_scroll = VALUE #( ( name = 'id_page' value = '99999' ) ( name = 'id_text3' value = '99999' ) ). + WHEN 'BACK'. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). diff --git a/src/00/z2ui5_cl_app_demo_25.clas.abap b/src/00/z2ui5_cl_app_demo_25.clas.abap index aaf8a7d5..99d3f12c 100644 --- a/src/00/z2ui5_cl_app_demo_25.clas.abap +++ b/src/00/z2ui5_cl_app_demo_25.clas.abap @@ -90,7 +90,7 @@ CLASS Z2UI5_CL_APP_DEMO_25 IMPLEMENTATION. WHEN 'SECOND'. - page = Z2UI5_CL_XML_VIEW=>factory( + page = Z2UI5_CL_XML_VIEW=>factory( )->shell( )->page( title = 'abap2UI5 - flow logic - APP 02' navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true diff --git a/src/00/z2ui5_cl_app_demo_26.clas.abap b/src/00/z2ui5_cl_app_demo_26.clas.abap index 74f97036..0ce48dcc 100644 --- a/src/00/z2ui5_cl_app_demo_26.clas.abap +++ b/src/00/z2ui5_cl_app_demo_26.clas.abap @@ -64,7 +64,7 @@ CLASS Z2UI5_CL_APP_DEMO_26 IMPLEMENTATION. WHEN 'POPOVER'. app-view_popup = 'POPOVER'. - app-s_next-popup_open_by_id = 'TEST'. + app-s_next-popover_open_by_id = 'TEST'. WHEN 'BUTTON_CONFIRM'. client->popup_message_toast( |confirm| ). diff --git a/src/00/z2ui5_cl_app_demo_38.clas.abap b/src/00/z2ui5_cl_app_demo_38.clas.abap index 695d44b9..ceaae2a5 100644 --- a/src/00/z2ui5_cl_app_demo_38.clas.abap +++ b/src/00/z2ui5_cl_app_demo_38.clas.abap @@ -58,7 +58,7 @@ CLASS Z2UI5_CL_APP_DEMO_38 IMPLEMENTATION. app-view_popup = 'POPUP'. WHEN 'POPOVER'. app-view_popup = 'POPOVER'. - app-next-popup_open_by_id = 'test'. + app-next-popover_open_by_id = 'test'. WHEN 'BACK'. client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). ENDCASE. diff --git a/src/00/z2ui5_cl_app_demo_44.clas.abap b/src/00/z2ui5_cl_app_demo_44.clas.abap index 2acf1f4b..2e644ec8 100644 --- a/src/00/z2ui5_cl_app_demo_44.clas.abap +++ b/src/00/z2ui5_cl_app_demo_44.clas.abap @@ -5,10 +5,12 @@ CLASS z2ui5_cl_app_demo_44 DEFINITION PUBLIC. ENDCLASS. -CLASS z2ui5_cl_app_demo_44 IMPLEMENTATION. + + +CLASS Z2UI5_CL_APP_DEMO_44 IMPLEMENTATION. + METHOD z2ui5_if_app~main. client->set_next( VALUE #( xml_main = z2ui5_cl_xml_view=>factory( )->label( `Hello World!` )->get_root( )->xml_get( ) ) ). ENDMETHOD. - ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_49.clas.abap b/src/00/z2ui5_cl_app_demo_49.clas.abap index 7ceb784e..f3ecef57 100644 --- a/src/00/z2ui5_cl_app_demo_49.clas.abap +++ b/src/00/z2ui5_cl_app_demo_49.clas.abap @@ -155,7 +155,64 @@ ENDCLASS. -CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. +CLASS Z2UI5_CL_APP_DEMO_49 IMPLEMENTATION. + + + METHOD encode_base64. + + TRY. + CALL METHOD ('CL_WEB_HTTP_UTILITY')=>encode_base64 + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(classname) = 'CL_HTTP_UTILITY'. + CALL METHOD (classname)=>encode_base64 + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + ENDTRY. + + ENDMETHOD. + + + METHOD init_table_output. + + " CLEAR ms_layout-s_table. + " CLEAR mt_cols. + " CLEAR ms_layout-t_cols. + + ms_view-headerexpanded = abap_true. + ms_view-headerpinned = abap_true. + + DATA(lt_cols) = lcl_db=>get_fieldlist_by_table( mt_table ). + LOOP AT lt_cols REFERENCE INTO DATA(lr_col) FROM 2. + + INSERT VALUE #( + name = lr_col->* + ) INTO TABLE ms_layout-t_filter_show. + + INSERT VALUE #( + visible = abap_true + name = lr_col->* + " length = `10px` + title = lr_col->* + ) INTO TABLE ms_layout-t_cols. + +* INSERT VALUE #( +* " selkz = abap_true +* name = lr_col->* +* " length = `10px` +* ) INTO TABLE ms_layout-t_cols. + + ENDLOOP. + + ENDMETHOD. METHOD z2ui5_if_app~main. @@ -228,10 +285,10 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. INSERT ls_layout INTO TABLE mt_db_layout. WHEN 'BUTTON_SEARCH'. - app-next-s_cursor_pos-id = 'SEARCH'. - app-next-s_cursor_pos-cursorpos = '99'. - app-next-s_cursor_pos-selectionend = '99'. - app-next-s_cursor_pos-selectionstart = '99'. + app-next-s_cursor-id = 'SEARCH'. + app-next-s_cursor-cursorpos = '99'. + app-next-s_cursor-selectionend = '99'. + app-next-s_cursor-selectionstart = '99'. z2ui5_set_search( ). WHEN 'MAIN'. @@ -242,11 +299,11 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. app-view_main = 'DETAIL'. WHEN 'POPUP_DETAIL'. - app-next-popup_open_by_id = app-get-event_data. + app-next-popover_open_by_id = app-get-event_data. app-view_popup = 'POPUP_LAYOUT'. WHEN 'POPUP_LAYOUT'. - app-next-popup_open_by_id = `btn_layout`. + app-next-popover_open_by_id = `btn_layout`. app-view_popup = 'POPUP_LAYOUT'. WHEN 'POPUP_FILTER'. @@ -286,7 +343,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ms_layout-sticky_header = `HeaderToolbar,InfoToolbar,ColumnHeaders`. ms_layout-title = `Drafts`. - app-next-t_scroll_pos = VALUE #( ( name = `page_main` ) ). + app-next-t_scroll = VALUE #( ( name = `page_main` ) ). mt_token = VALUE #( ( key = 'VAL1' text = 'value_1' selkz = abap_true visible = abap_true ) @@ -359,176 +416,6 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. - ENDMETHOD. - - METHOD init_table_output. - - " CLEAR ms_layout-s_table. - " CLEAR mt_cols. - " CLEAR ms_layout-t_cols. - - ms_view-headerexpanded = abap_true. - ms_view-headerpinned = abap_true. - - DATA(lt_cols) = lcl_db=>get_fieldlist_by_table( mt_table ). - LOOP AT lt_cols REFERENCE INTO DATA(lr_col) FROM 2. - - INSERT VALUE #( - name = lr_col->* - ) INTO TABLE ms_layout-t_filter_show. - - INSERT VALUE #( - visible = abap_true - name = lr_col->* - " length = `10px` - title = lr_col->* - ) INTO TABLE ms_layout-t_cols. - -* INSERT VALUE #( -* " selkz = abap_true -* name = lr_col->* -* " length = `10px` -* ) INTO TABLE ms_layout-t_cols. - - ENDLOOP. - - ENDMETHOD. - - - METHOD z2ui5_on_render_main. - - z2ui5_set_sort( ). - - " DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). - - DATA(view) = z2ui5_cl_xml_view=>factory( - )->page( id = `page_main` - title = 'abap2UI5 - List Report' - navbuttonpress = client->_event( 'BACK' ) - shownavbutton = abap_true - )->header_content( - )->link( - text = 'Demo' target = '_blank' - href = 'https://twitter.com/OblomovDev/status/1637163852264624139' - )->link( - text = 'Source_Code' target = '_blank' href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) - )->get_parent( ). - - IF mv_check_download_csv = abap_true. - z2ui5_set_download_csv( view ). - ENDIF. - - DATA(page) = view->dynamic_page( - headerexpanded = client->_bind( ms_view-headerexpanded ) - headerpinned = client->_bind( ms_view-headerpinned ) ). - - DATA(header_title) = page->title( ns = 'f' - )->get( )->dynamic_page_title( ). - - header_title->heading( ns = 'f' )->hbox( )->title( ms_view-title - )->button( id = `btn_layout` press = client->_event( `POPUP_LAYOUT` ) type = `Transparent` icon = `sap-icon://dropdown` ). - - header_title->expanded_content( 'f' - )->label( text = 'Drafts of abap2UI5' ). - - header_title->snapped_content( ns = 'f' - )->label( text = 'Drafts of abap2UI5' ). - - header_title->actions( ns = 'f' )->overflow_toolbar( - )->button( text = `Custom Function` press = client->_event( `BUTTON_CUSTOM` ) - ). - - DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true - )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignItems = `Start` ). - - z2ui5_set_filter( lo_box ). - - - DATA(cont) = page->content( ns = 'f' ). - - - DATA(tab) = cont->table( - items = client->_bind( val = ms_view-t_tab ) - alternaterowcolors = ms_layout-check_zebra - sticky = ms_layout-sticky_header - mode = ms_layout-selmode ). - - tab->header_toolbar( - )->toolbar( - )->title( text = ms_layout-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2` - )->toolbar_spacer( - )->button( - icon = 'sap-icon://refresh' - press = client->_event( 'BUTTON_REFRESH' ) - )->multi_input( - tokens = client->_bind( mt_token ) - showclearicon = abap_true -* showvaluehelp = abap_true -* suggestionitems = client->_bind( mt_token_sugg ) - )->item( - key = `{KEY}` - text = `{TEXT}` - )->tokens( - )->token( - key = `{KEY}` - text = `{TEXT}` - selected = `{SELKZ}` -* visible = `{VISIBLE}` - )->get_parent( )->get_parent( - )->search_field( - value = client->_bind( ms_view-search_val ) - search = client->_event( 'BUTTON_SEARCH' ) - change = client->_event( 'BUTTON_SEARCH' ) - width = `17.5rem` - id = `SEARCH` - )->toolbar_spacer( -* )->button( -* text = `Custom Action` -* press = client->_event( 'BUTTON_CUSTOM' ) - - )->button( - text = `Anlegen` - enabled = abap_false - press = client->_event( 'BUTTON_CREATE' ) - )->button( - text = `Löschen` - press = client->_event( 'BUTTON_DELETE' ) - )->button( - icon = 'sap-icon://action-settings' - press = client->_event( 'BUTTON_SETUP' ) - )->button( - icon = 'sap-icon://download' - press = client->_event( 'BUTTON_DOWNLOAD' ) - ). - - - DATA(lo_columns) = tab->columns( ). - LOOP AT ms_layout-t_cols REFERENCE INTO DATA(lr_field) - WHERE visible = abap_true. - lo_columns->column( width = lr_field->length )->text( text = CONV char10( lr_field->title ) - )->footer( - )->object_number( number = `Summe` unit = 'ST' state = `Warning` ). - ENDLOOP. - - DATA(lo_cells) = tab->items( )->column_list_item( - press = client->_event( val = 'DETAIL' data = `${UUID}` ) - selected = `{SELKZ}` - type = `Navigation` )->cells( ). - LOOP AT ms_layout-t_cols REFERENCE INTO lr_field - WHERE visible = abap_true. - IF lr_field->editable = abap_true. - lo_cells->input( `{` && lr_field->name && `}` ). - ELSE. - " lo_cells->text( `{` && lr_field->name && `}` ). - lo_cells->link( text = `{` && lr_field->name && `}` - " press = client->_event( val = `POPUP_DETAIL` data = `${` && lr_field->name && `}` ) ). - press = client->_event( val = `POPUP_DETAIL` data = `${$source>/id}` ) ). - " press = client->_event( val = `POPUP_DETAIL` data = `$event` ) ). - ENDIF. - ENDLOOP. - - app-next-xml_main = page->get_root( )->xml_get( ). - ENDMETHOD. @@ -615,6 +502,256 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. + METHOD z2ui5_on_render_main. + + z2ui5_set_sort( ). + + " DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). + + DATA(view) = z2ui5_cl_xml_view=>factory( + )->page( id = `page_main` + title = 'abap2UI5 - List Report' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/OblomovDev/status/1637163852264624139' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) + )->get_parent( ). + + IF mv_check_download_csv = abap_true. + z2ui5_set_download_csv( view ). + ENDIF. + + DATA(page) = view->dynamic_page( + headerexpanded = client->_bind( ms_view-headerexpanded ) + headerpinned = client->_bind( ms_view-headerpinned ) ). + + DATA(header_title) = page->title( ns = 'f' + )->get( )->dynamic_page_title( ). + + header_title->heading( ns = 'f' )->hbox( )->title( ms_view-title + )->button( id = `btn_layout` press = client->_event( `POPUP_LAYOUT` ) type = `Transparent` icon = `sap-icon://dropdown` ). + + header_title->expanded_content( 'f' + )->label( text = 'Drafts of abap2UI5' ). + + header_title->snapped_content( ns = 'f' + )->label( text = 'Drafts of abap2UI5' ). + + header_title->actions( ns = 'f' )->overflow_toolbar( + )->button( text = `Custom Function` press = client->_event( `BUTTON_CUSTOM` ) + ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignItems = `Start` ). + + z2ui5_set_filter( lo_box ). + + + DATA(cont) = page->content( ns = 'f' ). + + + DATA(tab) = cont->table( + items = client->_bind( val = ms_view-t_tab ) + alternaterowcolors = ms_layout-check_zebra + sticky = ms_layout-sticky_header + autopopinmode = abap_true + mode = ms_layout-selmode ). + + tab->header_toolbar( + )->toolbar( + )->title( text = ms_layout-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2` + )->toolbar_spacer( + )->button( + icon = 'sap-icon://refresh' + press = client->_event( 'BUTTON_REFRESH' ) + )->multi_input( + tokens = client->_bind( mt_token ) + showclearicon = abap_true +* showvaluehelp = abap_true +* suggestionitems = client->_bind( mt_token_sugg ) + )->item( + key = `{KEY}` + text = `{TEXT}` + )->tokens( + )->token( + key = `{KEY}` + text = `{TEXT}` + selected = `{SELKZ}` +* visible = `{VISIBLE}` + )->get_parent( )->get_parent( + + )->toolbar_spacer( +* )->button( +* text = `Custom Action` +* press = client->_event( 'BUTTON_CUSTOM' ) + + )->button( + text = `Anlegen` + enabled = abap_false + press = client->_event( 'BUTTON_CREATE' ) + )->button( + text = `Löschen` + press = client->_event( 'BUTTON_DELETE' ) + )->button( + icon = 'sap-icon://action-settings' + press = client->_event( 'BUTTON_SETUP' ) + )->button( + icon = 'sap-icon://download' + press = client->_event( 'BUTTON_DOWNLOAD' ) + ). + + + data(lv_width) = 10. + DATA(lo_columns) = tab->columns( ). + LOOP AT ms_layout-t_cols REFERENCE INTO DATA(lr_field) + WHERE visible = abap_true. + lo_columns->column( + minscreenwidth = shift_right( conv string( lv_width ) ) && `px` + demandpopin = abap_true width = lr_field->length )->text( text = CONV char10( lr_field->title ) + )->footer( + )->object_number( number = `Summe` unit = 'ST' state = `Warning` ). + lv_width = lv_width + 10. + ENDLOOP. + + DATA(lo_cells) = tab->items( )->column_list_item( + press = client->_event( val = 'DETAIL' data = `${UUID}` ) + selected = `{SELKZ}` + type = `Navigation` )->cells( ). + LOOP AT ms_layout-t_cols REFERENCE INTO lr_field + WHERE visible = abap_true. + IF lr_field->editable = abap_true. + lo_cells->input( `{` && lr_field->name && `}` ). + ELSE. + " lo_cells->text( `{` && lr_field->name && `}` ). + lo_cells->link( text = `{` && lr_field->name && `}` + " press = client->_event( val = `POPUP_DETAIL` data = `${` && lr_field->name && `}` ) ). + press = client->_event( val = `POPUP_DETAIL` data = `${$source>/id}` ) ). + " press = client->_event( val = `POPUP_DETAIL` data = `$event` ) ). + ENDIF. + ENDLOOP. + + app-next-xml_main = page->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_detail. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout_name ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_filter. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->dialog( 'abap2UI5 - Popup to select entry' + )->table( + mode = 'MultiSelect' + items = client->_bind( ms_layout-t_filter_show ) + )->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Color' )->get_parent( + )->column( )->text( 'Info' )->get_parent( + )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{VALUE}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_FILTER_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_layout. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout_name ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + METHOD z2ui5_on_render_pop_setup. DATA(ro_popup) = z2ui5_cl_xml_view=>factory_popup( ). @@ -739,115 +876,45 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. - METHOD z2ui5_on_render_pop_filter. + METHOD z2ui5_set_data. - DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + "dirty solution + "todo: map filters to rangetab and make a nice select - lo_popup->dialog( 'abap2UI5 - Popup to select entry' - )->table( - mode = 'MultiSelect' - items = client->_bind( ms_layout-t_filter_show ) - )->columns( - )->column( )->text( 'Title' )->get_parent( - )->column( )->text( 'Color' )->get_parent( - )->column( )->text( 'Info' )->get_parent( - )->column( )->text( 'Description' )->get_parent( - )->get_parent( - )->items( )->column_list_item( selected = '{SELKZ}' - )->cells( - " )->checkbox( '{SELKZ}' - )->text( '{NAME}' - )->text( '{VALUE}' - " )->text( '{DESCR}' - )->get_parent( )->get_parent( )->get_parent( )->get_parent( - )->footer( )->overflow_toolbar( - )->toolbar_spacer( - )->button( - text = 'continue' - press = client->_event( 'POPUP_FILTER_CONTINUE' ) - type = 'Emphasized' ). + IF ms_layout-s_filter-uuid IS INITIAL. - app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + SELECT FROM z2ui5_t_draft + FIELDS uuid, uuid_prev, timestampl, uname + INTO CORRESPONDING FIELDS OF TABLE @mt_table + UP TO 50 ROWS. + + ELSE. + + SELECT FROM z2ui5_t_draft + FIELDS uuid, uuid_prev, timestampl, uname + WHERE uuid = @ms_layout-s_filter-uuid + INTO CORRESPONDING FIELDS OF TABLE @mt_table + UP TO 50 ROWS. + + ENDIF. + + ms_view-t_tab = CORRESPONDING #( mt_table ). ENDMETHOD. - METHOD z2ui5_on_render_pop_detail. - DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + METHOD z2ui5_set_detail. - lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` - )->input( description = `Name` value = client->_bind( mv_layout_name ) - )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) - )->table( - mode = 'SingleSelectLeft' - items = client->_bind( mt_db_layout ) - )->columns( - )->column( )->text( 'Name' )->get_parent( - )->column( )->text( 'User' )->get_parent( - )->column( )->text( 'Default' )->get_parent( - " )->column( )->text( 'Description' )->get_parent( - )->get_parent( - )->items( )->column_list_item( selected = '{SELKZ}' - )->cells( - " )->checkbox( '{SELKZ}' - )->text( '{NAME}' - )->text( '{USER}' - )->text( '{DEFAULT}' - " )->text( '{DESCR}' - )->get_parent( )->get_parent( )->get_parent( )->get_parent( - )->footer( )->overflow_toolbar( - )->toolbar_spacer( - )->button( - text = 'load' - press = client->_event( 'POPUP_LAYOUT_LOAD' ) - type = 'Emphasized' - )->button( - text = 'close' - press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) - type = 'Emphasized' ). + ms_detail = mt_table[ uuid = client->get( )-event_data ]. - app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + SELECT SINGLE FROM z2ui5_t_draft + FIELDS * + WHERE uuid = @ms_detail-uuid + INTO CORRESPONDING FIELDS OF @ms_detail + . ENDMETHOD. - METHOD z2ui5_on_render_pop_layout. - - DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). - - lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` - )->input( description = `Name` value = client->_bind( mv_layout_name ) - )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) - )->table( - mode = 'SingleSelectLeft' - items = client->_bind( mt_db_layout ) - )->columns( - )->column( )->text( 'Name' )->get_parent( - )->column( )->text( 'User' )->get_parent( - )->column( )->text( 'Default' )->get_parent( - " )->column( )->text( 'Description' )->get_parent( - )->get_parent( - )->items( )->column_list_item( selected = '{SELKZ}' - )->cells( - " )->checkbox( '{SELKZ}' - )->text( '{NAME}' - )->text( '{USER}' - )->text( '{DEFAULT}' - " )->text( '{DESCR}' - )->get_parent( )->get_parent( )->get_parent( )->get_parent( - )->footer( )->overflow_toolbar( - )->toolbar_spacer( - )->button( - text = 'load' - press = client->_event( 'POPUP_LAYOUT_LOAD' ) - type = 'Emphasized' - )->button( - text = 'close' - press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) - type = 'Emphasized' ). - - app-next-xml_popup = lo_popup->get_root( )->xml_get( ). - - ENDMETHOD. METHOD z2ui5_set_download_csv. @@ -888,25 +955,33 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. - METHOD encode_base64. + METHOD z2ui5_set_filter. - TRY. - CALL METHOD ('CL_WEB_HTTP_UTILITY')=>encode_base64 - EXPORTING - unencoded = val - RECEIVING - encoded = result. + io_box->search_field( + value = client->_bind( ms_view-search_val ) + search = client->_event( 'BUTTON_SEARCH' ) + change = client->_event( 'BUTTON_SEARCH' ) + width = `17.5rem` + id = `SEARCH` + ). - CATCH cx_sy_dyn_call_illegal_class. + IF line_exists( ms_layout-t_filter_show[ name = `UUID` selkz = abap_true ] ). + io_box->input( value = client->_bind( ms_layout-s_filter-uuid ) description = `UUID` ). + ENDIF. - DATA(classname) = 'CL_HTTP_UTILITY'. - CALL METHOD (classname)=>encode_base64 - EXPORTING - unencoded = val - RECEIVING - encoded = result. + IF line_exists( ms_layout-t_filter_show[ name = `UUID_PREV` selkz = abap_true ] ). + io_box->input( value = client->_bind( ms_layout-s_filter-uuid_prev ) description = `UUID_PREV` ). + ENDIF. - ENDTRY. + "todo other columns... + + DATA(rt_filter) = ms_layout-t_filter_show. + DELETE rt_filter WHERE selkz = abap_false. + + io_box->get_parent( )->hbox( justifycontent = `End` + )->button( text = `Go` press = client->_event( `BUTTON_START` ) type = `Emphasized` + )->button( text = `Adapt Filters (` && shift_right( CONV string( lines( rt_filter ) ) ) && `)` press = client->_event( `POPUP_FILTER` ) + ). ENDMETHOD. @@ -936,19 +1011,6 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. - METHOD z2ui5_set_detail. - - ms_detail = mt_table[ uuid = client->get( )-event_data ]. - - SELECT SINGLE FROM z2ui5_t_draft - FIELDS * - WHERE uuid = @ms_detail-uuid - INTO CORRESPONDING FIELDS OF @ms_detail - . - - ENDMETHOD. - - METHOD z2ui5_set_sort. "quick and dirty - todo @@ -967,55 +1029,4 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDTRY. ENDMETHOD. - - - METHOD z2ui5_set_filter. - - IF line_exists( ms_layout-t_filter_show[ name = `UUID` selkz = abap_true ] ). - io_box->input( value = client->_bind( ms_layout-s_filter-uuid ) description = `UUID` ). - ENDIF. - - IF line_exists( ms_layout-t_filter_show[ name = `UUID_PREV` selkz = abap_true ] ). - io_box->input( value = client->_bind( ms_layout-s_filter-uuid_prev ) description = `UUID_PREV` ). - ENDIF. - - "todo other columns... - - DATA(rt_filter) = ms_layout-t_filter_show. - DELETE rt_filter WHERE selkz = abap_false. - - io_box->get_parent( )->hbox( justifycontent = `End` - )->button( text = `Go` press = client->_event( `BUTTON_START` ) type = `Emphasized` - )->button( text = `Adapt Filters (` && shift_right( CONV string( lines( rt_filter ) ) ) && `)` press = client->_event( `POPUP_FILTER` ) - ). - - ENDMETHOD. - - - METHOD z2ui5_set_data. - - "dirty solution - "todo: map filters to rangetab and make a nice select - - IF ms_layout-s_filter-uuid IS INITIAL. - - SELECT FROM z2ui5_t_draft - FIELDS uuid, uuid_prev, timestampl, uname - INTO CORRESPONDING FIELDS OF TABLE @mt_table - UP TO 50 ROWS. - - ELSE. - - SELECT FROM z2ui5_t_draft - FIELDS uuid, uuid_prev, timestampl, uname - WHERE uuid = @ms_layout-s_filter-uuid - INTO CORRESPONDING FIELDS OF TABLE @mt_table - UP TO 50 ROWS. - - ENDIF. - - ms_view-t_tab = CORRESPONDING #( mt_table ). - - ENDMETHOD. - ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_51.clas.abap b/src/00/z2ui5_cl_app_demo_51.clas.abap new file mode 100644 index 00000000..2cb94d41 --- /dev/null +++ b/src/00/z2ui5_cl_app_demo_51.clas.abap @@ -0,0 +1,103 @@ +CLASS z2ui5_cl_app_demo_51 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_app_demo_51 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + product = 'tomato'. + quantity = '500'. + ENDIF. + + CASE client->get( )-event. + WHEN 'BUTTON_POST'. + client->popup_message_toast( |{ product } { quantity } - send to the server| ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). + ENDCASE. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + id = 'id_page' + title = 'abapScheme - Workbench' + shownavbutton = abap_true + navbuttonpress = client->_event( 'BACK' ) ). + + page->header_content( + )->toolbar( + )->button( + text = 'Evaluate' + press = client->_event( 'BUTTON_EVAL' ) + icon = 'sap-icon://begin' + type = 'Emphasized' + ")->toolbar_spacer( + )->button( text = 'S-Expression' press = client->_event( 'BUTTON_SEXP' ) + icon = 'sap-icon://tree' + )->button( text = 'Trace' press = client->_event( 'BUTTON_TRACE' ) + icon = 'sap-icon://step' + )->button( + text = 'Previous' + press = client->_event( 'BUTTON_PREV' ) + icon = 'sap-icon://navigation-left-arrow' + )->button( + text = 'Next' + press = client->_event( 'BUTTON_NEXT' ) + icon = 'sap-icon://navigation-right-arrow' + )->button( + text = 'Refresh' + type = 'Reject' + press = client->_event( 'BUTTON_RESET' ) + icon = 'sap-icon://delete' + )->link( text = 'Help on..' href = 'https://github.com/nomssi/abap_scheme/wiki' + " icon = 'sap-icon://learning-assistant' // 'sap-icon://sys-help' + )->get_parent( ). + + +* )->toolbar( +* )->button( +* text = 'Evaluate' +* press = client->_event( 'BUTTON_EVAL' ) +* icon = 'sap-icon://begin' +* type = 'Emphasized' +* )->toolbar_spacer( +* )->button( text = 'S-Expression' press = client->_event( 'BUTTON_SEXP' ) +* icon = 'sap-icon://tree' +* )->button( text = 'Trace' press = client->_event( 'BUTTON_TRACE' ) +* icon = 'sap-icon://step' +* )->button( +* text = 'Previous' +* press = client->_event( 'BUTTON_PREV' ) +* icon = 'sap-icon://navigation-left-arrow' +* )->button( +* text = 'Next' +* press = client->_event( 'BUTTON_NEXT' ) +* icon = 'sap-icon://navigation-right-arrow' +* )->button( +* text = 'Refresh' +* type = 'Reject' +* press = client->_event( 'BUTTON_RESET' ) +* icon = 'sap-icon://delete' +* )->link( text = 'Help on..' href = 'https://github.com/nomssi/abap_scheme/wiki' +* " icon = 'sap-icon://learning-assistant' // 'sap-icon://sys-help' +* ). + + client->set_next( VALUE #( xml_main = page->get_root( )->xml_get( ) ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_51.clas.xml b/src/00/z2ui5_cl_app_demo_51.clas.xml new file mode 100644 index 00000000..e95e7621 --- /dev/null +++ b/src/00/z2ui5_cl_app_demo_51.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_APP_DEMO_51 + E + test -test + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_app_demo_52.clas.abap b/src/00/z2ui5_cl_app_demo_52.clas.abap new file mode 100644 index 00000000..3ec393c4 --- /dev/null +++ b/src/00/z2ui5_cl_app_demo_52.clas.abap @@ -0,0 +1,142 @@ +CLASS z2ui5_cl_app_demo_52 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + count TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + METHODS refresh_data. + + data next type z2ui5_if_client=>ty_s_next. + + DATA mv_check_popover TYPE abap_bool. +ENDCLASS. + + + +CLASS z2ui5_cl_app_demo_52 IMPLEMENTATION. + + + METHOD refresh_data. + + DO 100 TIMES. + DATA(ls_row) = VALUE ty_row( count = sy-index value = 'red' + info = COND #( WHEN sy-index < 50 THEN 'completed' ELSE 'uncompleted' ) + descr = 'this is a description' checkbox = abap_true ). + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + refresh_data( ). + ENDIF. + + clear next. + + CASE client->get( )-event. + + WHEN `POPOVER_DETAIL`. + DATA(lv_id) = client->get( )-event_data. + mv_check_popover = abap_true. + next-popover_open_by_id = lv_id. + + WHEN 'BUTTON_POST'. + client->popup_message_box( 'button post was pressed' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ). + + ENDCASE. + + IF mv_check_popover = abap_false. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Demo displaying popver without rerendering the main view' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) + )->get_parent( ). + + DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true + )->table( + growing = abap_true + growingthreshold = '20' + growingscrolltoload = abap_true + items = client->_bind_one( t_tab ) + sticky = 'ColumnHeaders,HeaderToolbar' ). + + tab->columns( + )->column( + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Info' )->get_parent( + )->column( + )->text( 'Description' )->get_parent( + )->column( + )->text( 'Checkbox' )->get_parent( + )->column( + )->text( 'Counter' ). + + tab->items( )->column_list_item( )->cells( + )->link( text = '{COUNT}' press = client->_event( val = `POPOVER_DETAIL` data = `${$source>/id}` hold_view = abap_true ) + )->text( '{INFO}' + )->text( '{DESCR}' + )->checkbox( selected = '{CHECKBOX}' enabled = abap_false + )->text( '{COUNT}' ). + + next-xml_main = page->get_root( )->xml_get( ). + + else. + + mv_check_popover = abap_false. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - this is a popover' contentwidth = `50%` + )->simple_form( editable = abap_true + )->content( 'form' + )->label( 'info1' + )->text( `this is a text` + )->label( 'info2' + )->text( `this is a text` + )->label( 'info3' + )->text( `this is a text` + )->text( `this is a text` + )->get_parent( )->get_parent( + )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'details' + press = client->_event( 'BUTTON_DETAILS' ) + type = 'Emphasized' + + ). + + next-xml_popup = lo_popup->get_root( )->xml_get( ). + ENDIF. + + + client->set_next( next ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_52.clas.xml b/src/00/z2ui5_cl_app_demo_52.clas.xml new file mode 100644 index 00000000..e6727178 --- /dev/null +++ b/src/00/z2ui5_cl_app_demo_52.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_APP_DEMO_52 + E + list report - cell with popover + 1 + X + X + X + + + + diff --git a/src/00/z2ui5_cl_app_demo_53.clas.abap b/src/00/z2ui5_cl_app_demo_53.clas.abap new file mode 100644 index 00000000..a2340916 --- /dev/null +++ b/src/00/z2ui5_cl_app_demo_53.clas.abap @@ -0,0 +1,1033 @@ +CLASS z2ui5_cl_app_demo_53 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_token, + key TYPE string, + text TYPE string, + visible TYPE abap_bool, + selkz TYPE abap_bool, + END OF ty_S_token. + + DATA mt_token TYPE STANDARD TABLE OF ty_S_token WITH EMPTY KEY. +* DATA mt_token_sugg TYPE STANDARD TABLE OF ty_S_token WITH EMPTY KEY. + + DATA mt_table TYPE STANDARD TABLE OF z2ui5_t_draft. + DATA ms_detail TYPE z2ui5_t_draft. + DATA mv_check_columns TYPE abap_bool. + DATA mv_check_sort TYPE abap_bool. + DATA mv_check_table TYPE abap_bool. + + DATA mv_contentheight TYPE string VALUE `70%`. + DATA mv_contentwidth TYPE string VALUE `70%`. + + DATA mv_check_download_csv TYPE abap_bool. + + TYPES: + BEGIN OF ty_S_out, + selkz TYPE abap_bool, + uuid TYPE string, + uuid_prev TYPE string, + uuid_prev_app TYPE string, + uuid_prev_app_stack TYPE string, + timestampl TYPE string, + uname TYPE string, + END OF ty_s_out. + + DATA: + BEGIN OF ms_view, + headerpinned TYPE abap_bool, + headerexpanded TYPE abap_bool, + search_val TYPE string, + title TYPE string, + t_tab TYPE STANDARD TABLE OF ty_S_out WITH EMPTY KEY, + END OF ms_view. + + TYPES: + BEGIN OF ty_S_cols, + visible TYPE abap_bool, + name TYPE string, + length TYPE string, + title TYPE string, + editable TYPE abap_bool, + END OF ty_S_cols. + + TYPES: + BEGIN OF ty_S_filter_show, + selkz TYPE abap_bool, + name TYPE string, + value TYPE string, + " t_value TYPE STANDARD TABLE OF ty_S_token WITH EMPTY KEY, + END OF ty_S_filter_show. + + TYPES: + BEGIN OF ty_S_filter, + uuid TYPE string, + uuid_prev TYPE string, + "STANDARD TABLE OF ty_s_token WITH EMPTY KEY, + END OF ty_S_filter. + + TYPES: + BEGIN OF ty_S_sort, + " selkz TYPE abap_bool, + name TYPE string, + type TYPE string, + " descr TYPE string, + " check_descending TYPE string, + END OF ty_S_sort. + + DATA: + BEGIN OF ms_layout, + check_zebra TYPE abap_bool, + title TYPE string, + sticky_header TYPE string, + selmode TYPE string, + t_filter_show TYPE STANDARD TABLE OF ty_S_filter_show, + s_filter TYPE ty_s_filter, + t_cols TYPE STANDARD TABLE OF ty_S_cols, + t_sort TYPE STANDARD TABLE OF ty_S_sort, + END OF ms_layout. + + TYPES: + BEGIN OF s_combobox, + key TYPE string, + text TYPE string, + END OF s_combobox. + + TYPES ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY. + + CLASS-METHODS encode_base64 + IMPORTING + val TYPE string + RETURNING + VALUE(result) TYPE string. + + TYPES: + BEGIN OF ty_S_db_layout, + selkz TYPE ABap_bool, + name TYPE string, + user TYPE string, + default TYPE abap_bool, + data TYPE string, + END OF ty_S_db_layout. + DATA mt_db_layout TYPE STANDARD TABLE OF ty_S_db_layout. + + DATA mv_layout_name TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_client=>ty_s_get, + next TYPE z2ui5_if_client=>ty_s_next, + END OF app. + + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render. + METHODS init_table_output. + METHODS z2ui5_on_render_main. + METHODS z2ui5_on_render_detail. + METHODS z2ui5_on_render_pop_setup. + METHODS z2ui5_on_render_pop_filter. + METHODS z2ui5_on_render_pop_detail. + METHODS z2ui5_on_render_pop_layout. + METHODS z2ui5_set_download_csv + IMPORTING + i_view TYPE REF TO z2ui5_cl_xml_view. + METHODS z2ui5_set_search. + METHODS z2ui5_set_detail. + METHODS z2ui5_set_sort. + METHODS z2ui5_set_filter + IMPORTING + io_box TYPE REF TO z2ui5_cl_xml_view. + METHODS z2ui5_set_data. + +ENDCLASS. + + + +CLASS z2ui5_cl_app_demo_53 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. + app-next-path = `/z2ui5_cl_app_demo_49`. + app-next-title = `List Report`. + + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render( ). + + + client->set_next( app-next ). + CLEAR app-get. + CLEAR app-next. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-get-event. + + WHEN 'SORT_ADD'. + INSERT VALUE #( ) INTO TABLE ms_layout-t_sort. + app-view_popup = 'POPUP_SETUP'. + + WHEN `SORT_DELETE`. + DELETE ms_layout-t_sort WHERE name = app-get-event_data. + app-view_popup = 'POPUP_SETUP'. + + WHEN 'BUTTON_DELETE'. + DELETE ms_view-t_tab WHERE selkz = abap_true. + + WHEN 'BUTTON_CUSTOM'. + client->popup_message_box( `custom action called` ). + + WHEN 'BUTTON_START'. + z2ui5_set_data( ). + + WHEN 'BUTTON_DOWNLOAD'. + mv_check_download_csv = abap_true. + + WHEN `POPUP_LAYOUT_LOAD`. + DATA(ls_layout2) = mt_db_layout[ selkz = abap_true ]. + z2ui5_lcl_utility=>trans_xml_2_object( + EXPORTING + xml = ls_layout2-data + IMPORTING + data = ms_layout + ). + ms_view-title = ls_layout2-name. + + WHEN `BUTTON_SAVE_LAYOUT`. + DATA(ls_layout) = VALUE ty_s_db_layout( + data = z2ui5_lcl_utility=>trans_data_2_xml( ms_layout ) + name = mv_layout_name + ). + INSERT ls_layout INTO TABLE mt_db_layout. + + WHEN 'BUTTON_SEARCH'. + app-next-s_cursor-id = 'SEARCH'. + app-next-s_cursor-cursorpos = '99'. + app-next-s_cursor-selectionend = '99'. + app-next-s_cursor-selectionstart = '99'. + z2ui5_set_search( ). + + WHEN 'MAIN'. + app-view_main = 'MAIN'. + + WHEN 'DETAIL'. + z2ui5_set_detail( ). + app-view_main = 'DETAIL'. + + WHEN 'POPUP_DETAIL'. + app-next-popover_open_by_id = app-get-event_data. + app-view_popup = 'POPUP_LAYOUT'. + + WHEN 'POPUP_LAYOUT'. + app-next-popover_open_by_id = `btn_layout`. + app-view_popup = 'POPUP_LAYOUT'. + + WHEN 'POPUP_FILTER'. + app-view_popup = 'POPUP_FILTER'. + + WHEN 'BUTTON_SETUP'. + app-view_popup = 'POPUP_SETUP'. + + WHEN 'POPUP_FILTER_CONTINUE'. + " app-view_popup = 'POPUP_FILTER'. + + WHEN 'BUTTON_INIT'. + init_table_output( ). + + WHEN 'BUTTON_CANCEL'. + client->popup_message_toast( |cancel| ). + app-view_popup = ''. + + WHEN 'BACK'. + " app-next-path = `test`. + client->nav_app_leave( client->get_app( app-get-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + + init_table_output( ). + + ms_view-title = `Standart`. + ms_layout-selmode = 'MultiSelect'. + ms_layout-check_zebra = abap_true. + ms_view-t_tab = CORRESPONDING #( mt_table ). + ms_layout-sticky_header = `HeaderToolbar,InfoToolbar,ColumnHeaders`. + ms_layout-title = `Drafts`. + + app-next-t_scroll = VALUE #( ( name = `page_main` ) ). + + mt_token = VALUE #( + ( key = 'VAL1' text = 'value_1' selkz = abap_true visible = abap_true ) + ( key = 'VAL3' text = 'value_3' selkz = abap_false visible = abap_true ) + ( key = 'VAL4' text = 'value_4' selkz = abap_true ) + ( key = '<500' text = '<500' selkz = abap_true ) + ). + + + + " IF app-view_main IS INITIAL. + DATA(lv_url) = z2ui5_cl_http_handler=>client-t_header[ name = `referer` ]-value. + SPLIT lv_url AT `/z2ui5_cl_app_demo_49/` INTO DATA(lv_dummy1) DATA(lv_dummy2). + SPLIT lv_dummy2 AT `(` INTO DATA(lv_view) DATA(lv_token). + IF lv_view IS NOT INITIAL. + app-view_main = lv_view. + SPLIT lv_token AT `(` INTO DATA(lv_token2) lv_dummy1. + SPLIT lv_token2 AT `)` INTO lv_token lv_dummy1. + ms_detail-uuid = lv_token. + IF ms_detail-uuid IS NOT INITIAL. + z2ui5_set_data( ). + + ms_detail = mt_table[ uuid = ms_detail-uuid ]. + + SELECT SINGLE FROM z2ui5_t_draft + FIELDS * + WHERE uuid = @ms_detail-uuid + INTO CORRESPONDING FIELDS OF @ms_detail + . + + ENDIF. + " ENDIF. + ELSE. + app-view_main = 'MAIN'. + ENDIF. + + +* mt_token_sugg = VALUE #( +* ( key = 'VAL1' text = 'value_1' ) +* ( key = 'VAL2' text = 'value_2' ) +* ( key = 'VAL3' text = 'value_3' ) +* ( key = 'VAL4' text = 'value_4' ) +* ). + + + ENDMETHOD. + + + METHOD z2ui5_on_render. + + CASE app-view_popup. + WHEN `POPUP_FILTER`. + z2ui5_on_render_pop_filter( ). + WHEN `POPUP_SETUP`. + z2ui5_on_render_pop_setup( ). + WHEN `POPUP_LAYOUT`. + z2ui5_on_render_pop_layout( ). + WHEN `POPUP_DETAIL`. + z2ui5_on_render_pop_detail( ). + ENDCASE. + + app-next-path = app-next-path && `/` && app-view_main. + + CASE app-view_main. + WHEN 'MAIN'. + z2ui5_on_render_main( ). + WHEN 'DETAIL'. + z2ui5_on_render_detail( ). + ENDCASE. + + + + ENDMETHOD. + + + METHOD init_table_output. + + " CLEAR ms_layout-s_table. + " CLEAR mt_cols. + " CLEAR ms_layout-t_cols. + + ms_view-headerexpanded = abap_true. + ms_view-headerpinned = abap_true. + + DATA(lt_cols) = lcl_db=>get_fieldlist_by_table( mt_table ). + LOOP AT lt_cols REFERENCE INTO DATA(lr_col) FROM 2. + + INSERT VALUE #( + name = lr_col->* + ) INTO TABLE ms_layout-t_filter_show. + + INSERT VALUE #( + visible = abap_true + name = lr_col->* + " length = `10px` + title = lr_col->* + ) INTO TABLE ms_layout-t_cols. + +* INSERT VALUE #( +* " selkz = abap_true +* name = lr_col->* +* " length = `10px` +* ) INTO TABLE ms_layout-t_cols. + + ENDLOOP. + + ENDMETHOD. + + + METHOD z2ui5_on_render_main. + + z2ui5_set_sort( ). + + " DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). + + DATA(view) = z2ui5_cl_xml_view=>factory( + )->page( id = `page_main` + title = 'abap2UI5 - Filter' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/OblomovDev/status/1637163852264624139' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) + )->get_parent( ). + + IF mv_check_download_csv = abap_true. + z2ui5_set_download_csv( view ). + ENDIF. + + DATA(page) = view->dynamic_page( + headerexpanded = client->_bind( ms_view-headerexpanded ) + headerpinned = client->_bind( ms_view-headerpinned ) ). + + DATA(header_title) = page->title( ns = 'f' + )->get( )->dynamic_page_title( ). + + header_title->heading( ns = 'f' )->hbox( + )->title( ms_view-title + )->get( + )->link( text = `test` press = client->_event( `POPUP_LAYOUT` ) + )->get_parent( + )->button( id = `btn_layout` press = client->_event( `POPUP_LAYOUT` ) type = `Transparent` icon = `sap-icon://dropdown` ). + + header_title->expanded_content( 'f' + )->label( text = 'Table Data' ). + + header_title->snapped_content( ns = 'f' + )->label( text = 'Table Data' ). + + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignItems = `Start` ). + + z2ui5_set_filter( lo_box ). + + + DATA(cont) = page->content( ns = 'f' ). + + + DATA(tab) = cont->table( + items = client->_bind( val = ms_view-t_tab ) + alternaterowcolors = ms_layout-check_zebra + sticky = ms_layout-sticky_header + autopopinmode = abap_true + mode = ms_layout-selmode ). + +* tab->header_toolbar( +* )->toolbar( +* )->title( text = ms_layout-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2` +* )->toolbar_spacer( +* )->button( +* icon = 'sap-icon://refresh' +* press = client->_event( 'BUTTON_REFRESH' ) +* )->multi_input( +* tokens = client->_bind( mt_token ) +* showclearicon = abap_true +** showvaluehelp = abap_true +** suggestionitems = client->_bind( mt_token_sugg ) +* )->item( +* key = `{KEY}` +* text = `{TEXT}` +* )->tokens( +* )->token( +* key = `{KEY}` +* text = `{TEXT}` +* selected = `{SELKZ}` +** visible = `{VISIBLE}` +* )->get_parent( )->get_parent( +* +* )->toolbar_spacer( +** )->button( +** text = `Custom Action` +** press = client->_event( 'BUTTON_CUSTOM' ) +* +* )->button( +* text = `Anlegen` +* enabled = abap_false +* press = client->_event( 'BUTTON_CREATE' ) +* )->button( +* text = `Löschen` +* press = client->_event( 'BUTTON_DELETE' ) +* )->button( +* icon = 'sap-icon://action-settings' +* press = client->_event( 'BUTTON_SETUP' ) +* )->button( +* icon = 'sap-icon://download' +* press = client->_event( 'BUTTON_DOWNLOAD' ) +* ). + + + data(lv_width) = 10. + DATA(lo_columns) = tab->columns( ). + LOOP AT ms_layout-t_cols REFERENCE INTO DATA(lr_field) + WHERE visible = abap_true. + lo_columns->column( + minscreenwidth = shift_right( conv string( lv_width ) ) && `px` + demandpopin = abap_true width = lr_field->length )->text( text = CONV char10( lr_field->title ) + )->footer( + )->object_number( number = `Summe` unit = 'ST' state = `Warning` ). + lv_width = lv_width + 10. + ENDLOOP. + + DATA(lo_cells) = tab->items( )->column_list_item( + press = client->_event( val = 'DETAIL' data = `${UUID}` ) + selected = `{SELKZ}` + type = `Navigation` )->cells( ). + LOOP AT ms_layout-t_cols REFERENCE INTO lr_field + WHERE visible = abap_true. + IF lr_field->editable = abap_true. + lo_cells->input( `{` && lr_field->name && `}` ). + ELSE. + " lo_cells->text( `{` && lr_field->name && `}` ). + lo_cells->link( text = `{` && lr_field->name && `}` + " press = client->_event( val = `POPUP_DETAIL` data = `${` && lr_field->name && `}` ) ). + press = client->_event( val = `POPUP_DETAIL` data = `${$source>/id}` ) ). + " press = client->_event( val = `POPUP_DETAIL` data = `$event` ) ). + ENDIF. + ENDLOOP. + + app-next-xml_main = page->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_detail. + + app-next-path = app-next-path && `(` && ms_detail-uuid && `)`. + + DATA(view) = z2ui5_cl_xml_view=>factory( + )->page( + title = 'abap2UI5 - List Report' + navbuttonpress = client->_event( 'MAIN' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/OblomovDev/status/1637163852264624139' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) ) + )->get_parent( ). + + DATA(page) = view->object_page_layout( + showtitleinheadercontent = abap_true + showeditheaderbutton = abap_true + editheaderbuttonpress = client->_event( 'EDIT_HEADER_PRESS' ) + uppercaseanchorbar = abap_false + ). + + DATA(header_title) = page->header_title( )->object_page_dyn_header_title( ). + + header_title->expanded_heading( + )->hbox( + )->title( text = 'Draft' wrapping = abap_true ). + + header_title->snapped_heading( + )->flex_box( alignitems = `Center` + )->avatar( src = `` class = 'sapUiTinyMarginEnd' + )->title( text = 'Draft' wrapping = abap_true ). + + header_title->expanded_content( ns = `uxap` )->text( `Details` ). + header_title->snapped_Content( ns = `uxap` )->text( `Details` ). + header_title->snapped_Title_On_Mobile( )->title( `Details` ). + + DATA(header_content) = page->header_Content( ns = 'uxap' ). + + header_content->flex_box( wrap = 'Wrap' + )->avatar( src = `` class = 'sapUiSmallMarginEnd' displaySize = 'layout' + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = `UUID` + )->label( text = ms_detail-uuid + )->get_parent( + )->horizontal_layout( class = 'sapUiSmallMarginBeginEnd' + )->vertical_layout( + )->label( text = 'UUID PRevious' + )->label( text = ms_detail-uuid_prev + )->get_parent( + )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Info' + )->vbox( + )->label( 'Timestampl' + )->label( CONV #( ms_detail-timestampl ) + )->get_parent( )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'User' + )->label( text = ms_detail-uname + )->get_parent( + ). + + DATA(sections) = page->sections( ). + + sections->object_page_section( titleuppercase = abap_false id = 'goalsSectionSS1' title = '2014 Goals Plan' + )->heading( ns = `uxap` + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'goalssubSectionSS1' title = 'XML' + )->blocks( + )->code_editor( + type = `XML` + " editable = mv_check_editable + value = client->_bind_one( ms_detail-data ) ). + + app-next-xml_main = view->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_setup. + + DATA(ro_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + ro_popup = ro_popup->dialog( title = 'View Setup' resizable = abap_true + contentheight = client->_bind( mv_contentheight ) contentwidth = client->_bind( mv_contentwidth ) ). + + ro_popup->custom_header( + )->bar( + )->content_right( + )->button( text = `zurücksetzten` press = client->_event( 'BUTTON_INIT' ) ). + + + DATA(lo_tab) = ro_popup->tab_container( ). + + lo_tab->tab( text = 'Table' selected = client->_bind( mv_check_table ) + )->simple_form( editable = abap_true + )->content( 'form' + )->label( 'zebra mode' + )->checkbox( client->_bind( ms_layout-check_zebra ) + )->label( 'sticky header' + )->input( client->_bind( ms_layout-sticky_header ) + )->label( text = `Title` + )->Input( value = client->_bind( ms_layout-title ) + )->label( 'sel mode' + )->combobox( + selectedkey = client->_bind( ms_layout-selmode ) + items = client->_bind_one( VALUE ty_t_combo( + ( key = 'None' text = 'None' ) + ( key = 'SingleSelect' text = 'SingleSelect' ) + ( key = 'SingleSelectLeft' text = 'SingleSelectLeft' ) + ( key = 'MultiSelect' text = 'MultiSelect' ) ) ) + )->item( + key = '{KEY}' + text = '{TEXT}' ). + + + + lo_tab->tab( + text = 'Columns' + selected = client->_bind( mv_check_columns ) + )->table( + " mode = 'MultiSelect' + items = client->_bind( ms_layout-t_cols ) + )->columns( + )->column( )->text( 'Visible' )->get_parent( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Editable' )->get_parent( + )->column( )->text( 'Length' )->get_parent( + )->get_parent( + )->items( )->column_list_item( + )->cells( + )->checkbox( '{VISIBLE}' + )->text( '{NAME}' + )->Input( '{TITLE}' + )->checkbox( '{EDITABLE}' + )->Input( '{LENGTH}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( ). + + DATA(lo_tab_sort) = lo_tab->tab( + text = 'Sort' + selected = client->_bind( mv_check_sort ) ). + + lo_tab_sort->button( icon = `sap-icon://add` press = client->_event( `SORT_ADD` ) ). + + DATA(lo_hbox) = lo_tab_sort->list( + items = client->_bind( ms_layout-t_sort ) + selectionchange = client->_event( 'SELCHANGE' ) + )->custom_list_item( + )->hbox( ). + + lo_hbox->combobox( + selectedkey = `{NAME}` + items = client->_bind( ms_layout-t_cols ) +* ( key = 'BLUE' text = 'green' ) +* ( key = 'GREEN' text = 'blue' ) +* ( key = 'BLACK' text = 'red' ) +* ( key = 'GRAY' text = 'gray' ) ) ) + )->item( + key = '{NAME}' + text = '{NAME}' + )->get_parent( + )->segmented_button( `{TYPE}` +)->items( + )->segmented_button_item( + key = 'DESCENDING' + icon = 'sap-icon://sort-descending' + )->segmented_button_item( + key = 'ASCENDING' + icon = 'sap-icon://sort-ascending' +)->get_parent( )->get_parent( +)->button( type = `Transparent` icon = 'sap-icon://decline' press = client->_event( val = `SORT_DELETE` data = `${NAME}` ) ). +* )->get_parent( )->get_parent( )->get_parent( + +* )->button( +* text = 'counter descending' +* icon = 'sap-icon://sort-descending' +* press = client->_event( 'SORT_DESCENDING' ) +* )->button( +* text = 'counter ascending' +* icon = 'sap-icon://sort-ascending' +* press = client->_event( 'SORT_ASCENDING' ) +* )->get_parent( ). + + +* lo_tab->tab( +* text = 'Group' +* selected = client->_bind( mv_check_group ) +* )->get_parent( )->get_parent( ). + + ro_popup->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_FILTER_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = ro_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_filter. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->dialog( 'abap2UI5 - Popup to select entry' + )->table( + mode = 'MultiSelect' + items = client->_bind( ms_layout-t_filter_show ) + )->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Color' )->get_parent( + )->column( )->text( 'Info' )->get_parent( + )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{VALUE}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_FILTER_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_detail. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout_name ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_layout. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout_name ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD z2ui5_set_download_csv. + + DATA(lo_struc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( ms_view-t_tab[ 1 ] ) ). + DATA(lt_components) = lo_struc->get_components( ). + + DATA(lv_row) = ``. + LOOP AT lt_components INTO DATA(lv_name) FROM 2. + lv_row = lv_row && lv_name-name && `;`. + ENDLOOP. + lv_row = lv_row && cl_abap_char_utilities=>cr_lf. + + + LOOP AT ms_view-t_tab REFERENCE INTO DATA(lr_row) FROM 2. + + DATA(lv_index) = 2. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && . + lv_index = lv_index + 1. + lv_row = lv_row && `;`. + ENDDO. + + lv_row = lv_row && cl_abap_char_utilities=>cr_lf. + ENDLOOP. + + DATA lv_bas64enc TYPE string. + + lv_bas64enc = encode_base64( lv_row ). + + i_view->zz_plain( `