CLASS z2ui5_cl_popup_get_range_multi DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. CLASS-METHODS factory IMPORTING val TYPE z2ui5_cl_util=>ty_t_filter_multi RETURNING VALUE(r_result) TYPE REF TO z2ui5_cl_popup_get_range_multi. TYPES: BEGIN OF ty_s_result, t_sql TYPE z2ui5_cl_util=>ty_t_filter_multi, check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. METHODS result RETURNING VALUE(result) TYPE ty_s_result. PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. DATA check_initialized TYPE abap_bool. DATA mv_popup_name TYPE LINE OF string_table. METHODS popup_display. PRIVATE SECTION. ENDCLASS. CLASS z2ui5_cl_popup_get_range_multi IMPLEMENTATION. METHOD factory. r_result = NEW #( ). r_result->ms_result-t_sql = val. ENDMETHOD. METHOD result. result = ms_result. ENDMETHOD. METHOD popup_display. DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). lo_popup = lo_popup->dialog( afterclose = client->_event( 'BUTTON_CANCEL' ) contentheight = `50%` contentwidth = `50%` title = 'Define Filter Conditons' ). DATA(vbox) = lo_popup->vbox( height = `100%` justifycontent = 'SpaceBetween' ). DATA(item) = vbox->list( nodata = `no conditions defined` items = client->_bind( ms_result-t_sql ) selectionchange = client->_event( 'SELCHANGE' ) )->custom_list_item( ). DATA(grid) = item->grid( ). grid->label( `{NAME}` ). grid->multi_input( tokens = `{T_TOKEN}` enabled = abap_false valuehelprequest = client->_event( val = `LIST_OPEN` t_arg = VALUE #( ( `${NAME}` ) ) ) )->tokens( )->token( key = `{KEY}` text = `{TEXT}` visible = `{VISIBLE}` selected = `{SELKZ}` editable = `{EDITABLE}` ). grid->button( text = `Select` press = client->_event( val = `LIST_OPEN` t_arg = VALUE #( ( `${NAME}` ) ) ) ). grid->button( icon = 'sap-icon://delete' type = `Transparent` text = `Clear` press = client->_event( val = `LIST_DELETE` t_arg = VALUE #( ( `${NAME}` ) ) ) ). lo_popup->footer( )->overflow_toolbar( )->button( text = `Clear All` icon = 'sap-icon://delete' type = `Transparent` press = client->_event( val = `POPUP_DELETE_ALL` ) )->toolbar_spacer( )->button( text = 'Cancel' press = client->_event( 'BUTTON_CANCEL' ) )->button( text = 'OK' press = client->_event( 'BUTTON_CONFIRM' ) type = 'Emphasized' ). client->popup_display( lo_popup->stringify( ) ). ENDMETHOD. METHOD z2ui5_if_app~main. me->client = client. IF check_initialized = abap_false. check_initialized = abap_true. popup_display( ). RETURN. ENDIF. IF client->get( )-check_on_navigated = abap_true. DATA(lo_popup) = CAST z2ui5_cl_popup_get_range( client->get_app( client->get( )-s_draft-id_prev_app ) ). IF lo_popup->result( )-check_confirmed = abap_true. ASSIGN ms_result-t_sql[ name = mv_popup_name ] TO FIELD-SYMBOL(). -t_range = lo_popup->result( )-t_range. -t_token = z2ui5_cl_util=>filter_get_token_t_by_range_t( -t_range ). ENDIF. popup_display( ). ENDIF. CASE client->get( )-event. WHEN 'LIST_DELETE'. DATA(lt_event) = client->get( )-t_event_arg. ASSIGN ms_result-t_sql[ name = lt_event[ 1 ] ] TO . CLEAR -t_token. CLEAR -t_range. client->popup_model_update( ). WHEN 'LIST_OPEN'. lt_event = client->get( )-t_event_arg. mv_popup_name = lt_event[ 1 ]. DATA(ls_sql) = ms_result-t_sql[ name = mv_popup_name ]. client->nav_app_call( z2ui5_cl_popup_get_range=>factory( ls_sql-t_range ) ). WHEN `BUTTON_CONFIRM`. ms_result-check_confirmed = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). WHEN `BUTTON_CANCEL`. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). WHEN `POPUP_DELETE_ALL`. LOOP AT ms_result-t_sql REFERENCE INTO DATA(lr_sql). CLEAR lr_sql->t_range. CLEAR lr_sql->t_token. ENDLOOP. client->popup_model_update( ). ENDCASE. ENDMETHOD. ENDCLASS.