* popups

* popups

* popups

* popups

* update
This commit is contained in:
oblomov 2024-01-14 16:04:40 +01:00 committed by GitHub
parent 83393c3fcf
commit 0621d73423
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 206 additions and 167 deletions

View File

@ -427,6 +427,10 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
RETURN.
ENDIF.
* FIELD-SYMBOLS <data> type any.
* assign mr_data->* to <data>.
* data(lv_value) = escape( val = z2ui5_cl_util_func=>trans_json_any_2( <data> ) format = cl_abap_format=>e_json_string ).
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class or switch to bind_local`.

View File

@ -13,19 +13,12 @@ CLASS z2ui5_cl_popup_messages DEFINITION
id TYPE string,
number TYPE string,
message TYPE string,
log_no TYPE string,
log_msg_no TYPE string,
message_v1 TYPE string,
message_v2 TYPE string,
message_v3 TYPE string,
message_v4 TYPE string,
parameter TYPE string,
row TYPE string,
field TYPE string,
system TYPE string,
END OF ty_s_msg.
TYPES ty_t_msg TYPE STANDARD TABLE OF ty_s_msg.
DATA mt_msg TYPE ty_t_msg.
CLASS-METHODS factory
@ -62,7 +55,7 @@ CLASS z2ui5_cl_popup_messages IMPLEMENTATION.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client )->dialog( title
)->table(
mode = 'SingleSelectLeft'
* mode = 'SingleSelectLeft'
items = client->_bind_edit( mt_msg )
)->columns(
)->column( )->text( 'Title' )->get_parent(
@ -70,7 +63,7 @@ CLASS z2ui5_cl_popup_messages IMPLEMENTATION.
)->column( )->text( 'Info' )->get_parent(
)->column( )->text( 'Description' )->get_parent(
)->get_parent(
)->items( )->column_list_item( selected = '{SELKZ}'
)->items( )->column_list_item(
)->cells(
)->text( '{TYPE}'
)->text( '{ID}'

View File

@ -6,11 +6,30 @@ CLASS z2ui5_cl_popup_textedit DEFINITION
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
CLASS-METHODS factory
IMPORTING
i_stretch_active TYPE abap_bool DEFAULT abap_true
i_textarea TYPE string OPTIONAL
PREFERRED PARAMETER i_textarea
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_textedit.
DATA client TYPE REF TO z2ui5_if_client.
DATA mv_stretch_active TYPE string.
DATA mv_textarea TYPE string.
DATA mv_stretch_active TYPE abap_bool.
DATA check_initialized TYPE abap_bool.
TYPES:
BEGIN OF ty_s_result,
text TYPE string,
check_cancel TYPE abap_bool,
END OF ty_s_result.
DATA ms_result TYPE ty_s_result.
METHODS display.
METHODS result
RETURNING
VALUE(result) TYPE ty_s_result.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
@ -19,17 +38,26 @@ ENDCLASS.
CLASS z2ui5_cl_popup_textedit IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mv_stretch_active = i_stretch_active.
r_result->ms_result-text = i_textarea.
ENDMETHOD.
METHOD display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client )->dialog(
afterclose = client->_event( 'BUTTON_TEXTAREA_CANCEL' )
stretch = mv_stretch_active
title = 'Title'
icon = 'sap-icon://edit'
)->content(
)->text_area(
height = '100%'
* height = '100%'
width = '100%'
value = client->_bind_edit( mv_textarea )
value = client->_bind_edit( ms_result-text )
)->get_parent(
)->footer( )->overflow_toolbar(
)->toolbar_spacer(
@ -45,8 +73,34 @@ CLASS z2ui5_cl_popup_textedit IMPLEMENTATION.
ENDMETHOD.
METHOD z2ui5_if_app~main.
me->client = client.
IF check_initialized = abap_false.
check_initialized = abap_true.
display( ).
RETURN.
ENDIF.
CASE client->get( )-event.
WHEN `BUTTON_TEXTAREA_CONFIRM`.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `BUTTON_TEXTAREA_CANCEL`.
ms_result-check_cancel = abap_true.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDCASE.
ENDMETHOD.
METHOD result.
result = ms_result.
ENDMETHOD.
ENDCLASS.

View File

@ -17,7 +17,7 @@ CLASS z2ui5_cl_popup_to_confirm DEFINITION
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_confirm.
METHODS check_result
METHODS result
RETURNING
VALUE(result) TYPE abap_bool.
@ -40,7 +40,7 @@ ENDCLASS.
CLASS Z2UI5_CL_POPUP_TO_CONFIRM IMPLEMENTATION.
METHOD check_result.
METHOD result.
result = check_result_confirmed.

View File

@ -12,17 +12,23 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select.
METHODS get_selected_index
METHODS result
RETURNING
VALUE(result) TYPE i.
PROTECTED SECTION.
DATA check_initialized TYPE abap_bool.
DATA mr_tab TYPE REF TO data.
DATA mr_tab_popup TYPE REF TO data ##NEEDED.
DATA mr_tab_popup_backup TYPE REF TO data ##NEEDED.
PROTECTED SECTION.
DATA check_initialized TYPE abap_bool.
DATA client TYPE REF TO z2ui5_if_client.
METHODS z2ui5_on_event.
DATA mv_selected_index TYPE i.
METHODS on_event.
METHODS display.
METHODS set_output_table.
METHODS on_event_confirm.
METHODS on_event_search.
PRIVATE SECTION.
ENDCLASS.
@ -33,7 +39,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD factory.
r_result = new #( ).
r_result = NEW #( ).
CREATE DATA r_result->mr_tab LIKE i_tab.
FIELD-SYMBOLS <tab> TYPE any.
ASSIGN r_result->mr_tab->* TO <tab>.
@ -43,30 +49,31 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD display.
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client ).
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
ASSIGN mr_tab_popup->* TO <tab_out>.
FIELD-SYMBOLS <tab> TYPE any.
ASSIGN mr_tab->* TO <tab>.
popup = popup->table_select_dialog(
items = `{path:'` && client->_bind_edit( val = <tab> path = abap_true ) && `', sorter : { path : 'STORAGE_LOCATION', descending : false } }`
DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client ).
DATA(tab) = popup->table_select_dialog(
items = `{path:'` && client->_bind_edit( val = <tab_out> path = abap_true ) && `', sorter : { path : 'STORAGE_LOCATION', descending : false } }`
cancel = client->_event( 'CANCEL' )
search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) )
confirm = client->_event( val = 'CONFIRM' t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) )
).
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab> ).
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab_out> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ).
DELETE lt_comp WHERE name = 'ZZSELKZ'.
DATA(list) = tab->column_list_item( valign = `Top` selected = `{ZZSELKZ}` ).
DATA(cells) = list->cells( ).
DATA(list) = popup->column_list_item( valign = `Top` selected = `{SELKZ}` ).
DATA(cells) = popup->cells( ).
LOOP AT lt_comp INTO DATA(ls_comp).
cells->text( text = `{` && ls_comp-name && `}` ).
ENDLOOP.
DATA(columns) = list->columns( ).
DATA(columns) = tab->columns( ).
LOOP AT lt_comp INTO ls_comp.
columns->column( width = '8rem' )->header( ns = `` )->text( text = ls_comp-name ).
ENDLOOP.
@ -82,46 +89,146 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
IF check_initialized = abap_false.
check_initialized = abap_true.
* Z2UI5_f4_set_data( ).
set_output_table( ).
display( ).
RETURN.
ENDIF.
z2ui5_on_event( ).
on_event( ).
ENDMETHOD.
METHOD z2ui5_on_event.
METHOD on_event.
CASE client->get( )-event.
WHEN 'CONFIRM'.
* DELETE mt_f4_table WHERE selkz <> abap_true.
* mv_product = VALUE #( mt_f4_table[ 1 ]-product OPTIONAL ).
* client->view_model_update( ).
on_event_confirm( ).
WHEN 'CANCEL'.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN 'SEARCH'.
* DATA(lt_arg) = client->get( )-t_event_arg.
* READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1.
* Z2UI5_f4_set_data( ).
* LOOP AT mt_f4_table INTO DATA(ls_tab).
* IF ls_tab-product CS ls_arg.
* CONTINUE.
* ENDIF.
* DELETE mt_f4_table.
* ENDLOOP.
client->popup_model_update( ).
on_event_search( ).
ENDCASE.
ENDMETHOD.
METHOD get_selected_index.
METHOD result.
result = 1.
result = mv_selected_index.
ENDMETHOD.
METHOD set_output_table.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <row2> TYPE any.
FIELD-SYMBOLS <row3> TYPE any.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
ASSIGN mr_tab->* TO <tab>.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lo_type_bool) = cl_abap_structdescr=>describe_by_name( 'ABAP_BOOL' ).
DATA(lt_comp) = lo_struct->get_components( ).
INSERT VALUE #( name = `ZZSELKZ` type = CAST #( lo_type_bool ) ) INTO TABLE lt_comp.
DATA(lo_line_type) = cl_abap_structdescr=>create( lt_comp ).
DATA(lo_tab_type) = cl_abap_tabledescr=>create( lo_line_type ).
CREATE DATA mr_tab_popup TYPE HANDLE lo_tab_type.
CREATE DATA mr_tab_popup_backup TYPE HANDLE lo_tab_type.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
FIELD-SYMBOLS <tab_out2> TYPE STANDARD TABLE.
ASSIGN mr_tab_popup->* TO <tab_out>.
ASSIGN mr_tab_popup_backup->* TO <tab_out2>.
LOOP AT <tab> ASSIGNING <row>.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF <tab_out>.
ASSIGN lr_row->* TO <row2>.
<row2> = CORRESPONDING #( <row> ).
INSERT <row2> INTO TABLE <tab_out>.
DATA lr_row2 TYPE REF TO data.
CREATE DATA lr_row2 LIKE LINE OF <tab_out2>.
ASSIGN lr_row2->* TO <row3>.
<row3> = CORRESPONDING #( <row> ).
INSERT <row3> INTO TABLE <tab_out2>.
ENDLOOP.
ENDMETHOD.
METHOD on_event_confirm.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <field> TYPE any.
ASSIGN mr_tab_popup->* TO <tab>.
LOOP AT <tab> ASSIGNING <row>.
DATA(lv_tabix) = sy-tabix.
ASSIGN ('<row>-ZZSELKZ') TO <field>.
IF <field> = abap_true.
mv_selected_index = lv_tabix.
EXIT.
ENDIF.
ENDLOOP.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDMETHOD.
METHOD on_event_search.
DATA(lt_arg) = client->get( )-t_event_arg.
READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <tab_out> TYPE STANDARD TABLE.
FIELD-SYMBOLS <tab_out_backup> TYPE STANDARD TABLE.
FIELD-SYMBOLS <row2> TYPE any.
FIELD-SYMBOLS <field2> TYPE any.
ASSIGN mr_tab_popup->* TO <tab_out>.
CLEAR <tab_out>.
ASSIGN mr_tab_popup_backup->* TO <tab_out_backup>.
LOOP AT <tab_out_backup> ASSIGNING <row>.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF <tab_out>.
ASSIGN lr_row->* TO <row2>.
<row2> = CORRESPONDING #( <row> ).
INSERT <row2> INTO TABLE <tab_out>.
ENDLOOP.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( <tab_out> ).
DATA(lo_table) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ).
LOOP AT <tab_out> ASSIGNING <row2>.
DATA(lv_check_continue) = abap_false.
LOOP AT lt_comp INTO DATA(ls_comp).
DATA(lv_assign) = '<ROW2>-' && ls_comp-name.
ASSIGN (lv_assign) TO <field2>.
IF <field2> CS ls_arg.
lv_check_continue = abap_true.
EXIT.
ENDIF.
ENDLOOP.
IF lv_check_continue = abap_true.
CONTINUE.
ENDIF.
DELETE <tab_out>.
ENDLOOP.
client->popup_model_update( ).
ENDMETHOD.

View File

@ -1,103 +0,0 @@
CLASS z2ui5_cl_test_features DEFINITION PUBLIC.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA mv_check_popup_active TYPE abap_bool.
DATA mv_check_initialized TYPE abap_bool.
PROTECTED SECTION.
METHODS display_view
IMPORTING
client TYPE REF TO z2ui5_if_client.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_test_features IMPLEMENTATION.
METHOD display_view.
DATA(view) = z2ui5_cl_xml_view=>factory( ).
view->shell(
)->page( title = 'abap2UI5 - UI functions' navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) shownavbutton = abap_true
)->grid( 'L6 M12 S12' )->content( 'layout'
)->simple_form( title = 'Popups' editable = abap_true )->content( 'form'
)->label( 'Test'
)->button( text = 'POPUP_TO_INFORM' press = client->_event( 'z2ui5_cl_ui_pop_to_confirm' )
)->label( 'Test'
)->button( text = 'POPUP_TO_CONFIRM' press = client->_event( 'z2ui5_cl_ui_pop_to_confirm' )
)->label( 'Test'
)->button( text = 'POPUP_MESSAGES' press = client->_event( 'z2ui5_cl_ui_pop_messages' )
)->label( 'Demo'
)->button( text = 'POPUP_TO_SELECT' press = client->_event( 'z2ui5_cl_ui_pop_to_select' )
).
client->view_display( view->stringify( ) ).
ENDMETHOD.
METHOD z2ui5_if_app~main.
IF mv_check_initialized = abap_false.
mv_check_initialized = abap_true.
display_view( client ).
ENDIF.
* IF client->get( )-check_on_navigated = abap_true.
* display_view( client ).
* ENDIF.
IF mv_check_popup_active = abap_true.
DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ).
TRY.
DATA(lo_popup_decide) = CAST z2ui5_cl_popup_to_confirm( lo_prev ).
client->message_box_display( `the result is ` && lo_popup_decide->check_result( ) ).
CATCH cx_root.
ENDTRY.
ENDIF.
mv_check_popup_active = abap_false.
CASE client->get( )-event.
WHEN 'z2ui5_cl_ui_pop_messages'.
DATA(lo_popup_msg) = z2ui5_cl_popup_messages=>factory(
i_messages = VALUE #(
( message = 'An empty Report field causes an empty XML Message to be sent' type = 'E' id = 'MSG1' number = '001' )
( message = 'Check was executed for wrong Scenario' type = 'E' id = 'MSG1' number = '002' )
( message = 'Request was handled without errors' type = 'S' id = 'MSG1' number = '003' )
( message = 'product activated' type = 'S' id = 'MSG4' number = '375' )
( message = 'check the input values' type = 'W' id = 'MSG2' number = '375' )
( message = 'product already in use' type = 'I' id = 'MSG2' number = '375' )
)
).
client->nav_app_call( lo_popup_msg ).
WHEN 'z2ui5_cl_ui_pop_to_confirm'.
DATA(lo_app) = z2ui5_cl_popup_to_confirm=>factory(
i_question_text = `this is a question`
).
mv_check_popup_active = abap_true.
client->nav_app_call( lo_app ).
WHEN 'BACK'.
DATA(lo_prev_stack_app) = client->get_app( client->get( )-s_draft-id_prev_app_stack ).
client->nav_app_leave( lo_prev_stack_app ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
ENDCLASS.

View File

@ -1,16 +0,0 @@
<?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_TEST_FEATURES</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - test more features</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>