From 8309642e555f38f85e871ed7bde8cdf1b493ce14 Mon Sep 17 00:00:00 2001
From: oblomov <102328295+oblomov-dev@users.noreply.github.com>
Date: Thu, 11 May 2023 22:53:38 +0200
Subject: [PATCH] Demos (#217)
* demos
* demos
* demos
* demos
* demos
* demos
* demos
* demos
* demos
---
src/00/z2ui5_cl_app_demo_00.clas.abap | 26 +-
src/00/z2ui5_cl_app_demo_07.clas.abap | 120 +--
src/00/z2ui5_cl_app_demo_35.clas.abap | 24 +-
src/00/z2ui5_cl_app_demo_35.clas.xml | 2 +-
src/00/z2ui5_cl_app_demo_47.clas.abap | 3 -
src/00/z2ui5_cl_app_demo_49.clas.abap | 759 +++++++++++++-----
src/00/z2ui5_cl_app_demo_49.clas.xml | 2 +-
src/00/z2ui5_cl_xml_view.clas.abap | 278 ++++++-
...z2ui5_cl_http_handler.clas.locals_imp.abap | 18 +-
9 files changed, 877 insertions(+), 355 deletions(-)
diff --git a/src/00/z2ui5_cl_app_demo_00.clas.abap b/src/00/z2ui5_cl_app_demo_00.clas.abap
index a168862a..dbde278e 100644
--- a/src/00/z2ui5_cl_app_demo_00.clas.abap
+++ b/src/00/z2ui5_cl_app_demo_00.clas.abap
@@ -113,12 +113,13 @@ CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION.
grid->simple_form( title = 'HowTo - More I' layout = 'ResponsiveGridLayout' )->content( 'form'
)->button( text = 'Side Effects' press = client->_event( 'z2ui5_cl_app_demo_27' )
- )->button( text = 'Integer and Decimals' press = client->_event( 'z2ui5_cl_app_demo_47' )
- )->button( text = 'FE Table' press = client->_event( 'z2ui5_cl_app_demo_49' )
+ )->button( text = 'Integer, Decimals, Dates, Time' press = client->_event( 'z2ui5_cl_app_demo_47' )
+ " )->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' )
+ 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' )
).
DATA(form) = page->grid( 'L9 M12 S12'
@@ -201,7 +202,22 @@ CLASS Z2UI5_CL_APP_DEMO_00 IMPLEMENTATION.
growfactor = '1'
styleclass = 'sapUiTinyMargin'
)->get_parent( )->get_parent(
- )->text( `Use the sap.uxap.ObjectPageLayout to easily display information related to a business object. It is composed of a header and content wrapping in sections and subestions.` )->get(
+ )->text( `Use the sap.uxap.ObjectPageLayout to easily display information related to a business object. It is composed of a header and content wrapping in sections and subestions` )->get(
+ )->layout_data(
+ )->flex_item_data(
+ growfactor = '3'
+ styleclass = 'sapUiTinyMargin' ).
+
+ form->flex_box( class = 'columns'
+ )->button(
+ text = 'List Report'
+ press = client->_event( 'z2ui5_cl_app_demo_49' ) )->get(
+ )->layout_data(
+ )->flex_item_data(
+ growfactor = '1'
+ styleclass = 'sapUiTinyMargin'
+ )->get_parent( )->get_parent(
+ )->text( `Similar functionality to a Fiori Elements List Report - Display Table with Sorting, Filtering, Navigation, Layouts and Custom Functions` )->get(
)->layout_data(
)->flex_item_data(
growfactor = '3'
diff --git a/src/00/z2ui5_cl_app_demo_07.clas.abap b/src/00/z2ui5_cl_app_demo_07.clas.abap
index 9988f6ff..63f42fb1 100644
--- a/src/00/z2ui5_cl_app_demo_07.clas.abap
+++ b/src/00/z2ui5_cl_app_demo_07.clas.abap
@@ -51,10 +51,6 @@ CLASS z2ui5_cl_app_demo_07 DEFINITION PUBLIC.
RETURNING
VALUE(r_result) TYPE string.
- METHODS ui5_get_ccontrol_file_upload
- RETURNING
- VALUE(result) TYPE string.
-
PRIVATE SECTION.
ENDCLASS.
@@ -62,118 +58,6 @@ ENDCLASS.
CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION.
-
- METHOD ui5_get_ccontrol_file_upload.
-
- result = ` jQuery.sap.declare("z2ui5.FileUploader");` && |\n| &&
- |\n| &&
- ` sap.ui.define([` && |\n| &&
- ` "sap/ui/core/Control",` && |\n| &&
- ` "sap/m/Button",` && |\n| &&
- ` "sap/ui/unified/FileUploader"` && |\n| &&
- ` ], function (Control, Button, FileUploader) {` && |\n| &&
- ` "use strict";` && |\n| &&
- |\n| &&
- ` return Control.extend("z2ui5.FileUploader", {` && |\n| &&
- |\n| &&
- ` metadata: {` && |\n| &&
- ` properties: {` && |\n| &&
- ` value: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: ""` && |\n| &&
- ` },` && |\n| &&
- ` path: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: ""` && |\n| &&
- ` },` && |\n| &&
- ` tooltip: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: ""` && |\n| &&
- ` },` && |\n| &&
- ` fileType: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: ""` && |\n| &&
- ` },` && |\n| &&
- ` placeholder: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: ""` && |\n| &&
- ` },` && |\n| &&
- ` buttonText: {` && |\n| &&
- ` type: "string",` && |\n| &&
- ` defaultValue: "Upload"` && |\n| &&
- ` },` && |\n| &&
- ` enabled: {` && |\n| &&
- ` type: "boolean",` && |\n| &&
- ` defaultValue: true` && |\n| &&
- ` },` && |\n| &&
- ` multiple: {` && |\n| &&
- ` type: "boolean",` && |\n| &&
- ` defaultValue: false` && |\n| &&
- ` }` && |\n| &&
- ` },` && |\n| &&
- |\n| &&
- |\n| &&
- ` aggregations: {` && |\n| &&
- ` },` && |\n| &&
- ` events: {` && |\n| &&
- ` "upload": {` && |\n| &&
- ` allowPreventDefault: true,` && |\n| &&
- ` parameters: {}` && |\n| &&
- ` }` && |\n| &&
- ` },` && |\n| &&
- ` renderer: null` && |\n| &&
- ` },` && |\n| &&
- |\n| &&
- ` renderer: function (oRm, oControl) {` && |\n| &&
- |\n| &&
- ` oControl.oUploadButton = new Button({` && |\n| &&
- ` text: oControl.getProperty("buttonText"),` && |\n| &&
- ` enabled: oControl.getProperty("path") !== "",` && |\n| &&
- ` press: function (oEvent) {` && |\n| &&
- |\n| &&
- ` this.setProperty("path", this.oFileUploader.getProperty("value"));` && |\n| &&
- |\n| &&
- ` var file = this.oFileUploader.oFileUpload.files[0];` && |\n| &&
- ` var reader = new FileReader();` && |\n| &&
- |\n| &&
- ` reader.onload = function (evt) {` && |\n| &&
- ` var vContent = evt.currentTarget.result;` && |\n| &&
- ` this.setProperty("value", vContent);` && |\n| &&
- ` this.fireUpload();` && |\n| &&
- ` //this.getView().byId('picture' ).getDomRef().src = vContent;` && |\n| &&
- ` }.bind(this)` && |\n| &&
- |\n| &&
- ` reader.readAsDataURL(file);` && |\n| &&
- ` }.bind(oControl)` && |\n| &&
- ` });` && |\n| &&
- |\n| &&
- ` oControl.oFileUploader = new FileUploader({` && |\n| &&
- ` icon: "sap-icon://browse-folder",` && |\n| &&
- ` iconOnly: true,` && |\n| &&
- ` value: oControl.getProperty("path"),` && |\n| &&
- ` placeholder: oControl.getProperty("placeholder"),` && |\n| &&
- ` change: function (oEvent) {` && |\n| &&
- ` var value = oEvent.getSource().getProperty("value");` && |\n| &&
- ` this.setProperty("path", value);` && |\n| &&
- ` if (value) {` && |\n| &&
- ` this.oUploadButton.setEnabled();` && |\n| &&
- ` } else {` && |\n| &&
- ` this.oUploadButton.setEnabled(false);` && |\n| &&
- ` }` && |\n| &&
- ` this.oUploadButton.rerender();` && |\n| &&
- ` }.bind(oControl)` && |\n| &&
- ` });` && |\n| &&
- |\n| &&
- ` var hbox = new sap.m.HBox();` && |\n| &&
- ` hbox.addItem(oControl.oFileUploader);` && |\n| &&
- ` hbox.addItem(oControl.oUploadButton);` && |\n| &&
- ` oRm.renderControl(hbox);` && |\n| &&
- ` }` && |\n| &&
- ` });` && |\n| &&
- ` });`.
- ENDMETHOD.
-
-
METHOD ui5_on_event.
CASE client->get( )-event.
@@ -299,7 +183,7 @@ CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION.
page->text( ns = 'm' text = 'Custom Control for File Upload is now loaded.'
)->button( ns = 'm' text = 'continue' press = client->_event( 'START' )
- )->zz_plain( ` `
+ )->zz_plain( ` `
).
r_result = lo_view->get_root( )->xml_get( ).
@@ -319,7 +203,7 @@ CLASS Z2UI5_CL_APP_DEMO_07 IMPLEMENTATION.
)->link( text = 'Source_Code' href = Z2UI5_CL_XML_VIEW=>hlp_get_source_code_url( app = me get = client->get( ) )
)->get_parent( ).
- page->zz_file_uploader(
+ page->cc_file_uploader(
value = client->_bind( mv_value )
path = client->_bind( mv_path )
placeholder = 'filepath here...'
diff --git a/src/00/z2ui5_cl_app_demo_35.clas.abap b/src/00/z2ui5_cl_app_demo_35.clas.abap
index b056c0e6..e17421ab 100644
--- a/src/00/z2ui5_cl_app_demo_35.clas.abap
+++ b/src/00/z2ui5_cl_app_demo_35.clas.abap
@@ -7,7 +7,6 @@ CLASS z2ui5_cl_app_demo_35 DEFINITION PUBLIC.
DATA mt_table TYPE REF TO data.
DATA mt_cols TYPE string_table.
DATA mv_name TYPE string.
- DATA mv_input TYPE string.
PROTECTED SECTION.
@@ -21,7 +20,6 @@ CLASS z2ui5_cl_app_demo_35 DEFINITION PUBLIC.
next TYPE z2ui5_if_client=>ty_s_next,
END OF app.
-
METHODS z2ui5_on_init.
METHODS z2ui5_on_event.
METHODS z2ui5_on_render.
@@ -116,7 +114,7 @@ CLASS z2ui5_cl_app_demo_35 IMPLEMENTATION.
text = 'Source_Code' target = '_blank'
href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) )
)->get_parent(
- )->simple_form( title = 'SE16' editable = abap_true
+ )->simple_form( editable = abap_true
)->content( `form`
)->title( 'Table'
)->label( 'Name' ).
@@ -124,19 +122,7 @@ CLASS z2ui5_cl_app_demo_35 IMPLEMENTATION.
lo_view->input( client->_bind( mv_name ) ).
lo_view->button(
- text = 'search'
- press = client->_event( 'BUTTON_TABLE' )
- ).
- lo_view = lo_view->get_parent( )->get_parent( )->simple_form( title = 'cols' editable = abap_true
- )->content( 'form' ).
-
- LOOP AT mt_cols REFERENCE INTO DATA(lr_col).
- lo_view->label( lr_col->* ).
- lo_view->input( value = mv_input ).
- ENDLOOP.
-
- lo_view->button(
- text = 'search'
+ text = 'read'
press = client->_event( 'BUTTON_POST' )
).
@@ -144,14 +130,14 @@ CLASS z2ui5_cl_app_demo_35 IMPLEMENTATION.
FIELD-SYMBOLS TYPE STANDARD TABLE.
ASSIGN mt_table->* TO .
- DATA(tab) = lo_view->get_parent( )->get_parent( )->simple_form( title = 'Table' editable = abap_true
+ DATA(tab) = lo_view->get_parent( )->get_parent( )->simple_form( editable = abap_true
)->content( 'form' )->table(
items = client->_bind( val = check_gen_data = abap_true )
).
- " DATA(lt_fields) = lcl_db=>get_fieldlist_by_table( ).
-
DATA(lo_columns) = tab->columns( ).
+ mt_cols = lcl_db=>get_fieldlist_by_table( ).
+
LOOP AT mt_cols INTO DATA(lv_field) FROM 2.
lo_columns->column( )->text( lv_field ).
ENDLOOP.
diff --git a/src/00/z2ui5_cl_app_demo_35.clas.xml b/src/00/z2ui5_cl_app_demo_35.clas.xml
index 985f94a3..ab9056f1 100644
--- a/src/00/z2ui5_cl_app_demo_35.clas.xml
+++ b/src/00/z2ui5_cl_app_demo_35.clas.xml
@@ -5,7 +5,7 @@
Z2UI5_CL_APP_DEMO_35
E
- test - table maintenance 2
+ more - dynamic model
1
X
X
diff --git a/src/00/z2ui5_cl_app_demo_47.clas.abap b/src/00/z2ui5_cl_app_demo_47.clas.abap
index 0962d2b8..643d0a09 100644
--- a/src/00/z2ui5_cl_app_demo_47.clas.abap
+++ b/src/00/z2ui5_cl_app_demo_47.clas.abap
@@ -12,7 +12,6 @@ CLASS z2ui5_cl_app_demo_47 DEFINITION PUBLIC.
DATA dec2 TYPE p LENGTH 10 DECIMALS 4.
DATA dec_sum TYPE p LENGTH 10 DECIMALS 4.
- DATA boolean TYPE abap_bool.
DATA date TYPE d.
DATA time TYPE t.
@@ -74,8 +73,6 @@ CLASS z2ui5_cl_app_demo_47 IMPLEMENTATION.
)->input( client->_bind( date )
)->label( 'time'
)->input( client->_bind( time )
- )->label( 'boolean'
- )->input( client->_bind( boolean )
)->get_root( )->xml_get( ) ) ).
diff --git a/src/00/z2ui5_cl_app_demo_49.clas.abap b/src/00/z2ui5_cl_app_demo_49.clas.abap
index 47773643..999bb07b 100644
--- a/src/00/z2ui5_cl_app_demo_49.clas.abap
+++ b/src/00/z2ui5_cl_app_demo_49.clas.abap
@@ -4,12 +4,47 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC.
INTERFACES z2ui5_if_app.
- " DATA mt_table TYPE REF TO data.
DATA mt_table TYPE STANDARD TABLE OF z2ui5_t_draft.
- " DATA mt_cols TYPE string_table.
- data mv_check_columns type abap_bool.
- data mv_check_sort type abap_bool.
- data mv_check_group type abap_bool.
+ 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,
+ data TYPE string,
+ END OF ty_s_out.
+
+ DATA:
+ BEGIN OF ms_view,
+ headerpinned TYPE abap_bool,
+ headerexpanded TYPE abap_bool,
+ search_val 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.
+
+ DATA mt_cols TYPE STANDARD TABLE OF ty_S_cols.
+
TYPES:
BEGIN OF ty_S_filter,
selkz TYPE abap_bool,
@@ -17,19 +52,46 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC.
value TYPE string,
END OF ty_S_filter.
- DATA mt_filter TYPE STANDARD TABLE OF ty_S_filter.
+* DATA mt_filter TYPE STANDARD TABLE OF ty_S_filter.
+
+
+* DATA:
+* BEGIN OF ms_table,
+* check_zebra TYPE abap_bool,
+* title TYPE string,
+* sticky_header TYPE string,
+* selmode TYPE string,
+* END OF ms_table.
TYPES:
- BEGIN OF ty_S_cols,
- selkz TYPE abap_bool,
- name TYPE string,
- length TYPE string,
- END OF ty_S_cols.
+ 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 mt_cols TYPE STANDARD TABLE OF ty_S_cols.
+ DATA mt_sort TYPE STANDARD TABLE OF ty_S_sort.
-" DATA mv_name TYPE string.
-* DATA mv_input TYPE string.
+data:
+ begin of ms_layout,
+ BEGIN OF s_table,
+ check_zebra TYPE abap_bool,
+ title TYPE string,
+ sticky_header TYPE string,
+ selmode TYPE string,
+ END OF s_table,
+ t_filter TYPE STANDARD TABLE OF ty_S_filter,
+ 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.
PROTECTED SECTION.
@@ -47,8 +109,15 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC.
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_download_csv
+ IMPORTING
+ i_view TYPE REF TO z2ui5_cl_xml_view.
- PRIVATE SECTION.
ENDCLASS.
@@ -85,19 +154,65 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION.
CASE app-get-event.
- WHEN 'BUTTON_TABLE'.
-* FIELD-SYMBOLS TYPE STANDARD TABLE.
-* CREATE DATA mt_table TYPE STANDARD TABLE OF (mv_name).
-* ASSIGN mt_table->* TO .
+ 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'.
+
+ SELECT FROM z2ui5_t_draft
+ FIELDS uuid, uuid_prev, timestampl, uname
+ INTO CORRESPONDING FIELDS OF TABLE @mt_table
+ UP TO 50 ROWS.
+ms_view-t_tab = CORRESPONDING #( mt_table ).
+
+ WHEN 'BUTTON_DOWNLOAD'.
+ mv_check_download_csv = abap_true.
+
+ 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'.
+ 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.
+
+ WHEN 'MAIN'.
+ app-view_main = 'MAIN'.
+
+ WHEN '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
+ .
+
+ app-view_main = 'DETAIL'.
WHEN 'BUTTON_POST'.
-* CREATE DATA mt_table TYPE STANDARD TABLE OF (mv_name).
-* "FIELD-SYMBOLS TYPE table.
-* ASSIGN mt_table->* TO .
-
SELECT FROM z2ui5_t_draft
FIELDS *
INTO CORRESPONDING FIELDS OF TABLE @mt_table
@@ -113,6 +228,9 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION.
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 = ''.
@@ -127,204 +245,469 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION.
METHOD z2ui5_on_init.
- app-view_main = 'VIEW_MAIN'.
-" mv_name = `Z2UI5_T_DRAFT`.
+ app-view_main = 'MAIN'.
+ init_table_output( ).
- 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 mt_filter.
-
- INSERT VALUE #(
- selkz = abap_true
- name = lr_col->*
- length = `10px`
- ) INTO TABLE mt_cols.
-
- ENDLOOP.
+ ms_layout-s_table-selmode = 'MultiSelect'.
+ ms_layout-s_table-check_zebra = abap_true.
+ ms_view-t_tab = CORRESPONDING #( mt_table ).
+ ms_layout-s_table-sticky_header = `HeaderToolbar,InfoToolbar,ColumnHeaders`.
+ ms_layout-s_table-title = `Drafts`.
ENDMETHOD.
METHOD z2ui5_on_render.
- DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ).
-
CASE app-view_popup.
-
WHEN `POPUP_FILTER`.
-
- lo_popup->dialog( 'abap2UI5 - Popup to select entry'
- )->table(
- mode = 'MultiSelect'
- items = client->_bind( mt_filter )
- )->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' ).
-
+ z2ui5_on_render_pop_filter( ).
WHEN `POPUP_SETUP`.
-
- lo_popup->dialog( title = 'View Setup' contentheight = `70%` contentwidth = `70%`
- )->tab_container(
- )->tab(
- text = 'Columns'
- selected = client->_bind( mv_check_columns )
- )->table(
- mode = 'MultiSelect'
- items = client->_bind( mt_cols )
- )->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( )->get_parent(
- )->tab(
- text = 'Sort'
- selected = client->_bind( mv_check_sort )
- )->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(
- )->tab(
- text = 'Group'
- selected = client->_bind( mv_check_group )
- )->get_parent( )->get_parent(
- )->footer( )->overflow_toolbar(
- )->toolbar_spacer(
- )->button(
- text = 'continue'
- press = client->_event( 'POPUP_FILTER_CONTINUE' )
- type = 'Emphasized' ).
-
+ z2ui5_on_render_pop_setup( ).
ENDCASE.
- DATA(lo_view) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
- title = 'abap2UI5 - Change the table type with RTTI'
- 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(
- )->simple_form(
- title = 'SE16'
- editable = abap_true
- columnsm = `1`
- columnsl = `1`
- columnsxl = `1`
- layout = `ResponsiveGridLayout`
- )->content( `form` ).
-* )->title( ns = `core` text = `Table`
-* )->label( 'Name' ).
+ CASE app-view_main.
+ WHEN 'MAIN'.
+ z2ui5_on_render_main( ).
+ WHEN 'DETAIL'.
+ z2ui5_on_render_detail( ).
+ ENDCASE.
- " lo_view->input( client->_bind( mv_name ) ).
+ ENDMETHOD.
-* lo_view->button(
-* text = 'search'
-* press = client->_event( 'BUTTON_TABLE' )
-* ).
+ METHOD init_table_output.
+ " CLEAR ms_layout-s_table.
+ CLEAR mt_cols.
+ CLEAR mt_sort.
+ 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.
-* lo_view = lo_view->get_parent( )->get_parent( )->simple_form( title = 'cols' editable = abap_true
-* )->content( 'form' ).
+ INSERT VALUE #(
+ visible = abap_true
+ name = lr_col->*
+ " length = `10px`
+ title = lr_col->*
+ ) INTO TABLE mt_cols.
- lo_view->title( ns = `core` text = 'Filter' ).
+ INSERT VALUE #(
+ " selkz = abap_true
+ name = lr_col->*
+ " length = `10px`
+ ) INTO TABLE mt_sort.
- lo_view->button(
- text = 'filter'
- press = client->_event( 'POPUP_FILTER' )
- ).
-
- LOOP AT mt_filter REFERENCE INTO DATA(lr_col)
- WHERE selkz = abap_true.
- lo_view->label( lr_col->name ).
- lo_view->input( lr_col->value ).
ENDLOOP.
-* lo_view->button(
-* text = 'search'
-* press = client->_event( 'BUTTON_POST' )
-* ).
-
-* IF mt_table IS not INITIAL.
+ ENDMETHOD.
- SELECT FROM z2ui5_t_draft
- FIELDS *
- INTO CORRESPONDING FIELDS OF TABLE @mt_table
- UP TO 5 ROWS.
+ METHOD z2ui5_on_render_main.
- FIELD-SYMBOLS TYPE STANDARD TABLE.
- ASSIGN mt_table TO .
-* DATA(tab) = lo_view->get_parent( )->get_parent( )->simple_form( title = 'Table' editable = abap_true
-* )->content( 'form' )->table(
-* items = client->_bind( val = ) " check_gen_data = abap_true )
-* ).
+ " DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ).
- data(tab) = lo_view->title( ns = `core` text = 'Content - Tablename' )->table(
- items = client->_bind( val = )
+ DATA(view) = z2ui5_cl_xml_view=>factory(
+ )->page(
+ 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_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' )->title( 'Standart' ).
+
+ 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 = `Layout` type = `Emphasized`
+ )->button( text = `Start` press = client->_event( `BUTTON_START` ) type = `Emphasized`
+ ).
+
+ data(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true
+ )->flex_box( alignItems = `Start` justifyContent = `SpaceBetween` ).
+
+
+ data(lt_filter) = ms_layout-t_filter.
+ DELETE lt_filter where selkz = abap_false.
+
+ loop at lt_filter REFERENCE INTO data(lr_filter)
+ where selkz = abap_true.
+ lo_box->input( description = lr_filter->name ).
+ endloop.
+
+
+ lo_box->button( text = `Change Filter (` && shift_right( conv string( lines( lt_filter ) ) ) && `)` press = client->_event( `POPUP_FILTER` ) ).
+
+
+
+ DATA(cont) = page->content( ns = 'f' ).
+
+ DATA(tab) = cont->table(
+ items = client->_bind( val = ms_view-t_tab )
+ alternaterowcolors = ms_layout-s_table-check_zebra
+ sticky = ms_layout-s_table-sticky_header
+ mode = ms_layout-s_table-selmode ).
+
+ tab->header_toolbar(
+ )->toolbar(
+ )->title( text = ms_layout-s_table-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2`
+ )->toolbar_spacer(
+ )->button(
+ icon = 'sap-icon://refresh'
+ press = client->_event( 'BUTTON_REFRESH' )
+ )->search_field(
+ value = client->_bind( ms_view-search_val )
+ search = client->_event( 'BUTTON_SEARCH' )
+ change = client->_event( 'BUTTON_SEARCH' )
+* liveChange = 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' )
).
- tab->header_toolbar(
- )->overflow_toolbar(
- " )->title( 'title of the table'
+
+ DATA(lo_columns) = tab->columns( ).
+ LOOP AT mt_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 = `10` 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 mt_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 && `}` ).
+ ENDIF.
+ ENDLOOP.
+
+ app-next-xml_main = page->get_root( )->xml_get( ).
+
+ ENDMETHOD.
+
+
+ METHOD z2ui5_on_render_detail.
+
+ 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-s_table-check_zebra )
+ )->label( 'sticky header'
+ )->input( client->_bind( ms_layout-s_table-sticky_header )
+ )->label( text = `Title`
+ )->Input( value = client->_bind( ms_layout-s_table-title )
+ )->label( 'sel mode'
+ )->combobox(
+ selectedkey = client->_bind( ms_layout-s_table-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( mt_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_hbox) = lo_tab->tab(
+ text = 'Sort'
+ selected = client->_bind( mv_check_sort )
+
+ )->list(
+ items = client->_bind( mt_sort )
+ selectionchange = client->_event( 'SELCHANGE' )
+ )->custom_list_item(
+ )->hbox( ).
+
+ lo_hbox->combobox(
+ selectedkey = `{NAME}`
+ items = client->_bind( mt_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(
+)->text( text = `{TYPE}`
+)->button( text = 'close' ).
+* )->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 )
+ )->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(
- icon = 'sap-icon://action-settings'
- press = client->_event( 'BUTTON_SETUP' )
- ).
+ text = 'continue'
+ press = client->_event( 'POPUP_FILTER_CONTINUE' )
+ type = 'Emphasized' ).
-
- DATA(lo_columns) = tab->columns( ).
- LOOP AT mt_cols REFERENCE INTO DATA(lr_field)
- where selkz = abap_true.
- lo_columns->column( width = lr_field->length )->button( text = lr_field->name ).
- ENDLOOP.
-
- DATA(lo_cells) = tab->items( )->column_list_item( )->cells( ).
- LOOP AT mt_cols REFERENCE INTO lr_field
- where selkz = abap_true.
- lo_cells->input( `{` && lr_field->name && `}` ).
- ENDLOOP.
-*
-* ENDIF.
-
- app-next-xml_main = lo_view->get_root( )->xml_get( ).
app-next-xml_popup = lo_popup->get_root( )->xml_get( ).
ENDMETHOD.
+
+
+ METHOD z2ui5_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).
+ 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).
+
+ 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.
+ lv_row = lv_row && `;`.
+ ENDDO.
+
+ lv_row = lv_row && cl_abap_char_utilities=>cr_lf.
+ ENDLOOP.
+
+ data(lv_bas64enc) = cl_web_http_utility=>encode_base64( lv_row ).
+
+ i_view->zz_plain( ``).
+
+ mv_check_download_csv = abap_false.
+
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/00/z2ui5_cl_app_demo_49.clas.xml b/src/00/z2ui5_cl_app_demo_49.clas.xml
index b73414c7..c3d03a96 100644
--- a/src/00/z2ui5_cl_app_demo_49.clas.xml
+++ b/src/00/z2ui5_cl_app_demo_49.clas.xml
@@ -5,7 +5,7 @@
Z2UI5_CL_APP_DEMO_49
E
- more - FE table
+ demo - list report
1
X
X
diff --git a/src/00/z2ui5_cl_xml_view.clas.abap b/src/00/z2ui5_cl_xml_view.clas.abap
index c54cdc4c..4035388b 100644
--- a/src/00/z2ui5_cl_xml_view.clas.abap
+++ b/src/00/z2ui5_cl_xml_view.clas.abap
@@ -58,6 +58,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
METHODS Dynamic_Page
IMPORTING
headerExpanded TYPE clike OPTIONAL
+ headerPinned TYPE clike OPTIONAL
toggleHeaderOnTitleClick TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -125,6 +126,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
mode TYPE clike OPTIONAL
width TYPE clike OPTIONAL
selectionchange TYPE clike OPTIONAL
+ alternateRowColors TYPE clike OPTIONAL
PREFERRED PARAMETER items
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -203,6 +205,8 @@ CLASS z2ui5_cl_xml_view DEFINITION
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
METHODS header
+ importing
+ ns type clike default `f`
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -343,6 +347,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
stretch TYPE clike OPTIONAL
contentheight TYPE clike OPTIONAL
contentwidth TYPE clike OPTIONAL
+ resizable TYPE clike OPTIONAL
PREFERRED PARAMETER title
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -470,6 +475,8 @@ CLASS z2ui5_cl_xml_view DEFINITION
IMPORTING
valign TYPE clike OPTIONAL
selected TYPE clike OPTIONAL
+ type TYPE clike OPTIONAL
+ press TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -477,6 +484,26 @@ CLASS z2ui5_cl_xml_view DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+ METHODS bar
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS content_left
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS content_middle
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS content_right
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS custom_header
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
METHODS header_content
IMPORTING
ns TYPE clike OPTIONAL
@@ -523,6 +550,17 @@ CLASS z2ui5_cl_xml_view DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+ METHODS search_field
+ IMPORTING
+ search TYPE clike OPTIONAL
+ width TYPE clike OPTIONAL
+ value TYPE clike OPTIONAL
+ id TYPE clike OPTIONAL
+ change TYPE clike OPTIONAL
+ liveChange TYPE clike OPTIONAL
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
METHODS message_view
IMPORTING
items TYPE clike OPTIONAL
@@ -586,12 +624,12 @@ CLASS z2ui5_cl_xml_view DEFINITION
METHODS simple_form
IMPORTING
- title TYPE clike OPTIONAL
- layout TYPE clike OPTIONAL
- editable TYPE clike OPTIONAL
- columnsXL TYPE clike OPTIONAL
- columnsL TYPE clike OPTIONAL
- columnsM TYPE clike OPTIONAL
+ title TYPE clike OPTIONAL
+ layout TYPE clike OPTIONAL
+ editable TYPE clike OPTIONAL
+ columnsXL TYPE clike OPTIONAL
+ columnsL TYPE clike OPTIONAL
+ columnsM TYPE clike OPTIONAL
PREFERRED PARAMETER title
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -613,6 +651,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
ns TYPE clike OPTIONAL
text TYPE clike OPTIONAL
wrapping TYPE clike OPTIONAL
+ level type clike optional
PREFERRED PARAMETER text
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -652,6 +691,8 @@ CLASS z2ui5_cl_xml_view DEFINITION
METHODS label
IMPORTING
text TYPE clike OPTIONAL
+ labelfor TYPE clike OPTIONAL
+ PREFERRED PARAMETER text
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
@@ -700,9 +741,19 @@ CLASS z2ui5_cl_xml_view DEFINITION
headertext TYPE clike OPTIONAL
items TYPE clike OPTIONAL
mode TYPE clike OPTIONAL
- selectionChange type clike optional
+ selectionChange TYPE clike OPTIONAL
RETURNING
- VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS custom_list_item
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
+ METHODS input_list_item
+ IMPORTING
+ label TYPE clike OPTIONAL
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
METHODS standard_list_item
IMPORTING
@@ -859,6 +910,10 @@ CLASS z2ui5_cl_xml_view DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+ METHODS toolbar
+ RETURNING
+ VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+
METHODS text
IMPORTING
text TYPE clike OPTIONAL
@@ -882,7 +937,7 @@ CLASS z2ui5_cl_xml_view DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
- METHODS zz_file_uploader
+ METHODS cc_file_uploader
IMPORTING
value TYPE clike OPTIONAL
path TYPE clike OPTIONAL
@@ -891,6 +946,10 @@ CLASS z2ui5_cl_xml_view DEFINITION
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
+ class-METHODS cc_file_uploader_get_js
+ RETURNING
+ VALUE(result) TYPE string.
+
METHODS xml_get
RETURNING
VALUE(result) TYPE string.
@@ -951,7 +1010,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
result = _generic(
name = `header`
- ns = `f`
+ ns = ns
).
ENDMETHOD.
@@ -1110,6 +1169,8 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
name = `ColumnListItem`
t_prop = VALUE #( ( n = `vAlign` v = valign )
( n = `selected` v = selected )
+ ( n = `type` v = type )
+ ( n = `press` v = press )
) ).
ENDMETHOD.
@@ -1182,6 +1243,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
( n = `showHeader` v = showheader )
( n = `contentWidth` v = contentwidth )
( n = `contentHeight` v = contentheight )
+ ( n = `resizable` v = lcl_utility=>get_json_boolean( resizable ) )
) ).
ENDMETHOD.
@@ -1338,6 +1400,45 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
+ METHOD bar.
+
+ result = _generic(
+ name = `Bar`
+ ).
+
+ ENDMETHOD.
+
+ METHOD content_left.
+
+ result = _generic(
+ name = `contentLeft`
+ ).
+
+ ENDMETHOD.
+
+ METHOD content_middle.
+
+ result = _generic(
+ name = `contentMiddle`
+ ).
+
+ ENDMETHOD.
+
+ METHOD content_right.
+
+ result = _generic(
+ name = `contentRight`
+ ).
+
+ ENDMETHOD.
+
+ METHOD custom_Header.
+
+ result = _generic(
+ name = `customHeader`
+ ).
+
+ ENDMETHOD.
METHOD header_content.
@@ -1358,6 +1459,11 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
+ METHOD toolbar.
+
+ result = _generic( `Toolbar` ).
+
+ ENDMETHOD.
METHOD header_toolbar.
@@ -1554,6 +1660,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
name = `Label`
t_prop = VALUE #(
( n = `text` v = text )
+ ( n = `labelFor` v = labelfor )
) ).
ENDMETHOD.
@@ -1951,6 +2058,25 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
+ METHOD custom_list_item.
+
+ result = _generic(
+ name = `CustomListItem`
+ ).
+
+ ENDMETHOD.
+
+
+ METHOD input_list_item.
+
+ result = _generic(
+ name = `InputListItem`
+ t_prop = VALUE #(
+ ( n = `label` v = label )
+ ) ).
+
+ ENDMETHOD.
+
METHOD standard_list_item.
result = me.
@@ -2052,6 +2178,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
( n = `mode` v = mode )
( n = `width` v = width )
( n = `selectionChange` v = selectionchange )
+ ( n = `alternateRowColors` v = lcl_utility=>get_json_boolean( alternateRowColors ) )
) ).
ENDMETHOD.
@@ -2123,6 +2250,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
t_prop = VALUE #(
( n = `text` v = text )
( n = `wrapping` v = lcl_utility=>get_json_boolean( wrapping ) )
+ ( n = `level` v = level )
) ).
ENDMETHOD.
@@ -2234,7 +2362,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
- METHOD zz_file_uploader.
+ METHOD cc_file_uploader.
result = me.
_generic(
@@ -2271,6 +2399,7 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ns = `f`
t_prop = VALUE #(
( n = `headerExpanded` v = lcl_utility=>get_json_boolean( headerexpanded ) )
+ ( n = `headerPinned` v = lcl_utility=>get_json_boolean( headerPinned ) )
( n = `toggleHeaderOnTitleClick` v = toggleHeaderOnTitleClick )
) ).
@@ -2396,6 +2525,22 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
+ METHOD search_field.
+
+ result = me.
+ _generic(
+ name = `SearchField`
+ t_prop = VALUE #(
+ ( n = `width` v = width )
+ ( n = `search` v = search )
+ ( n = `value` v = value )
+ ( n = `id` v = id )
+ ( n = `change` v = change )
+ ( n = `liveChange` v = liveChange )
+ ) ).
+
+ ENDMETHOD.
+
METHOD message_view.
result = _generic(
@@ -2414,4 +2559,115 @@ CLASS z2ui5_cl_xml_view IMPLEMENTATION.
ENDMETHOD.
+ METHOD cc_file_uploader_get_js.
+
+ result = ` jQuery.sap.declare("z2ui5.FileUploader");` && |\n| &&
+ |\n| &&
+ ` sap.ui.define([` && |\n| &&
+ ` "sap/ui/core/Control",` && |\n| &&
+ ` "sap/m/Button",` && |\n| &&
+ ` "sap/ui/unified/FileUploader"` && |\n| &&
+ ` ], function (Control, Button, FileUploader) {` && |\n| &&
+ ` "use strict";` && |\n| &&
+ |\n| &&
+ ` return Control.extend("z2ui5.FileUploader", {` && |\n| &&
+ |\n| &&
+ ` metadata: {` && |\n| &&
+ ` properties: {` && |\n| &&
+ ` value: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` path: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` tooltip: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` fileType: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` placeholder: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: ""` && |\n| &&
+ ` },` && |\n| &&
+ ` buttonText: {` && |\n| &&
+ ` type: "string",` && |\n| &&
+ ` defaultValue: "Upload"` && |\n| &&
+ ` },` && |\n| &&
+ ` enabled: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: true` && |\n| &&
+ ` },` && |\n| &&
+ ` multiple: {` && |\n| &&
+ ` type: "boolean",` && |\n| &&
+ ` defaultValue: false` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ |\n| &&
+ |\n| &&
+ ` aggregations: {` && |\n| &&
+ ` },` && |\n| &&
+ ` events: {` && |\n| &&
+ ` "upload": {` && |\n| &&
+ ` allowPreventDefault: true,` && |\n| &&
+ ` parameters: {}` && |\n| &&
+ ` }` && |\n| &&
+ ` },` && |\n| &&
+ ` renderer: null` && |\n| &&
+ ` },` && |\n| &&
+ |\n| &&
+ ` renderer: function (oRm, oControl) {` && |\n| &&
+ |\n| &&
+ ` oControl.oUploadButton = new Button({` && |\n| &&
+ ` text: oControl.getProperty("buttonText"),` && |\n| &&
+ ` enabled: oControl.getProperty("path") !== "",` && |\n| &&
+ ` press: function (oEvent) {` && |\n| &&
+ |\n| &&
+ ` this.setProperty("path", this.oFileUploader.getProperty("value"));` && |\n| &&
+ |\n| &&
+ ` var file = this.oFileUploader.oFileUpload.files[0];` && |\n| &&
+ ` var reader = new FileReader();` && |\n| &&
+ |\n| &&
+ ` reader.onload = function (evt) {` && |\n| &&
+ ` var vContent = evt.currentTarget.result;` && |\n| &&
+ ` this.setProperty("value", vContent);` && |\n| &&
+ ` this.fireUpload();` && |\n| &&
+ ` //this.getView().byId('picture' ).getDomRef().src = vContent;` && |\n| &&
+ ` }.bind(this)` && |\n| &&
+ |\n| &&
+ ` reader.readAsDataURL(file);` && |\n| &&
+ ` }.bind(oControl)` && |\n| &&
+ ` });` && |\n| &&
+ |\n| &&
+ ` oControl.oFileUploader = new FileUploader({` && |\n| &&
+ ` icon: "sap-icon://browse-folder",` && |\n| &&
+ ` iconOnly: true,` && |\n| &&
+ ` value: oControl.getProperty("path"),` && |\n| &&
+ ` placeholder: oControl.getProperty("placeholder"),` && |\n| &&
+ ` change: function (oEvent) {` && |\n| &&
+ ` var value = oEvent.getSource().getProperty("value");` && |\n| &&
+ ` this.setProperty("path", value);` && |\n| &&
+ ` if (value) {` && |\n| &&
+ ` this.oUploadButton.setEnabled();` && |\n| &&
+ ` } else {` && |\n| &&
+ ` this.oUploadButton.setEnabled(false);` && |\n| &&
+ ` }` && |\n| &&
+ ` this.oUploadButton.rerender();` && |\n| &&
+ ` }.bind(oControl)` && |\n| &&
+ ` });` && |\n| &&
+ |\n| &&
+ ` var hbox = new sap.m.HBox();` && |\n| &&
+ ` hbox.addItem(oControl.oFileUploader);` && |\n| &&
+ ` hbox.addItem(oControl.oUploadButton);` && |\n| &&
+ ` oRm.renderControl(hbox);` && |\n| &&
+ ` }` && |\n| &&
+ ` });` && |\n| &&
+ ` });`.
+
+ ENDMETHOD.
+
ENDCLASS.
diff --git a/src/z2ui5_cl_http_handler.clas.locals_imp.abap b/src/z2ui5_cl_http_handler.clas.locals_imp.abap
index 631f1bce..c2a94152 100644
--- a/src/z2ui5_cl_http_handler.clas.locals_imp.abap
+++ b/src/z2ui5_cl_http_handler.clas.locals_imp.abap
@@ -1363,14 +1363,14 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
json = `"` && && `"`
CHANGING
data = ).
- WHEN 'C'.
- CASE lr_attri->type.
- WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
- = xsdbool( = `true` ).
- WHEN OTHERS.
- = .
- ENDCASE.
- WHEN OTHERS.
+ " WHEN 'C'.
+ " CASE lr_attri->type.
+ " WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
+ " = xsdbool( = `true` ).
+ " WHEN OTHERS.
+ " = .
+ "° ENDCASE.
+ WHEN OTHERS.
= .
ENDCASE.
ENDCASE.
@@ -1522,7 +1522,7 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
ENDLOOP.
IF type = cs_bind_type-two_way.
- z2ui5_lcl_utility=>raise( `Binding Error - two way binding used but no attribute found (` && lr_attri->name && `)` ).
+ z2ui5_lcl_utility=>raise( `Binding Error - two way binding used but no attribute found` ).
ENDIF.
"one time when not global class attribute