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( ``).
+
+ mv_check_download_csv = abap_false.
+
+ ENDMETHOD.
+
+
+ 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 z2ui5_set_search.
+
+ ms_view-t_tab = CORRESPONDING #( mt_table ).
+ IF ms_view-search_val IS NOT INITIAL.
+ LOOP AT ms_view-t_tab REFERENCE INTO DATA(lr_row).
+ DATA(lv_row) = ``.
+ DATA(lv_index) = 1.
+ 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.
+ ENDDO.
+
+ IF lv_row NS ms_view-search_val.
+ DELETE ms_view-t_tab.
+ ENDIF.
+ ENDLOOP.
+ ENDIF.
+
+ 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
+ "only works for 2 conditions
+ TRY.
+ IF ms_layout-t_sort IS NOT INITIAL.
+ DATA(ls_field1) = VALUE #( ms_layout-t_sort[ 1 ] OPTIONAL ).
+ DATA(ls_field2) = VALUE #( ms_layout-t_sort[ 2 ] OPTIONAL ).
+
+ SORT ms_view-t_tab BY
+ (ls_field1-name) (ls_field1-type)
+ (ls_field2-name) (ls_field2-type).
+
+ ENDIF.
+ CATCH cx_root.
+ ENDTRY.
+
+ ENDMETHOD.
+
+
+ METHOD z2ui5_set_filter.
+
+ 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`
+ ).
+
+ 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_53.clas.locals_imp.abap b/src/00/z2ui5_cl_app_demo_53.clas.locals_imp.abap
new file mode 100644
index 00000000..d38f1b36
--- /dev/null
+++ b/src/00/z2ui5_cl_app_demo_53.clas.locals_imp.abap
@@ -0,0 +1,747 @@
+CLASS lcl_db DEFINITION.
+
+
+ PUBLIC SECTION.
+
+
+ TYPES ty_t_table TYPE z2ui5_cl_app_demo_13=>ty_t_table.
+
+ CLASS-DATA app TYPE REF TO z2ui5_cl_app_demo_13.
+ "CLASS-DATA st_table TYPE ty_t_table.
+
+ CLASS-METHODS generate_test_data.
+
+ CLASS-METHODS get_table_by_json
+ IMPORTING
+ val TYPE string
+ RETURNING
+ VALUE(result) TYPE ty_t_table.
+
+ CLASS-METHODS get_table_by_xml
+ IMPORTING
+ val TYPE string
+ RETURNING
+ VALUE(result) TYPE ty_t_table.
+
+ CLASS-METHODS get_table_by_csv
+ IMPORTING
+ val TYPE string
+ RETURNING
+ VALUE(result) TYPE ty_t_table.
+
+ CLASS-METHODS get_csv_by_table
+ IMPORTING
+ val TYPE ty_t_table
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_xml_by_table
+ IMPORTING
+ val TYPE ty_t_table
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_json_by_table
+ IMPORTING
+ val TYPE ty_t_table
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_fieldlist_by_table
+ IMPORTING
+ it_table TYPE table
+ RETURNING
+ VALUE(result) TYPE string_table.
+
+ CLASS-METHODS db_save
+ IMPORTING
+ value TYPE ty_t_table.
+
+ CLASS-METHODS db_read
+ RETURNING
+ VALUE(result) TYPE ty_t_table.
+ CLASS-METHODS get_test_data_json
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+
+CLASS lcl_db IMPLEMENTATION.
+
+ METHOD generate_test_data.
+
+ app->st_db = VALUE #(
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ( carrid = 'DL' connid = '0106' countryfr = 'US' cityfrom = 'NEW YORK' airpfrom = 'JFK' countryto = 'DE' cityto = 'FRANKFURT' airpto = 'FR' )
+ ).
+
+ ENDMETHOD.
+
+
+ METHOD get_table_by_json.
+
+ DATA lt_tab TYPE ty_t_table.
+
+ /ui2/cl_json=>deserialize(
+ EXPORTING
+ json = val
+* jsonx =
+* pretty_name =
+* assoc_arrays =
+* assoc_arrays_opt =
+* name_mappings =
+* conversion_exits =
+* hex_as_base64 =
+ CHANGING
+ data = lt_tab
+ ).
+
+ result = lt_tab.
+
+ ENDMETHOD.
+
+
+ METHOD get_table_by_xml.
+
+ DATA lt_tab TYPE ty_t_table.
+
+ CALL TRANSFORMATION id SOURCE xml = val RESULT data = lt_tab.
+
+ result = lt_tab.
+
+ ENDMETHOD.
+
+ METHOD get_table_by_csv.
+
+ SPLIT val AT ';' INTO TABLE DATA(lt_cols).
+
+ LOOP AT lt_cols INTO DATA(lv_field).
+
+ DATA(ls_row) = VALUE z2ui5_cl_app_demo_13=>ty_s_spfli( ).
+ DATA(lv_index) = 1.
+ DO.
+ ASSIGN COMPONENT lv_index OF STRUCTURE ls_row TO FIELD-SYMBOL().
+ IF sy-subrc <> 0.
+ EXIT.
+ ENDIF.
+ = lv_field.
+ lv_index = lv_index + 1.
+ ENDDO.
+ INSERT ls_row INTO TABLE result.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD db_save.
+
+ "normally modify database here
+
+ "test scenario, therefore write internal table instead
+ app->st_db = value.
+
+ ENDMETHOD.
+
+ METHOD db_read.
+
+ "normally read database here
+
+ "test scenario, therefore read internal table instead
+
+ result = app->st_db.
+
+ ENDMETHOD.
+
+ METHOD get_csv_by_table.
+
+ LOOP AT val INTO DATA(ls_row).
+
+ DATA(lv_index) = 1.
+ DO.
+ ASSIGN COMPONENT lv_index OF STRUCTURE ls_row TO FIELD-SYMBOL().
+ IF sy-subrc <> 0.
+ EXIT.
+ ENDIF.
+ lv_index = lv_index + 1.
+ result = result && && ';'.
+ ENDDO.
+ result = result && cl_abap_char_utilities=>cr_lf.
+ ENDLOOP.
+
+
+ ENDMETHOD.
+
+ METHOD get_json_by_table.
+
+ result = /ui2/cl_json=>serialize(
+ val
+* compress =
+* name =
+* pretty_name =
+* type_descr =
+* assoc_arrays =
+* ts_as_iso8601 =
+* expand_includes =
+* assoc_arrays_opt =
+* numc_as_string =
+* name_mappings =
+* conversion_exits =
+ " format_output = abap_true
+* hex_as_base64 =
+ ).
+
+
+ ENDMETHOD.
+
+ METHOD get_xml_by_table.
+
+ CALL TRANSFORMATION id SOURCE values = val RESULT XML result.
+
+ ENDMETHOD.
+
+ METHOD get_fieldlist_by_table.
+
+ DATA(lo_tab) = CAST cl_abap_tabledescr( cl_abap_datadescr=>describe_by_data( it_table ) ).
+ DATA(lo_struc) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
+
+ DATA(lt_comp) = lo_struc->get_components( ).
+
+ LOOP AT lt_comp INTO DATA(ls_comp).
+ INSERT ls_comp-name INTO TABLE result.
+ ENDLOOP.
+
+ ENDMETHOD.
+
+
+ METHOD get_test_data_json.
+
+ result = `[` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` },` && |\n| &&
+ ` {` && |\n| &&
+ ` "CARRID": "DL",` && |\n| &&
+ ` "CONNID": 106,` && |\n| &&
+ ` "COUNTRYFR": "US",` && |\n| &&
+ ` "CITYFROM": "NEW YORK",` && |\n| &&
+ ` "AIRPFROM": "JFK",` && |\n| &&
+ ` "COUNTRYTO": "DE",` && |\n| &&
+ ` "CITYTO": "FRANKFURT",` && |\n| &&
+ ` "AIRPTO": "FR"` && |\n| &&
+ ` }` && |\n| &&
+ `]`.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS z2ui5_lcl_utility DEFINITION INHERITING FROM cx_no_check.
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_attri,
+ name TYPE string,
+ type_kind TYPE string,
+ type TYPE string,
+ bind_type TYPE string,
+ data_stringify TYPE string,
+ gen_type_kind TYPE string,
+ gen_type TYPE string,
+ gen_kind TYPE string,
+ END OF ty_attri.
+ TYPES ty_T_attri TYPE STANDARD TABLE OF ty_attri WITH EMPTY KEY.
+
+ DATA:
+ BEGIN OF ms_error,
+ x_root TYPE REF TO cx_root,
+ uuid TYPE string,
+ s_msg TYPE LINE OF bapirettab,
+ END OF ms_error.
+
+ METHODS constructor
+ IMPORTING
+ val TYPE any OPTIONAL
+ previous TYPE REF TO cx_root OPTIONAL
+ PREFERRED PARAMETER val.
+
+ METHODS get_text REDEFINITION.
+
+ CLASS-METHODS raise
+ IMPORTING
+ v TYPE clike DEFAULT `CX_SY_SUBRC`
+ when TYPE abap_bool DEFAULT abap_true
+ PREFERRED PARAMETER v.
+
+ CLASS-METHODS get_header_val
+ IMPORTING
+ v TYPE clike
+ RETURNING
+ VALUE(result) TYPE z2ui5_if_client=>ty_s_name_value-value.
+
+ CLASS-METHODS get_param_val
+ IMPORTING
+ v TYPE clike
+ RETURNING
+ VALUE(result) TYPE z2ui5_if_client=>ty_s_name_value-value.
+
+ CLASS-METHODS get_uuid
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_uuid_session
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_user_tech
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_timestampl
+ RETURNING
+ VALUE(result) TYPE timestampl.
+
+ CLASS-METHODS trans_any_2_json
+ IMPORTING
+ any TYPE any
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS trans_xml_2_object
+ IMPORTING
+ xml TYPE clike
+ EXPORTING
+ data TYPE data.
+
+ CLASS-METHODS get_t_attri_by_ref
+ IMPORTING
+ io_app TYPE REF TO object
+ RETURNING
+ VALUE(result) TYPE ty_t_attri ##NEEDED.
+
+ CLASS-METHODS trans_data_2_xml
+ IMPORTING
+ data TYPE data
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS get_abap_2_json
+ IMPORTING
+ val TYPE any
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS check_is_boolean
+ IMPORTING
+ val TYPE any
+ RETURNING
+ VALUE(result) TYPE abap_bool.
+
+ CLASS-METHODS get_json_boolean
+ IMPORTING
+ val TYPE any
+ RETURNING
+ VALUE(result) TYPE string.
+
+ CLASS-METHODS trans_ref_tab_2_tab
+ IMPORTING
+ ir_tab_from TYPE REF TO data
+ EXPORTING
+ t_result TYPE STANDARD TABLE.
+
+ CLASS-METHODS get_trim_upper
+ IMPORTING
+ val TYPE any
+ RETURNING
+ VALUE(result) TYPE string.
+
+ PROTECTED SECTION.
+
+ CLASS-DATA mv_counter TYPE i.
+
+ CLASS-METHODS _get_t_attri
+ IMPORTING
+ io_app TYPE REF TO object
+ iv_attri TYPE csequence
+ RETURNING
+ VALUE(result) TYPE abap_attrdescr_tab.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+
+
+CLASS z2ui5_lcl_utility IMPLEMENTATION.
+
+ METHOD get_trim_upper.
+ result = CONV #( val ).
+ result = to_upper( shift_left( shift_right( result ) ) ).
+ ENDMETHOD.
+
+
+ METHOD constructor.
+
+ super->constructor( previous = previous ).
+ CLEAR textid.
+
+ TRY.
+ ms_error-x_root ?= val.
+ CATCH cx_root ##CATCH_ALL.
+ ms_error-s_msg-message = val.
+ ENDTRY.
+
+ TRY.
+ ms_error-uuid = get_uuid( ).
+ CATCH cx_root ##CATCH_ALL.
+ ENDTRY.
+ ENDMETHOD.
+
+
+ METHOD get_abap_2_json.
+
+ IF check_is_boolean( val ).
+ result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ).
+ ELSE.
+ result = |"{ escape( val = val format = cl_abap_format=>e_json_string ) }"|.
+ ENDIF.
+
+ ENDMETHOD.
+
+
+ METHOD check_is_boolean.
+
+ TRY.
+ DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( val ) ).
+ CASE lo_ele->get_relative_name( ).
+ WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
+ result = abap_true.
+ ENDCASE.
+ CATCH cx_root.
+ ENDTRY.
+
+ ENDMETHOD.
+
+
+ METHOD get_json_boolean.
+
+ IF check_is_boolean( val ).
+ result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ).
+ ELSE.
+ result = val.
+ ENDIF.
+
+ ENDMETHOD.
+
+
+ METHOD get_timestampl.
+
+ GET TIME STAMP FIELD result.
+
+ ENDMETHOD.
+
+
+ METHOD get_user_tech.
+
+ result = sy-uname.
+
+ ENDMETHOD.
+
+
+ METHOD get_uuid.
+ TRY.
+
+ DATA uuid TYPE c LENGTH 32.
+
+ TRY.
+ CALL METHOD (`CL_SYSTEM_UUID`)=>if_system_uuid_static~create_uuid_c32
+ RECEIVING
+ uuid = uuid.
+
+ CATCH cx_sy_dyn_call_illegal_class.
+
+ DATA(lv_fm) = `GUID_CREATE`.
+ CALL FUNCTION lv_fm
+ IMPORTING
+ ev_guid_32 = uuid.
+
+ ENDTRY.
+
+ result = uuid.
+
+ CATCH cx_root.
+ ASSERT 1 = 0.
+ ENDTRY.
+ ENDMETHOD.
+
+
+ METHOD get_uuid_session.
+
+ mv_counter = mv_counter + 1.
+ result = get_trim_upper( mv_counter ).
+
+ ENDMETHOD.
+
+
+ METHOD get_header_val.
+
+ result = z2ui5_cl_http_handler=>client-t_header[ name = v ]-value.
+
+ ENDMETHOD.
+
+
+ METHOD get_param_val.
+
+ DATA(lt_param) = VALUE z2ui5_if_client=>ty_t_name_value( LET tab = z2ui5_cl_http_handler=>client-t_param IN FOR row IN tab
+ ( name = to_upper( row-name ) value = to_upper( row-value ) ) ).
+ TRY.
+ result = lt_param[ name = get_trim_upper( v ) ]-value.
+ CATCH cx_root.
+ ENDTRY.
+
+ ENDMETHOD.
+
+
+ METHOD get_t_attri_by_ref.
+
+ DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( io_app ) )->attributes.
+
+ DELETE lt_attri WHERE visibility <> cl_abap_classdescr=>public.
+
+ LOOP AT lt_attri INTO DATA(ls_attri)
+ WHERE type_kind = cl_abap_classdescr=>typekind_struct2
+ OR type_kind = cl_abap_classdescr=>typekind_struct1.
+
+ DELETE lt_attri INDEX sy-tabix.
+
+ INSERT LINES OF _get_t_attri(
+ io_app = io_app
+ iv_attri = ls_attri-name ) INTO TABLE lt_attri.
+
+ ENDLOOP.
+
+ LOOP AT lt_attri INTO ls_attri.
+
+ DATA(ls_attri2) = VALUE ty_attri( ).
+ ls_attri2 = CORRESPONDING #( ls_attri ).
+
+ FIELD-SYMBOLS TYPE any.
+ UNASSIGN .
+ DATA(lv_assign) = `IO_APP->` && ls_attri-name.
+ ASSIGN (lv_assign) TO .
+ DATA(lo_descr) = cl_abap_datadescr=>describe_by_data( ).
+ CASE lo_descr->kind.
+ WHEN lo_descr->kind_elem.
+ ls_attri2-type = CAST cl_abap_elemdescr( lo_descr )->get_relative_name( ).
+ ENDCASE.
+
+ APPEND ls_attri2 TO result.
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD _get_t_attri.
+
+ CONSTANTS c_prefix TYPE string VALUE `IO_APP->`.
+ FIELD-SYMBOLS TYPE any.
+
+ DATA(lv_name) = c_prefix && to_upper( iv_attri ).
+ ASSIGN (lv_name) TO .
+ raise( when = xsdbool( sy-subrc <> 0 ) ).
+
+ DATA(lo_type) = cl_abap_structdescr=>describe_by_data( ).
+ DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ).
+
+ LOOP AT lo_struct->get_components( ) REFERENCE INTO DATA(lr_comp).
+
+ DATA(lv_element) = iv_attri && `-` && lr_comp->name.
+
+ IF lr_comp->as_include = abap_true.
+ INSERT LINES OF _get_t_attri( io_app = io_app
+ iv_attri = lv_element ) INTO TABLE result.
+
+ ELSE.
+ INSERT VALUE #( name = lv_element
+ type_kind = lr_comp->type->type_kind ) INTO TABLE result.
+ ENDIF.
+
+ ENDLOOP.
+ ENDMETHOD.
+
+ METHOD trans_any_2_json.
+
+ result = /ui2/cl_json=>serialize( any ).
+
+ ENDMETHOD.
+
+
+ METHOD trans_data_2_xml.
+
+ " FIELD-SYMBOLS