Popup json download (#828)

* popup json download

* lint fixes

* update

* update startup app

* lint fixes
This commit is contained in:
oblomov 2024-01-31 08:27:09 +01:00 committed by GitHub
parent 63ff4eed6d
commit 4443999ff1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 5473 additions and 4246 deletions

File diff suppressed because it is too large Load Diff

View File

@ -192,7 +192,7 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
DATA(lv_id) = z2ui5_cl_util_func=>uuid_get_c22( ).
INSERT VALUE #( name = lv_id
data_stringify = z2ui5_cl_util_func=>trans_json_by_any( any = mr_data compress = me->mv_compress )
data_stringify = z2ui5_cl_util_func=>trans_json_by_any( any = mr_data compress_mode = me->mv_compress )
bind_type = cs_bind_type-one_time )
INTO TABLE mt_attri.
result = |/{ lv_id }|.

View File

@ -314,7 +314,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF struc IS NOT INITIAL.
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc path = abap_true pretty_name = pretty_name ).
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc path = abap_true pretty_mode = pretty_mode ).
result = bind_struc_comp(
iv_name = lv_name_struc
i_struc = struc
@ -330,8 +330,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
check_attri = mo_handler->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
data = val
pretty_name = pretty_name
compress = compress
pretty_name = pretty_mode
compress = compress_mode
).
result = lo_binder->main( ).
@ -370,7 +370,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF tab IS NOT INITIAL.
DATA(lv_name) = z2ui5_if_client~_bind_edit( val = tab path = abap_true pretty_name = pretty_name ).
DATA(lv_name) = z2ui5_if_client~_bind_edit( val = tab path = abap_true pretty_mode = pretty_mode ).
result = bind_tab_cell(
iv_name = lv_name
i_tab_index = tab_index
@ -383,7 +383,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF struc IS NOT INITIAL.
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc path = abap_true pretty_name = pretty_name ).
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc path = abap_true pretty_mode = pretty_mode ).
result = bind_struc_comp(
iv_name = lv_name_struc
i_struc = struc
@ -400,8 +400,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
data = val
view = view
pretty_name = pretty_name
compress = compress
pretty_name = pretty_mode
compress = compress_mode
).
result = lo_binder->main( ).
@ -423,8 +423,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
check_attri = mo_handler->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-one_time
data = val
pretty_name = pretty_name
compress = compress
pretty_name = pretty_mode
compress = compress_mode
).
result = lo_binder->main( ).

View File

@ -189,7 +189,9 @@ CLASS z2ui5_cl_fw_db IMPLEMENTATION.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
* IF <deref_attri> IS NOT INITIAL.
lr_attri->data_rtti = z2ui5_cl_util_func=>trans_srtti_xml_by_data( <deref_attri> ).
* ENDIF.
CLEAR <deref_attri>.
CLEAR <attri>.
ENDLOOP.

View File

@ -143,7 +143,7 @@ CLASS z2ui5_cl_fw_model IMPLEMENTATION.
WHEN `h`.
lo_actual->add_attribute( n = lr_attri->name_front
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_name = lr_attri->pretty_name compress = lr_attri->compress )
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_mode = lr_attri->pretty_name compress_mode = lr_attri->compress )
apos_active = abap_false ).
WHEN OTHERS.
@ -157,7 +157,7 @@ CLASS z2ui5_cl_fw_model IMPLEMENTATION.
ELSE.
lo_actual->add_attribute( n = lr_attri->name_front
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_name = lr_attri->pretty_name compress = lr_attri->compress )
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_mode = lr_attri->pretty_name compress_mode = lr_attri->compress )
apos_active = abap_false ).
ENDIF.

View File

@ -45,55 +45,77 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
ENDMETHOD.
METHOD on_event_check.
TRY.
DATA li_app_test TYPE REF TO z2ui5_if_app.
ms_home-classname = z2ui5_cl_util_func=>c_trim_upper( ms_home-classname ).
CREATE OBJECT li_app_test TYPE (ms_home-classname).
client->message_toast_display( `App is ready to start!` ).
ms_home-btn_text = `edit`.
ms_home-btn_event_id = `BUTTON_CHANGE`.
ms_home-btn_icon = `sap-icon://edit`.
ms_home-class_value_state = `Success`.
ms_home-class_editable = abap_false.
CATCH cx_root INTO DATA(lx) ##CATCH_ALL.
ms_home-class_value_state_text = lx->get_text( ).
ms_home-class_value_state = `Warning`.
client->message_box_display( text = ms_home-class_value_state_text
type = `error` ).
ENDTRY.
ENDMETHOD.
METHOD view_display_start.
DATA(lv_url) = z2ui5_cl_util_func=>app_get_url(
client = client
classname = ms_home-classname ).
DATA(page) = z2ui5_cl_ui5=>_factory( )->_ns_m( )->shell(
)->page( shownavbutton = abap_false ).
DATA(page2) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
shownavbutton = abap_false ).
page->headercontent(
)->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP`
)->toolbarspacer(
)->text( `v.` && z2ui5_cl_fw_http_handler=>c_abap_version
)->link( text = `SCN`
target = `_blank`
href = `https://blogs.sap.com/tag/abap2ui5/`
)->link( text = `Twitter`
target = `_blank`
href = `https://twitter.com/abap2UI5`
)->link( text = `GitHub`
target = `_blank`
href = `https://github.com/abap2ui5/abap2ui5` ).
page2->header_content( )->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP` )->toolbar_spacer( ).
DATA(grid) = page->_ns_ui( )->grid( `XL7 L7 M12 S12`
)->content( `sap.ui.layout` ).
DATA(content) = grid->simpleform( title = `Quickstart`
DATA(simple_form2) = page2->simple_form(
editable = abap_true
layout = `ResponsiveGridLayout`
editable = `true`
)->content( )->_ns_m( ).
labelspanxl = `4`
labelspanl = `3`
labelspanm = `4`
labelspans = `12`
adjustlabelspan = abap_false
emptyspanxl = `0`
emptyspanl = `4`
emptyspanm = `0`
emptyspans = `0`
columnsxl = `2`
columnsl = `2`
columnsm = `1`
singlecontainerfullsize = abap_false
)->content( `form` ).
DATA(lv_url_search) = z2ui5_cl_util_func=>app_get_url(
client = client
classname = 'z2ui5_cl_app_search_apps' ).
content->label( `Step 1`
)->text( `Create a new class in your abap system`
simple_form2->toolbar( )->title( `Quickstart` ).
simple_form2->label( `Step 1`
)->text( `Create a new class in your ABAP system`
)->label( `Step 2`
)->text( `Add the interface: Z2UI5_IF_APP`
)->label( `Step 3`
)->text( `Define view, implement behaviour`
)->text( `Define the view, implement behaviour`
)->label(
)->link( text = `(Example)`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5/blob/main/src/03/02/z2ui5_cl_app_hello_world.clas.abap`
href = `https://github.com/abap2UI5/abap2UI5/blob/main/src/02/02/z2ui5_cl_app_hello_world.clas.abap`
)->label( `Step 4` ).
IF ms_home-class_editable = abap_true.
content->input( placeholder = `fill in the class name and press 'check'`
simple_form2->input( placeholder = `fill in the class name and press 'check'`
editable = z2ui5_cl_util_func=>boolean_abap_2_json( ms_home-class_editable )
value = client->_bind_edit( ms_home-classname )
submit = client->_event( ms_home-btn_event_id )
@ -102,62 +124,69 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
).
ELSE.
content->text( ms_home-classname ).
simple_form2->text( ms_home-classname ).
ENDIF.
content->button( press = client->_event( ms_home-btn_event_id )
simple_form2->label( ).
simple_form2->button( press = client->_event( ms_home-btn_event_id )
text = ms_home-btn_text
icon = ms_home-btn_icon
)->label( `Step 5`
).
simple_form2->label( `Step 5`
)->link( text = `Link to the Application`
target = `_blank`
href = lv_url
enabled = z2ui5_cl_util_func=>boolean_abap_2_json( xsdbool( ms_home-class_editable = abap_false ) ) ).
DATA(form) = grid->simpleform( title = `Apps`
editable = abap_true
layout = `ResponsiveGridLayout` ).
simple_form2->toolbar( )->title( `System Information` ).
simple_form2->label( `abap2UI5 Version` ).
simple_form2->text( z2ui5_cl_fw_http_handler=>c_abap_version ).
IF mv_check_demo = abap_false.
form->_ns_m( )->messagestrip( text = `Oops! You need to install abap2UI5 demos before continuing...`
type = `Warning`
)->_go_new( )->_add( n = `link` ns = `sap.m` )->_ns_m( )->link( text = `(HERE)`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5-samples` ).
ENDIF.
* DATA(lv_url_search2) = z2ui5_cl_util_func=>app_get_url(
* client = client
* classname = 'z2ui5_cl_app_search_apps' ).
data(lv_url_samples) = z2ui5_cl_util_func=>app_get_url(
DATA(lv_url_samples2) = z2ui5_cl_util_func=>app_get_url(
client = client
classname = 'z2ui5_cl_demo_app_000' ).
DATA(cont) = form->content( )->_ns_m( ).
cont->label( `Samples`).
* cont->button(
* text = `Continue...`
* press = client->_event( val = `DEMOS` check_view_destroy = abap_true )
* enabled = xsdbool( mv_check_demo = abap_true ) )->_go_new( ).
cont->link(
text = `Continue...`
target = `_blank`
* press = client->_event( val = `DEMOS` check_view_destroy = abap_true )
href = lv_url_samples
enabled = xsdbool( mv_check_demo = abap_true )
)->_go_new( ).
cont->button( visible = abap_false ).
simple_form2->toolbar( )->title( `What's next?` ).
* simple_form2->label( `Install & Run Apps` ).
* simple_form2->button( text = `Apps on your system` press = client->_event_client( val = client->cs_event-open_new_tab
* t_arg = VALUE #( ( `$` && client->_bind_local( lv_url_search2 ) ) ) )
* ).
cont->label( `Local`
)->link( text = `Search apps on your system...`
target = `_blank`
href = lv_url_search
simple_form2->label( `Development` ).
simple_form2->button(
text = `Check out the samples` press = client->_event_client( val = client->cs_event-open_new_tab
t_arg = VALUE #( ( `$` && client->_bind_local( lv_url_samples2 ) ) ) )
).
cont->label( `Online` )->link( text = `More on GitHub...`
simple_form2->toolbar( )->title( `` ).
simple_form2->label( `` ).
simple_form2->label( `` ).
simple_form2->toolbar( )->title( `Contribution` ).
simple_form2->label( `Open an issue` ).
simple_form2->link( text = `You have comments, wishes or bugs?`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md` ).
href = `https://github.com/abap2UI5/abap2UI5/issues` ).
simple_form2->label( `Open a Pull Request` ).
simple_form2->link( text = `You added a new feature?`
target = `_blank`
href = `https://github.com/abap2UI5/abap2UI5/pulls` ).
client->view_display( form->_stringify( ) ).
simple_form2->toolbar( )->title( `Links & More` ).
simple_form2->label( ).
simple_form2->link( text = `Repository on GitHub` target = `_blank` href = `https://github.com/abap2UI5/abap2UI5` ).
simple_form2->label( ).
simple_form2->link( text = `News on Twitter` target = `_blank` href = `https://twitter.com/abap2UI5` ).
simple_form2->label( ).
simple_form2->link( text = `Blog Series on SAP Community` target = `_blank` href = `https://community.sap.com/t5/technology-blogs-by-members/abap2ui5-1-introduction-developing-ui5-apps-purely-in-abap/ba-p/13567635` ).
client->view_display( page2->stringify( ) ).
ENDMETHOD.
@ -238,28 +267,4 @@ data(lv_url_samples) = z2ui5_cl_util_func=>app_get_url(
mv_check_demo = abap_true.
ENDMETHOD.
METHOD on_event_check.
TRY.
DATA li_app_test TYPE REF TO z2ui5_if_app.
ms_home-classname = z2ui5_cl_util_func=>c_trim_upper( ms_home-classname ).
CREATE OBJECT li_app_test TYPE (ms_home-classname).
client->message_toast_display( `App is ready to start!` ).
ms_home-btn_text = `edit`.
ms_home-btn_event_id = `BUTTON_CHANGE`.
ms_home-btn_icon = `sap-icon://edit`.
ms_home-class_value_state = `Success`.
ms_home-class_editable = abap_false.
CATCH cx_root INTO DATA(lx) ##CATCH_ALL.
ms_home-class_value_state_text = lx->get_text( ).
ms_home-class_value_state = `Warning`.
client->message_box_display( text = ms_home-class_value_state_text
type = `error` ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

File diff suppressed because it is too large Load Diff

View File

@ -10,17 +10,35 @@ CLASS z2ui5_cl_app_search_apps DEFINITION
BEGIN OF ty_app,
name TYPE string,
visible TYPE abap_bool,
* check_fav TYPE abap_bool,
END OF ty_app.
DATA mt_apps TYPE STANDARD TABLE OF ty_app WITH EMPTY KEY.
DATA mt_favs TYPE STANDARD TABLE OF ty_app WITH EMPTY KEY.
DATA check_initialized TYPE abap_bool.
DATA mv_search_value TYPE string.
DATA mv_selected_key TYPE string.
data:
begin of ms_favrites,
check_cloud_ready type abap_bool,
check_premise_ready type abap_bool,
search_field type string,
end of ms_favrites.
PROTECTED SECTION.
METHODS search.
METHODS view_display
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS view_nest_display
IMPORTING
client TYPE REF TO z2ui5_if_client.
METHODS view_action_sheet
IMPORTING
val TYPE clike.
DATA client TYPE REF TO z2ui5_if_client.
PRIVATE SECTION.
ENDCLASS.
@ -31,9 +49,19 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
z2ui5_cl_util_func=>db_load_by_handle(
EXPORTING
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
IMPORTING
result = mt_favs
).
mt_apps = VALUE #( FOR row IN z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
( name = row ) ).
search( ).
@ -48,14 +76,25 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
CASE client->get( )-event.
WHEN `ON_PRESS`.
DATA(lt_arg) = client->get( )-t_event_arg.
DATA(lv_app) = lt_arg[ 1 ].
DATA li_app TYPE REF TO z2ui5_if_app.
CREATE OBJECT li_app TYPE (lv_app).
client->nav_app_call( li_app ).
* LOOP AT mt_apps REFERENCE INTO DATA(lr_apps) WHERE name = lv_app.
* lr_apps->check_fav = abap_true.
* ENDLOOP.
* client->message_toast_display( lv_app ).
INSERT VALUE #( name = lv_app ) INTO TABLE mt_favs.
* view_display( client ).
z2ui5_cl_util_func=>db_save(
uname = sy-uname
handle = 'z2ui5_cl_app_search_apps'
data = mt_favs ).
view_action_sheet( lv_app ).
view_nest_display( client ).
WHEN 'BACK'.
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
@ -74,7 +113,7 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
LOOP AT mt_apps REFERENCE INTO lr_app.
lr_app->visible = abap_false.
IF lr_app->name CS 'DEMO'.
IF lr_app->name CS 'DEMO' OR lr_app->name CS `Z2UI5_CL_POPUP`.
CONTINUE.
ENDIF.
IF lr_app->name CS mv_search_value.
@ -88,13 +127,68 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
METHOD view_display.
DATA(page) = z2ui5_cl_xml_view=>factory(
)->shell(
)->page(
title = 'abap2UI5 - Search Apps'
navbuttonpress = client->_event( 'BACK' )
shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack is not initial )
* )->page(
* title = 'abap2UI5 - Search Apps'
* navbuttonpress = client->_event( 'BACK' )
* shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack is not initial )
* )->header_content(
* )->search_field(
* value = client->_bind_edit( mv_search_value )
* search = client->_event( 'ON_SEARCH' )
* change = client->_event( 'ON_SEARCH' )
* width = `17.5rem`
* id = `SEARCH`
* )->get_parent( ).
)->tool_page(
)->header( `tnt`
)->tool_header(
)->title( `abap2UI5 - App Overview`
)->text( width = `10%`
)->link( text = `Visit the abap2UI5 Project`
* )->button( text = `Bak` press = client->_event( 'BACK' )
)->get_parent(
)->get_parent( )->sub_header( ns = `tnt`
)->tool_header( ).
DATA(pages) = page->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key )
* select = client->_event( `OnSelectIconTabBar` )
* select = client->_event_client( action = 'NAV_TO' t_arg = value #( ( `NavCon` ) ( `${$parameters}` ) ) )
select = client->_event_client( val = client->cs_event-nav_container_to t_arg = VALUE #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) )
mode = `Inline`
)->items(
)->icon_tab_filter( key = `page_favs` text = `Favorites` )->get_parent(
)->icon_tab_filter( key = `page_all` text = `Search...` )->get_parent(
)->icon_tab_filter( key = `page_online` text = `More on GitHub...`
* )->items(
* )->icon_tab_filter( key = `page11` text = `User 1` )->get_parent(
* )->icon_tab_filter( key = `page32` text = `User 2` )->get_parent(
* )->icon_tab_filter( key = `page33` text = `User 3`
)->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent(
)->main_contents(
* )->button( text = `page1` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page1` ) ) )
* )->button( text = `page2` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page2` ) ) )
* )->button( text = `page3` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page3` ) ) )
)->nav_container( id = `NavCon` initialpage = `page_favs` defaulttransitionname = `flip`
)->pages( ).
pages->page(
title = `12 Apps`
id = `page_favs`
)->header_content(
)->button( text = `Edit`
)->search_field(
value = client->_bind_edit( mv_search_value )
search = client->_event( 'ON_SEARCH' )
change = client->_event( 'ON_SEARCH' )
width = `17.5rem`
*id = `SEARCH`
)->get_parent( ).
DATA(page_all) = pages->page(
title = `12 Apps on the System`
id = `page_all`
)->header_content(
)->search_field(
value = client->_bind_edit( mv_search_value )
@ -104,17 +198,157 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
id = `SEARCH`
)->get_parent( ).
LOOP AT mt_apps REFERENCE INTO DATA(lr_app).
DATA(lv_tabix) = sy-tabix.
page->generic_tile(
page_all->generic_tile(
id = lr_app->name
class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout'
press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ) )
press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ( `${$source>/id}` ) ) )
header = client->_bind( val = lr_app->name tab = mt_apps tab_index = lv_tabix )
visible = client->_bind( val = lr_app->visible tab = mt_apps tab_index = lv_tabix ) ).
ENDLOOP.
view_nest_display( client ).
DATA(page_online) = pages->page(
* title = `Your app is not listed here? Fell free to send a PR and extend this page`
id = `page_online`
)->header_content(
)->toolbar_spacer(
)->checkbox( text = `Cloud` selected = client->_bind_edit( ms_favrites-check_cloud_ready )
)->checkbox( text = `On-Premise` selected = client->_bind_edit( ms_favrites-check_premise_ready )
)->button( text = `sort`
)->search_field(
value = client->_bind_edit( mv_search_value )
search = client->_event( 'ON_SEARCH' )
change = client->_event( 'ON_SEARCH' )
width = `17.5rem`
)->get_parent(
* )->sub_header(
* )->overflow_toolbar(
* )->text( `Your open-source app is not listed here? Feel free to send a PR and extend this page`
* )->link( target = `_blank` text = `HERE` href = `{AUTHOR_LINK}`
* )->get_parent( )->get_parent(
)->content( ).
page_online->message_strip( type = `Warning` text = `Your open-source app is not listed here? Feel free to send a PR and extend this page` ).
DATA(lt_repos) = NEW lcl_github( )->get_repositories( ).
DATA(item) = page_online->list(
" headertext = `Product`
nodata = `no conditions defined`
items = client->_bind_local( lt_repos )
selectionchange = client->_event( 'SELCHANGE' )
)->custom_list_item( ).
* DATA(grid) = item->grid( ).
item = item->vbox( ).
* grid->combobox(
* selectedkey = `{OPTION}`
* items = client->_bind_local( value string_table( ( `OFFLINE` ) ( `ONLINE` ) ) )
* )->item(
* key = '{}'
* text = '{}'
* )->get_parent(
item->text( ).
data(row) = item->grid( ).
row->title( text = `{NAME}` ).
row->text( text = `{DESCR}` ).
row->text( ).
row->checkbox( text = `Cloud Ready` selected = client->_bind_edit( ms_favrites-check_cloud_ready ) ).
row = item->grid( ).
* row = item->hbox( ).
* item->text( text = `{DESCR}`
row->link( target = `_blank` text = `{AUTHOR_NAME}` href = `{AUTHOR_LINK}` ).
row->link( target = `_blank` text = `{LINK}` href = `{LINK}` ).
* row->text( ).
row->checkbox( text = `Installed` selected = client->_bind_edit( ms_favrites-check_cloud_ready ) ).
row->checkbox( text = `On-Premise since: 7.50` selected = client->_bind_edit( ms_favrites-check_cloud_ready ) ).
* page_online->footer( )->toolbar(
* )->text( `Your app is not listed here? Fell free to send a PR and extend this page`
* ).
* DATA(tab) = page_online->table(
* items = client->_bind_local( lt_repos ) ).
*
* DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( lt_repos ).
*
* DATA(list) = tab->column_list_item( valign = `Top` ).
* DATA(cells) = list->cells( ).
*
* DATA(columns) = tab->columns( ).
* LOOP AT lt_comp INTO DATA(ls_comp2).
* DATA(col) = columns->column( width = '8rem' )->header( ns = `` ).
* col->text( text = ls_comp2-name ).
* ENDLOOP.
*
* LOOP AT lt_comp INTO DATA(ls_comp).
** IF ls_comp-name = 'NAME'.
* cells->text( `{` && ls_comp-name && `}` ).
** ELSE.
** cells->checkbox( `{` && ls_comp-name && `}` ).
** ENDIF.
* ENDLOOP.
* page_online
client->view_display( page->stringify( ) ).
ENDMETHOD.
METHOD view_action_sheet.
DATA(action_sheet_view) = z2ui5_cl_xml_view=>factory_popup( ).
action_sheet_view->_generic_property( VALUE #( n = `core:require` v = `{ MessageToast: 'sap/m/MessageToast' }` ) ).
action_sheet_view->action_sheet( placement = `Botton` showcancelbutton = abap_true title = `Choose Your Action`
)->button( text = `Accept` icon = `sap-icon://accept` press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Reject` icon = `sap-icon://decline` press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Email` icon = `sap-icon://email` press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Forward` icon = `sap-icon://forward` press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Delete` icon = `sap-icon://delete` press = `MessageToast.show('selected action is ' + ${$source>/text})`
)->button( text = `Other` press = `MessageToast.show('selected action is ' + ${$source>/text})`
).
client->popover_display( xml = action_sheet_view->stringify( ) by_id = val ).
ENDMETHOD.
METHOD view_nest_display.
DATA lr_app TYPE REF TO ty_app.
DATA lv_tabix TYPE syst-tabix.
DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ).
LOOP AT mt_favs REFERENCE INTO lr_app.
" WHERE check_fav = abap_true.
lv_tabix = sy-tabix.
lo_view_nested->generic_tile(
* page_favs->generic_tile(
class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout'
press = client->_event( val = `ON_PRESS` t_arg = VALUE #( ( `${$source>/header}` ) ) )
header = client->_bind( val = lr_app->name tab = mt_favs tab_index = lv_tabix )
* visible = client->_bind( val = lr_app->check_fav tab = mt_apps tab_index = lv_tabix )
).
ENDLOOP.
client->nest_view_display( val = lo_view_nested->stringify( ) id = `page_favs` method_insert = 'addContent' ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,116 @@
CLASS lcl_github DEFINITION.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_s_app,
name TYPE string,
descr TYPE string,
classname TYPE string,
check_hide TYPE abap_bool,
END OF ty_s_app.
TYPES ty_t_app TYPE STANDARD TABLE OF ty_s_app WITH EMPTY KEY.
TYPES:
BEGIN OF ty_s_repo,
name TYPE string,
descr TYPE string,
author_link TYPE string,
author_name TYPE string,
check_cloud_ready TYPE abap_bool,
min_release TYPE string,
link TYPE string,
t_app TYPE ty_t_app,
check_installed TYPE abap_bool,
number_of_app TYPE i,
END OF ty_s_repo.
TYPES ty_t_repo TYPE STANDARD TABLE OF ty_s_repo WITH EMPTY KEY.
METHODS get_repositories
RETURNING
VALUE(result) TYPE ty_t_repo.
ENDCLASS.
CLASS lcl_github IMPLEMENTATION.
METHOD get_repositories.
result = VALUE #(
(
name = `Table Loader`
descr = `Upload, Edit & Download Table Content (CSV, JSON)`
author_link = `https://github.com/oblomov-dev`
check_cloud_ready = abap_true
min_release = `750`
link = `https://github.com/oblomov-dev/a2UI5-db_table_loader`
t_app = VALUE #(
(
name = `Upload JSON`
descr = `Modify DB Table with JSON Data`
classname = `z2ui5_dbl_cl_app_01`
)
(
name = `Download (CSV, JSON)`
descr = `Download DB Table as JSON and CSV`
classname = `z2ui5_dbl_cl_app_01`
)
) )
(
name = `Axage`
descr = `Play the Game Axage`
author_link = `https://github.com/oblomov-dev`
check_cloud_ready = abap_true
min_release = `750`
link = `https://github.com/oblomov-dev/a2UI5-db_table_loader`
t_app = VALUE #(
(
name = `Upload JSON`
descr = `Modify DB Table with JSON Data`
classname = `z2ui5_dbl_cl_app_01`
)
(
name = `Download (CSV, JSON)`
descr = `Download DB Table as JSON and CSV`
classname = `z2ui5_dbl_cl_app_01`
)
) )
(
name = `Advent of Code`
descr = `Solve the Advent of Code `
author_link = `https://github.com/oblomov-dev`
check_cloud_ready = abap_true
min_release = `750`
link = `https://github.com/oblomov-dev/a2UI5-db_table_loader`
t_app = VALUE #(
(
name = `Upload JSON`
descr = `Modify DB Table with JSON Data`
classname = `z2ui5_dbl_cl_app_01`
)
(
name = `Download (CSV, JSON)`
descr = `Download DB Table as JSON and CSV`
classname = `z2ui5_dbl_cl_app_01`
)
) )
).
LOOP AT result REFERENCE INTO DATA(lr_repo).
LOOP AT lr_repo->t_app REFERENCE INTO DATA(lr_app).
IF z2ui5_cl_util_func=>rtti_check_class_exists( lr_app->classname ).
lr_repo->check_installed = abap_true.
ENDIF.
EXIT.
ENDLOOP.
lr_repo->number_of_app = lines( lr_repo->t_app ).
lr_repo->author_name = shift_left( val = lr_repo->author_link sub = `https://github.com/` ).
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,138 @@
CLASS z2ui5_cl_popup_file_download DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
i_text TYPE string DEFAULT `Choose the file to upload:`
i_title TYPE string DEFAULT `File Download`
i_button_text_confirm TYPE string DEFAULT `OK`
i_button_text_cancel TYPE string DEFAULT `Cancel`
i_file TYPE string
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_file_download.
DATA mv_name TYPE string.
DATA mv_type TYPE string VALUE `data:text/csv;base64,`.
DATA mv_size TYPE string.
* DATA mv_path TYPE string.
DATA mv_value TYPE string.
* DATA check_confirm_enabled TYPE abap_bool.
DATA mv_check_download TYPE abap_bool.
METHODS result
RETURNING
VALUE(result) TYPE abap_bool.
PROTECTED SECTION.
DATA check_confirmed TYPE abap_bool.
DATA client TYPE REF TO z2ui5_if_client.
DATA title TYPE string.
DATA icon TYPE string.
DATA question_text TYPE string.
DATA button_text_confirm TYPE string.
DATA button_text_cancel TYPE string.
DATA check_initialized TYPE abap_bool.
METHODS view_display.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_POPUP_FILE_DOWNLOAD IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->title = i_title.
* r_result->icon = i_icon.
r_result->question_text = i_text.
r_result->button_text_confirm = i_button_text_confirm.
r_result->button_text_cancel = i_button_text_cancel.
r_result->mv_value = i_file.
r_result->mv_size = CONV i( strlen( i_file ) / 1000 ).
ENDMETHOD.
METHOD result.
result = check_confirmed.
ENDMETHOD.
METHOD view_display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( )->dialog(
title = title
icon = icon
afterclose = client->_event( 'BUTTON_CANCEL' )
)->content( ).
IF mv_check_download = abap_true.
DATA(lv_base64) = z2ui5_cl_util_func=>conv_decode_x_base64( mv_value ).
popup->_generic( ns = `html` name = `iframe` t_prop = VALUE #( ( n = `src` v = mv_type && lv_base64 ) ( n = `hidden` v = `hidden` ) ) ).
popup->_z2ui5( )->timer( finished = client->_event( `CALLBACK_DOWNLOAD` ) ).
ENDIF.
popup->vbox( 'sapUiMediumMargin'
)->label( `Name`
)->input( value = mv_name enabled = abap_false
)->label( `Type`
)->input( value = mv_type enabled = abap_false
)->label( `Size`
)->input( value = mv_size enabled = abap_false
)->get_parent( )->get_parent(
)->footer( )->overflow_toolbar(
)->toolbar_spacer(
)->button(
text = button_text_cancel
press = client->_event( 'BUTTON_CANCEL' )
)->button(
text = `Download`
press = client->_event( 'BUTTON_CONFIRM' )
type = 'Emphasized' ).
client->popup_display( popup->stringify( ) ).
ENDMETHOD.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
view_display( ).
RETURN.
ENDIF.
CASE client->get( )-event.
WHEN `CALLBACK_DOWNLOAD`.
check_confirmed = abap_true.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `BUTTON_CONFIRM`.
mv_check_download = abap_true.
view_display( ).
WHEN `BUTTON_CANCEL`.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,512 @@
CLASS lcl_utility DEFINITION
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS factory
IMPORTING
client TYPE REF TO z2ui5_if_client optional
RETURNING
VALUE(r_result) TYPE REF TO lcl_utility.
METHODS app_get_url_source_code
RETURNING
VALUE(result) TYPE string.
METHODS app_get_url
IMPORTING
classname TYPE string OPTIONAL
RETURNING
VALUE(result) TYPE string.
METHODS url_param_get
IMPORTING
!val TYPE string
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS trans_xml_2_object
IMPORTING
xml TYPE clike
EXPORTING
data TYPE data.
CLASS-METHODS trans_data_2_xml
IMPORTING
data TYPE data
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_table_by_json
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE REF TO data.
CLASS-METHODS get_table_by_xml
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE REF TO data.
CLASS-METHODS get_table_by_csv
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE REF TO data.
CLASS-METHODS get_csv_by_table
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_xml_by_table
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_json_by_table
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_fieldlist_by_table
IMPORTING
it_table TYPE any
RETURNING
VALUE(result) TYPE string_table.
CLASS-METHODS decode_x_base64
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE xstring.
CLASS-METHODS encode_x_base64
IMPORTING
val TYPE xstring
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_string_by_xstring
IMPORTING
val TYPE xstring
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS get_xstring_by_string
IMPORTING
val TYPE string
RETURNING
VALUE(result) TYPE xstring.
CLASS-METHODS get_uuid
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS trim_upper
IMPORTING
val TYPE clike
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS boolean_check
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE abap_bool.
CLASS-METHODS rtti_get_type_name
IMPORTING
val TYPE any
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
DATA mi_client TYPE REF TO z2ui5_if_client.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_utility IMPLEMENTATION.
METHOD rtti_get_type_name.
DATA(lo_descr) = cl_abap_elemdescr=>describe_by_data( val ).
DATA(lo_ele) = CAST cl_abap_elemdescr( lo_descr ).
result = lo_ele->get_relative_name( ).
ENDMETHOD.
METHOD boolean_check.
TRY.
DATA(lv_type_name) = rtti_get_type_name( val ).
CASE lv_type_name.
WHEN `ABAP_BOOL` OR `XSDBOOLEAN`.
result = abap_true.
ENDCASE.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
METHOD factory.
r_result = new #( ).
r_result->mi_client = client.
ENDMETHOD.
METHOD app_get_url.
result = z2ui5_cl_util_func=>app_get_url( classname = classname client = mi_client ).
ENDMETHOD.
METHOD app_get_url_source_code.
result = z2ui5_cl_util_func=>app_get_url_source_code( mi_client ).
ENDMETHOD.
METHOD url_param_get.
result = z2ui5_cl_util_func=>url_param_get(
val = val
url = mi_client->get( )-s_config-search ).
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_table_by_json.
* DATA lt_tab TYPE ty_t_table.
*
DATA lt_tab TYPE REF TO data.
/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 trans_data_2_xml.
" FIELD-SYMBOLS <object> TYPE any.
" ASSIGN object->* TO <object>.
" raise( when = xsdbool( sy-subrc <> 0 ) ).
CALL TRANSFORMATION id
SOURCE data = data
RESULT XML result
OPTIONS data_refs = `heap-or-create`.
ENDMETHOD.
METHOD trans_xml_2_object.
CALL TRANSFORMATION id
SOURCE XML xml
RESULT data = data.
ENDMETHOD.
METHOD get_table_by_xml.
* DATA lt_tab TYPE ty_t_table.
*
CALL TRANSFORMATION id SOURCE xml = val RESULT data = result.
*
* result = lt_tab.
ENDMETHOD.
METHOD get_table_by_csv.
SPLIT val AT cl_abap_char_utilities=>newline INTO TABLE DATA(lt_rows).
SPLIT lt_rows[ 1 ] AT ';' INTO TABLE DATA(lt_cols).
DATA lt_comp TYPE cl_abap_structdescr=>component_table.
LOOP AT lt_cols REFERENCE INTO DATA(lr_col).
DATA(lv_name) = trim_upper( lr_col->* ).
REPLACE ` ` IN lv_name WITH `_`.
INSERT VALUE #( name = lv_name type = cl_abap_elemdescr=>get_c( 40 ) ) INTO TABLE lt_comp.
ENDLOOP.
DATA(struc) = cl_abap_structdescr=>get( lt_comp ).
DATA(o_table_desc) = cl_abap_tabledescr=>create(
p_line_type = CAST #( struc )
p_table_kind = cl_abap_tabledescr=>tablekind_std
p_unique = abap_false ).
CREATE DATA result TYPE HANDLE o_table_desc.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN result->* TO <tab>.
DELETE lt_rows WHERE table_line IS INITIAL.
LOOP AT lt_rows REFERENCE INTO DATA(lr_rows) FROM 2.
SPLIT lr_rows->* AT ';' INTO TABLE lt_cols.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row TYPE HANDLE struc.
LOOP AT lt_cols REFERENCE INTO lr_col.
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
ASSIGN COMPONENT sy-tabix OF STRUCTURE <row> TO FIELD-SYMBOL(<field>).
<field> = lr_col->*.
ENDLOOP.
INSERT <row> INTO TABLE <tab>.
ENDLOOP.
ENDMETHOD.
METHOD decode_x_base64.
TRY.
CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('DECODE_X_BASE64')
EXPORTING
encoded = val
RECEIVING
decoded = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(classname) = 'CL_HTTP_UTILITY'.
CALL METHOD (classname)=>('DECODE_X_BASE64')
EXPORTING
encoded = val
RECEIVING
decoded = result.
ENDTRY.
ENDMETHOD.
METHOD encode_x_base64.
TRY.
CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('ENCODE_X_BASE64')
EXPORTING
unencoded = val
RECEIVING
encoded = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(classname) = 'CL_HTTP_UTILITY'.
CALL METHOD (classname)=>('ENCODE_X_BASE64')
EXPORTING
unencoded = val
RECEIVING
encoded = result.
ENDTRY.
ENDMETHOD.
METHOD get_csv_by_table.
FIELD-SYMBOLS <tab> TYPE table.
ASSIGN val TO <tab>.
DATA lr_row TYPE REF TO data.
DATA(tab) = CAST cl_abap_tabledescr( cl_abap_typedescr=>describe_by_data( <tab> ) ).
DATA(struc) = CAST cl_abap_structdescr( tab->get_table_line_type( ) ).
LOOP AT struc->get_components( ) REFERENCE INTO DATA(lr_comp).
result = result && lr_comp->name && ';'.
ENDLOOP.
result = result && cl_abap_char_utilities=>cr_lf.
LOOP AT <tab> REFERENCE INTO lr_row.
DATA(lv_index) = 1.
DO.
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
ASSIGN COMPONENT lv_index OF STRUCTURE <row> TO FIELD-SYMBOL(<field>).
IF sy-subrc <> 0.
EXIT.
ENDIF.
lv_index = lv_index + 1.
result = result && <field> && ';'.
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_string_by_xstring.
DATA conv TYPE REF TO object.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
RECEIVING
instance = conv.
CALL METHOD conv->('IF_ABAP_CONV_IN~CONVERT')
EXPORTING
source = val
RECEIVING
result = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(conv_in_class) = 'CL_ABAP_CONV_IN_CE'.
CALL METHOD (conv_in_class)=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = conv.
CALL METHOD conv->('CONVERT')
EXPORTING
input = val
IMPORTING
data = result.
ENDTRY.
ENDMETHOD.
METHOD get_xstring_by_string.
DATA conv TYPE REF TO object.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out
RECEIVING
instance = conv.
CALL METHOD conv->('IF_ABAP_CONV_OUT~CONVERT')
EXPORTING
source = val
RECEIVING
result = result.
CATCH cx_sy_dyn_call_illegal_class.
DATA(conv_out_class) = 'CL_ABAP_CONV_OUT_CE'.
CALL METHOD (conv_out_class)=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = conv.
CALL METHOD conv->('CONVERT')
EXPORTING
data = val
IMPORTING
buffer = result.
ENDTRY.
* result = cl_abap_conv_codepage=>create_out( )->convert( val ).
ENDMETHOD.
METHOD trim_upper.
result = to_upper( shift_left( shift_right( val ) ) ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_POPUP_FILE_DOWNLOAD</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui - popup file download</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,98 @@
CLASS z2ui5_cl_popup_itab_json_dl DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
itab TYPE data
i_title TYPE string DEFAULT `Popup To Confirm`
i_icon TYPE string DEFAULT 'sap-icon://question-mark'
i_button_text_confirm TYPE string DEFAULT `OK`
i_button_text_cancel TYPE string DEFAULT `Cancel`
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_itab_json_dl.
METHODS result
RETURNING
VALUE(result) TYPE abap_bool.
DATA mr_itab TYPE REF TO data.
PROTECTED SECTION.
DATA client TYPE REF TO z2ui5_if_client.
DATA title TYPE string.
DATA icon TYPE string.
* DATA question_text TYPE string.
DATA button_text_confirm TYPE string.
DATA button_text_cancel TYPE string.
* DATA check_initialized TYPE abap_bool.
DATA check_result_confirmed TYPE abap_bool.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_POPUP_ITAB_JSON_DL IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mr_itab = z2ui5_cl_util_func=>conv_copy_ref_data( itab ).
* r_result->z2ui5_if_app~id = z2ui5_cl_util_func=>func_get_uuid_22( ).
r_result->title = i_title.
r_result->icon = i_icon.
* r_result->question_text = i_question_text.
r_result->button_text_confirm = i_button_text_confirm.
r_result->button_text_cancel = i_button_text_cancel.
ENDMETHOD.
METHOD result.
result = check_result_confirmed.
ENDMETHOD.
METHOD z2ui5_if_app~main.
me->client = client.
TRY.
IF z2ui5_cl_util_func=>rtti_check_class_exists( `z2ui5_dbt_cl_app_03` ) = abap_false.
DATA(lv_link) = `https://github.com/oblomov-dev/a2UI5-db_table_loader`.
DATA(lv_text) = `<p>Please install the open-source project a2UI5-db_table_loader and try again: <a href="` &&
lv_link && `" style="color:blue; font-weight:600;" target="_blank">(link)</a></p>`.
DATA(lx) = NEW z2ui5_cx_util_error( val = lv_text ).
client->nav_app_leave( z2ui5_cl_popup_error=>factory( lx ) ).
ELSE.
DATA app TYPE REF TO object.
CALL METHOD ('Z2UI5_DBT_CL_APP_03')=>('FACTORY_POPUP_BY_ITAB')
EXPORTING
itab = mr_itab
RECEIVING
result = app.
client->nav_app_leave( CAST #( app ) ).
ENDIF.
CATCH cx_root INTO DATA(x).
client->nav_app_leave( z2ui5_cl_popup_to_inform=>factory( x->get_text( ) ) ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_POPUP_ITAB_JSON_DL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui - popup josn download</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -24,10 +24,18 @@ INTERFACE z2ui5_if_client
main TYPE string VALUE `MAIN`,
nested TYPE string VALUE `NEST`,
nested2 TYPE string VALUE `NEST2`,
* popover TYPE string VALUE `POPOVER`,
* popup TYPE string VALUE `POPUP`,
END OF cs_view.
CONSTANTS:
BEGIN OF cs_pretty_mode,
none TYPE char1 VALUE ``,
low_case TYPE char1 VALUE `L`,
camel_case TYPE char1 VALUE `X`,
extended TYPE char1 VALUE `Y`,
user TYPE char1 VALUE `U`,
user_low_case TYPE char1 VALUE `C`,
END OF cs_pretty_mode .
CONSTANTS:
BEGIN OF cs_compress_mode,
standard TYPE string VALUE `STANDARD`,
@ -170,8 +178,8 @@ INTERFACE z2ui5_if_client
IMPORTING
val TYPE data
path TYPE abap_bool DEFAULT abap_false
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
compress TYPE clike DEFAULT cs_compress_mode-standard
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
tab TYPE STANDARD TABLE OPTIONAL
tab_index TYPE i OPTIONAL
struc TYPE data OPTIONAL
@ -183,8 +191,8 @@ INTERFACE z2ui5_if_client
val TYPE data
path TYPE abap_bool DEFAULT abap_false
view TYPE string DEFAULT cs_view-main
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
compress TYPE clike DEFAULT cs_compress_mode-standard
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
tab TYPE STANDARD TABLE OPTIONAL
tab_index TYPE i OPTIONAL
struc TYPE data OPTIONAL
@ -195,8 +203,8 @@ INTERFACE z2ui5_if_client
IMPORTING
val TYPE data
path TYPE abap_bool DEFAULT abap_false
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
compress TYPE clike DEFAULT cs_compress_mode-standard
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
RETURNING
VALUE(result) TYPE string.