mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-30 11:06:23 +08:00
Popup json download (#828)
* popup json download * lint fixes * update * update startup app * lint fixes
This commit is contained in:
parent
63ff4eed6d
commit
4443999ff1
File diff suppressed because it is too large
Load Diff
|
@ -192,7 +192,7 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
|
||||||
DATA(lv_id) = z2ui5_cl_util_func=>uuid_get_c22( ).
|
DATA(lv_id) = z2ui5_cl_util_func=>uuid_get_c22( ).
|
||||||
|
|
||||||
INSERT VALUE #( name = lv_id
|
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 )
|
bind_type = cs_bind_type-one_time )
|
||||||
INTO TABLE mt_attri.
|
INTO TABLE mt_attri.
|
||||||
result = |/{ lv_id }|.
|
result = |/{ lv_id }|.
|
||||||
|
|
|
@ -314,7 +314,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
|
|
||||||
IF struc IS NOT INITIAL.
|
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(
|
result = bind_struc_comp(
|
||||||
iv_name = lv_name_struc
|
iv_name = lv_name_struc
|
||||||
i_struc = struc
|
i_struc = struc
|
||||||
|
@ -330,8 +330,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
check_attri = mo_handler->ms_db-check_attri
|
check_attri = mo_handler->ms_db-check_attri
|
||||||
type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
|
type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
|
||||||
data = val
|
data = val
|
||||||
pretty_name = pretty_name
|
pretty_name = pretty_mode
|
||||||
compress = compress
|
compress = compress_mode
|
||||||
).
|
).
|
||||||
|
|
||||||
result = lo_binder->main( ).
|
result = lo_binder->main( ).
|
||||||
|
@ -370,7 +370,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
|
|
||||||
IF tab IS NOT INITIAL.
|
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(
|
result = bind_tab_cell(
|
||||||
iv_name = lv_name
|
iv_name = lv_name
|
||||||
i_tab_index = tab_index
|
i_tab_index = tab_index
|
||||||
|
@ -383,7 +383,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
|
|
||||||
IF struc IS NOT INITIAL.
|
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(
|
result = bind_struc_comp(
|
||||||
iv_name = lv_name_struc
|
iv_name = lv_name_struc
|
||||||
i_struc = struc
|
i_struc = struc
|
||||||
|
@ -400,8 +400,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
|
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
|
||||||
data = val
|
data = val
|
||||||
view = view
|
view = view
|
||||||
pretty_name = pretty_name
|
pretty_name = pretty_mode
|
||||||
compress = compress
|
compress = compress_mode
|
||||||
).
|
).
|
||||||
|
|
||||||
result = lo_binder->main( ).
|
result = lo_binder->main( ).
|
||||||
|
@ -423,8 +423,8 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
|
||||||
check_attri = mo_handler->ms_db-check_attri
|
check_attri = mo_handler->ms_db-check_attri
|
||||||
type = z2ui5_cl_fw_binding=>cs_bind_type-one_time
|
type = z2ui5_cl_fw_binding=>cs_bind_type-one_time
|
||||||
data = val
|
data = val
|
||||||
pretty_name = pretty_name
|
pretty_name = pretty_mode
|
||||||
compress = compress
|
compress = compress_mode
|
||||||
).
|
).
|
||||||
|
|
||||||
result = lo_binder->main( ).
|
result = lo_binder->main( ).
|
||||||
|
|
|
@ -189,7 +189,9 @@ CLASS z2ui5_cl_fw_db IMPLEMENTATION.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0.
|
||||||
CONTINUE.
|
CONTINUE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
lr_attri->data_rtti = z2ui5_cl_util_func=>trans_srtti_xml_by_data( <deref_attri> ).
|
* 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 <deref_attri>.
|
||||||
CLEAR <attri>.
|
CLEAR <attri>.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
@ -203,7 +205,7 @@ CLASS z2ui5_cl_fw_db IMPLEMENTATION.
|
||||||
|
|
||||||
RAISE EXCEPTION TYPE z2ui5_cx_util_error
|
RAISE EXCEPTION TYPE z2ui5_cx_util_error
|
||||||
EXPORTING
|
EXPORTING
|
||||||
* val = x->get_text( ) && `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attribtues of your class`.
|
* val = x->get_text( ) && `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attribtues of your class`.
|
||||||
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
|
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
|
||||||
|
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
|
@ -143,7 +143,7 @@ CLASS z2ui5_cl_fw_model IMPLEMENTATION.
|
||||||
|
|
||||||
WHEN `h`.
|
WHEN `h`.
|
||||||
lo_actual->add_attribute( n = lr_attri->name_front
|
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 ).
|
apos_active = abap_false ).
|
||||||
|
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
|
@ -157,7 +157,7 @@ CLASS z2ui5_cl_fw_model IMPLEMENTATION.
|
||||||
ELSE.
|
ELSE.
|
||||||
|
|
||||||
lo_actual->add_attribute( n = lr_attri->name_front
|
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 ).
|
apos_active = abap_false ).
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
|
@ -45,55 +45,77 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
METHOD view_display_start.
|
||||||
|
|
||||||
DATA(lv_url) = z2ui5_cl_util_func=>app_get_url(
|
DATA(lv_url) = z2ui5_cl_util_func=>app_get_url(
|
||||||
client = client
|
client = client
|
||||||
classname = ms_home-classname ).
|
classname = ms_home-classname ).
|
||||||
|
|
||||||
DATA(page) = z2ui5_cl_ui5=>_factory( )->_ns_m( )->shell(
|
DATA(page2) = z2ui5_cl_xml_view=>factory( )->shell( )->page(
|
||||||
)->page( shownavbutton = abap_false ).
|
shownavbutton = abap_false ).
|
||||||
|
|
||||||
page->headercontent(
|
page2->header_content( )->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP` )->toolbar_spacer( ).
|
||||||
)->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` ).
|
|
||||||
|
|
||||||
DATA(grid) = page->_ns_ui( )->grid( `XL7 L7 M12 S12`
|
DATA(simple_form2) = page2->simple_form(
|
||||||
)->content( `sap.ui.layout` ).
|
editable = abap_true
|
||||||
DATA(content) = grid->simpleform( title = `Quickstart`
|
layout = `ResponsiveGridLayout`
|
||||||
layout = `ResponsiveGridLayout`
|
labelspanxl = `4`
|
||||||
editable = `true`
|
labelspanl = `3`
|
||||||
)->content( )->_ns_m( ).
|
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`
|
|
||||||
)->label( `Step 2`
|
|
||||||
)->text( `Add the interface: Z2UI5_IF_APP`
|
|
||||||
)->label( `Step 3`
|
|
||||||
)->text( `Define view, implement behaviour`
|
|
||||||
)->link( text = `(Example)`
|
|
||||||
target = `_blank`
|
|
||||||
href = `https://github.com/abap2UI5/abap2UI5/blob/main/src/03/02/z2ui5_cl_app_hello_world.clas.abap`
|
|
||||||
)->label( `Step 4` ).
|
|
||||||
|
|
||||||
|
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 the view, implement behaviour`
|
||||||
|
)->label(
|
||||||
|
)->link( text = `(Example)`
|
||||||
|
target = `_blank`
|
||||||
|
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.
|
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 )
|
editable = z2ui5_cl_util_func=>boolean_abap_2_json( ms_home-class_editable )
|
||||||
value = client->_bind_edit( ms_home-classname )
|
value = client->_bind_edit( ms_home-classname )
|
||||||
submit = client->_event( ms_home-btn_event_id )
|
submit = client->_event( ms_home-btn_event_id )
|
||||||
|
@ -102,62 +124,69 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
|
||||||
).
|
).
|
||||||
|
|
||||||
ELSE.
|
ELSE.
|
||||||
content->text( ms_home-classname ).
|
simple_form2->text( ms_home-classname ).
|
||||||
ENDIF.
|
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
|
text = ms_home-btn_text
|
||||||
icon = ms_home-btn_icon
|
icon = ms_home-btn_icon
|
||||||
)->label( `Step 5`
|
).
|
||||||
)->link( text = `Link to the Application`
|
simple_form2->label( `Step 5`
|
||||||
target = `_blank`
|
)->link( text = `Link to the Application`
|
||||||
href = lv_url
|
target = `_blank`
|
||||||
enabled = z2ui5_cl_util_func=>boolean_abap_2_json( xsdbool( ms_home-class_editable = abap_false ) ) ).
|
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`
|
simple_form2->toolbar( )->title( `System Information` ).
|
||||||
editable = abap_true
|
simple_form2->label( `abap2UI5 Version` ).
|
||||||
layout = `ResponsiveGridLayout` ).
|
simple_form2->text( z2ui5_cl_fw_http_handler=>c_abap_version ).
|
||||||
|
|
||||||
IF mv_check_demo = abap_false.
|
* DATA(lv_url_search2) = z2ui5_cl_util_func=>app_get_url(
|
||||||
form->_ns_m( )->messagestrip( text = `Oops! You need to install abap2UI5 demos before continuing...`
|
* client = client
|
||||||
type = `Warning`
|
* classname = 'z2ui5_cl_app_search_apps' ).
|
||||||
)->_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_samples) = z2ui5_cl_util_func=>app_get_url(
|
DATA(lv_url_samples2) = z2ui5_cl_util_func=>app_get_url(
|
||||||
client = client
|
client = client
|
||||||
classname = 'z2ui5_cl_demo_app_000' ).
|
classname = 'z2ui5_cl_demo_app_000' ).
|
||||||
|
|
||||||
DATA(cont) = form->content( )->_ns_m( ).
|
simple_form2->toolbar( )->title( `What's next?` ).
|
||||||
cont->label( `Samples`).
|
* simple_form2->label( `Install & Run Apps` ).
|
||||||
* cont->button(
|
* simple_form2->button( text = `Apps on your system` press = client->_event_client( val = client->cs_event-open_new_tab
|
||||||
* text = `Continue...`
|
* t_arg = VALUE #( ( `$` && client->_bind_local( lv_url_search2 ) ) ) )
|
||||||
* 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 ).
|
|
||||||
|
|
||||||
cont->label( `Local`
|
simple_form2->label( `Development` ).
|
||||||
)->link( text = `Search apps on your system...`
|
simple_form2->button(
|
||||||
target = `_blank`
|
text = `Check out the samples` press = client->_event_client( val = client->cs_event-open_new_tab
|
||||||
href = lv_url_search
|
t_arg = VALUE #( ( `$` && client->_bind_local( lv_url_samples2 ) ) ) )
|
||||||
).
|
).
|
||||||
|
|
||||||
cont->label( `Online` )->link( text = `More on GitHub...`
|
simple_form2->toolbar( )->title( `` ).
|
||||||
target = `_blank`
|
simple_form2->label( `` ).
|
||||||
href = `https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md` ).
|
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/issues` ).
|
||||||
|
|
||||||
client->view_display( form->_stringify( ) ).
|
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` ).
|
||||||
|
|
||||||
|
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.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -238,28 +267,4 @@ data(lv_url_samples) = z2ui5_cl_util_func=>app_get_url(
|
||||||
mv_check_demo = abap_true.
|
mv_check_demo = abap_true.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
ENDCLASS.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,17 +10,35 @@ CLASS z2ui5_cl_app_search_apps DEFINITION
|
||||||
BEGIN OF ty_app,
|
BEGIN OF ty_app,
|
||||||
name TYPE string,
|
name TYPE string,
|
||||||
visible TYPE abap_bool,
|
visible TYPE abap_bool,
|
||||||
|
* check_fav TYPE abap_bool,
|
||||||
END OF ty_app.
|
END OF ty_app.
|
||||||
DATA mt_apps TYPE STANDARD TABLE OF ty_app WITH EMPTY KEY.
|
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 check_initialized TYPE abap_bool.
|
||||||
DATA mv_search_value TYPE string.
|
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.
|
PROTECTED SECTION.
|
||||||
METHODS search.
|
METHODS search.
|
||||||
METHODS view_display
|
METHODS view_display
|
||||||
IMPORTING
|
IMPORTING
|
||||||
client TYPE REF TO z2ui5_if_client.
|
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.
|
PRIVATE SECTION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
@ -31,9 +49,19 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD z2ui5_if_app~main.
|
METHOD z2ui5_if_app~main.
|
||||||
|
|
||||||
|
me->client = client.
|
||||||
|
|
||||||
IF check_initialized = abap_false.
|
IF check_initialized = abap_false.
|
||||||
check_initialized = abap_true.
|
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` )
|
mt_apps = VALUE #( FOR row IN z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` )
|
||||||
( name = row ) ).
|
( name = row ) ).
|
||||||
search( ).
|
search( ).
|
||||||
|
@ -48,14 +76,25 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
|
||||||
CASE client->get( )-event.
|
CASE client->get( )-event.
|
||||||
|
|
||||||
WHEN `ON_PRESS`.
|
WHEN `ON_PRESS`.
|
||||||
|
|
||||||
DATA(lt_arg) = client->get( )-t_event_arg.
|
DATA(lt_arg) = client->get( )-t_event_arg.
|
||||||
DATA(lv_app) = lt_arg[ 1 ].
|
DATA(lv_app) = lt_arg[ 1 ].
|
||||||
|
|
||||||
DATA li_app TYPE REF TO z2ui5_if_app.
|
* LOOP AT mt_apps REFERENCE INTO DATA(lr_apps) WHERE name = lv_app.
|
||||||
CREATE OBJECT li_app TYPE (lv_app).
|
* lr_apps->check_fav = abap_true.
|
||||||
client->nav_app_call( li_app ).
|
* 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'.
|
WHEN 'BACK'.
|
||||||
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
|
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.
|
LOOP AT mt_apps REFERENCE INTO lr_app.
|
||||||
lr_app->visible = abap_false.
|
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.
|
CONTINUE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
IF lr_app->name CS mv_search_value.
|
IF lr_app->name CS mv_search_value.
|
||||||
|
@ -88,33 +127,228 @@ CLASS z2ui5_cl_app_search_apps IMPLEMENTATION.
|
||||||
METHOD view_display.
|
METHOD view_display.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DATA(page) = z2ui5_cl_xml_view=>factory(
|
DATA(page) = z2ui5_cl_xml_view=>factory(
|
||||||
)->shell(
|
)->shell(
|
||||||
)->page(
|
* )->page(
|
||||||
title = 'abap2UI5 - Search Apps'
|
* title = 'abap2UI5 - Search Apps'
|
||||||
navbuttonpress = client->_event( 'BACK' )
|
* navbuttonpress = client->_event( 'BACK' )
|
||||||
shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack is not initial )
|
* shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack is not initial )
|
||||||
)->header_content(
|
* )->header_content(
|
||||||
)->search_field(
|
* )->search_field(
|
||||||
value = client->_bind_edit( mv_search_value )
|
* value = client->_bind_edit( mv_search_value )
|
||||||
search = client->_event( 'ON_SEARCH' )
|
* search = client->_event( 'ON_SEARCH' )
|
||||||
change = client->_event( 'ON_SEARCH' )
|
* change = client->_event( 'ON_SEARCH' )
|
||||||
width = `17.5rem`
|
* width = `17.5rem`
|
||||||
id = `SEARCH`
|
* id = `SEARCH`
|
||||||
)->get_parent( ).
|
* )->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 )
|
||||||
|
search = client->_event( 'ON_SEARCH' )
|
||||||
|
change = client->_event( 'ON_SEARCH' )
|
||||||
|
width = `17.5rem`
|
||||||
|
id = `SEARCH`
|
||||||
|
)->get_parent( ).
|
||||||
|
|
||||||
|
|
||||||
LOOP AT mt_apps REFERENCE INTO DATA(lr_app).
|
LOOP AT mt_apps REFERENCE INTO DATA(lr_app).
|
||||||
DATA(lv_tabix) = sy-tabix.
|
DATA(lv_tabix) = sy-tabix.
|
||||||
page->generic_tile(
|
page_all->generic_tile(
|
||||||
|
id = lr_app->name
|
||||||
class = 'sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout'
|
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 )
|
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 ) ).
|
visible = client->_bind( val = lr_app->visible tab = mt_apps tab_index = lv_tabix ) ).
|
||||||
ENDLOOP.
|
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( ) ).
|
client->view_display( page->stringify( ) ).
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
ENDCLASS.
|
||||||
|
|
116
src/02/02/z2ui5_cl_app_search_apps.clas.locals_imp.abap
Normal file
116
src/02/02/z2ui5_cl_app_search_apps.clas.locals_imp.abap
Normal 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.
|
138
src/02/03/z2ui5_cl_popup_file_download.clas.abap
Normal file
138
src/02/03/z2ui5_cl_popup_file_download.clas.abap
Normal 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.
|
512
src/02/03/z2ui5_cl_popup_file_download.clas.locals_imp.abap
Normal file
512
src/02/03/z2ui5_cl_popup_file_download.clas.locals_imp.abap
Normal 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.
|
16
src/02/03/z2ui5_cl_popup_file_download.clas.xml
Normal file
16
src/02/03/z2ui5_cl_popup_file_download.clas.xml
Normal 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>
|
98
src/02/03/z2ui5_cl_popup_itab_json_dl.clas.abap
Normal file
98
src/02/03/z2ui5_cl_popup_itab_json_dl.clas.abap
Normal 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.
|
16
src/02/03/z2ui5_cl_popup_itab_json_dl.clas.xml
Normal file
16
src/02/03/z2ui5_cl_popup_itab_json_dl.clas.xml
Normal 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>
|
|
@ -24,10 +24,18 @@ INTERFACE z2ui5_if_client
|
||||||
main TYPE string VALUE `MAIN`,
|
main TYPE string VALUE `MAIN`,
|
||||||
nested TYPE string VALUE `NEST`,
|
nested TYPE string VALUE `NEST`,
|
||||||
nested2 TYPE string VALUE `NEST2`,
|
nested2 TYPE string VALUE `NEST2`,
|
||||||
* popover TYPE string VALUE `POPOVER`,
|
|
||||||
* popup TYPE string VALUE `POPUP`,
|
|
||||||
END OF cs_view.
|
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:
|
CONSTANTS:
|
||||||
BEGIN OF cs_compress_mode,
|
BEGIN OF cs_compress_mode,
|
||||||
standard TYPE string VALUE `STANDARD`,
|
standard TYPE string VALUE `STANDARD`,
|
||||||
|
@ -170,8 +178,8 @@ INTERFACE z2ui5_if_client
|
||||||
IMPORTING
|
IMPORTING
|
||||||
val TYPE data
|
val TYPE data
|
||||||
path TYPE abap_bool DEFAULT abap_false
|
path TYPE abap_bool DEFAULT abap_false
|
||||||
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
|
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
|
||||||
compress TYPE clike DEFAULT cs_compress_mode-standard
|
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
|
||||||
tab TYPE STANDARD TABLE OPTIONAL
|
tab TYPE STANDARD TABLE OPTIONAL
|
||||||
tab_index TYPE i OPTIONAL
|
tab_index TYPE i OPTIONAL
|
||||||
struc TYPE data OPTIONAL
|
struc TYPE data OPTIONAL
|
||||||
|
@ -183,8 +191,8 @@ INTERFACE z2ui5_if_client
|
||||||
val TYPE data
|
val TYPE data
|
||||||
path TYPE abap_bool DEFAULT abap_false
|
path TYPE abap_bool DEFAULT abap_false
|
||||||
view TYPE string DEFAULT cs_view-main
|
view TYPE string DEFAULT cs_view-main
|
||||||
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
|
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
|
||||||
compress TYPE clike DEFAULT cs_compress_mode-standard
|
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
|
||||||
tab TYPE STANDARD TABLE OPTIONAL
|
tab TYPE STANDARD TABLE OPTIONAL
|
||||||
tab_index TYPE i OPTIONAL
|
tab_index TYPE i OPTIONAL
|
||||||
struc TYPE data OPTIONAL
|
struc TYPE data OPTIONAL
|
||||||
|
@ -195,8 +203,8 @@ INTERFACE z2ui5_if_client
|
||||||
IMPORTING
|
IMPORTING
|
||||||
val TYPE data
|
val TYPE data
|
||||||
path TYPE abap_bool DEFAULT abap_false
|
path TYPE abap_bool DEFAULT abap_false
|
||||||
pretty_name TYPE clike DEFAULT /ui2/cl_json=>pretty_mode-none
|
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none
|
||||||
compress TYPE clike DEFAULT cs_compress_mode-standard
|
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE string.
|
VALUE(result) TYPE string.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user