From f31a0cfbbea6c2d59b20f07705e419d054c98739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Tue, 10 Oct 2017 17:29:12 +0200 Subject: [PATCH] Generic select popup + Select unnecessary objects when resetting local (#973) * add generic selection popup * Downport * add text parameters * fix line length * dynamic: columns to display * delete merge artifacts --- src/zabapgit_objects_impl.prog.abap | 17 +- src/zabapgit_popups.prog.abap | 268 ++++++++++++++++++++-------- src/zabapgit_repo.prog.abap | 4 +- src/zabapgit_repo_impl.prog.abap | 15 -- src/zabapgit_services_git.prog.abap | 30 ++-- 5 files changed, 228 insertions(+), 106 deletions(-) diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 995f94df3..ba452e7d1 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -12,7 +12,8 @@ CLASS lcl_objects IMPLEMENTATION. METHOD warning_overwrite. DATA: lt_results_overwrite LIKE ct_results, - lt_confirmed_overwrite LIKE ct_results. + lt_confirmed_overwrite LIKE ct_results, + lt_columns TYPE stringtab. FIELD-SYMBOLS: LIKE LINE OF ct_results. @@ -31,8 +32,20 @@ CLASS lcl_objects IMPLEMENTATION. ENDLOOP. IF lines( lt_results_overwrite ) > 0. + + INSERT `OBJ_TYPE` INTO TABLE lt_columns. + INSERT `OBJ_NAME` INTO TABLE lt_columns. + "all returned objects will be overwritten - lt_confirmed_overwrite = lcl_popups=>popup_select_obj_overwrite( lt_results_overwrite ). + lcl_popups=>popup_to_select_from_list( + EXPORTING + it_list = lt_results_overwrite + i_header_text = |The following Objects have been modified locally.| + && | Select the Objects which should be overwritten.| + i_select_column_text = 'Overwrite?' + it_columns_to_display = lt_columns + IMPORTING + et_list = lt_confirmed_overwrite ). LOOP AT lt_results_overwrite ASSIGNING . READ TABLE lt_confirmed_overwrite TRANSPORTING NO FIELDS diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 041cbc195..61e6e18a6 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -77,24 +77,22 @@ CLASS lcl_popups DEFINITION FINAL. lcx_cancel, popup_to_select_transports RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers, - popup_select_obj_overwrite - IMPORTING it_list TYPE zif_abapgit_definitions=>ty_results_tt - RETURNING VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_results_tt - RAISING zcx_abapgit_exception. + popup_to_select_from_list + IMPORTING it_list TYPE STANDARD TABLE + i_header_text TYPE csequence + i_select_column_text TYPE csequence + it_columns_to_display TYPE stringtab + EXPORTING VALUE(et_list) TYPE STANDARD TABLE. PRIVATE SECTION. TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY. - TYPES: BEGIN OF t_popup_select_list, - selected TYPE flag. - INCLUDE TYPE zif_abapgit_definitions=>ty_result. - TYPES END OF t_popup_select_list. - - TYPES: t_popup_select_list_tt TYPE STANDARD TABLE OF t_popup_select_list WITH DEFAULT KEY. + CONSTANTS: co_fieldname_selected TYPE lvc_fname VALUE `SELECTED`. CLASS-DATA: - mtr_select_list TYPE REF TO t_popup_select_list_tt, - mo_select_list_popup TYPE REF TO cl_salv_table. + mo_select_list_popup TYPE REF TO cl_salv_table, + mr_table TYPE REF TO data, + mo_table_descr TYPE REF TO cl_abap_tabledescr. CLASS-METHODS: add_field @@ -105,16 +103,22 @@ CLASS lcl_popups DEFINITION FINAL. iv_field_attr TYPE sval-field_attr DEFAULT '' CHANGING ct_fields TYPE ty_sval_tt, - on_select_list_link_click - FOR EVENT link_click OF cl_salv_events_table + create_new_table IMPORTING - !row - !column, + it_list TYPE STANDARD TABLE, - on_select_list_function_click - FOR EVENT added_function OF cl_salv_events_table + get_selected_rows + EXPORTING + et_list TYPE INDEX TABLE, + + on_select_list_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING - !e_salv_function. + row + column, + + on_select_list_function_click FOR EVENT added_function OF cl_salv_events_table + IMPORTING + e_salv_function. ENDCLASS. @@ -727,35 +731,36 @@ CLASS lcl_popups IMPLEMENTATION. rs_transport_branch-commit_text = -value. ENDMETHOD. - METHOD popup_select_obj_overwrite. - DATA: - ls_list LIKE LINE OF it_list, - ls_popup_list TYPE t_popup_select_list, - lt_popup_list TYPE t_popup_select_list_tt, - lo_events TYPE REF TO cl_salv_events_table, - lo_columns TYPE REF TO cl_salv_columns_table, - lt_columns TYPE salv_t_column_ref, - ls_column TYPE salv_s_column_ref, - lo_column TYPE REF TO cl_salv_column_list, - lo_table_header TYPE REF TO cl_salv_form_text. + METHOD popup_to_select_from_list. - LOOP AT it_list INTO ls_list. - MOVE-CORRESPONDING ls_list TO ls_popup_list. - APPEND ls_popup_list TO lt_popup_list. - ENDLOOP. + DATA: + lo_events TYPE REF TO cl_salv_events_table, + lo_columns TYPE REF TO cl_salv_columns_table, + lt_columns TYPE salv_t_column_ref, + ls_column TYPE salv_s_column_ref, + lo_column TYPE REF TO cl_salv_column_list, + lo_table_header TYPE REF TO cl_salv_form_text. + + FIELD-SYMBOLS: TYPE STANDARD TABLE. + + CLEAR: et_list. + + create_new_table( it_list = it_list ). + + ASSIGN mr_table->* TO
. + ASSERT sy-subrc = 0. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = mo_select_list_popup - CHANGING t_table = lt_popup_list ). + CHANGING t_table =
). - GET REFERENCE OF lt_popup_list INTO mtr_select_list. mo_select_list_popup->set_screen_status( pfstatus = '102' report = 'SAPMSVIM' ). mo_select_list_popup->set_screen_popup( start_column = 1 - end_column = 65 - start_line = 1 - end_line = 20 ). + end_column = 65 + start_line = 1 + end_line = 20 ). lo_events = mo_select_list_popup->get_event( ). @@ -764,7 +769,7 @@ CLASS lcl_popups IMPLEMENTATION. CREATE OBJECT lo_table_header EXPORTING - text = |The following Objects have been modified locally. Select the Objects which should be overwritten.|. + text = i_header_text. mo_select_list_popup->set_top_of_list( lo_table_header ). @@ -773,21 +778,23 @@ CLASS lcl_popups IMPLEMENTATION. lt_columns = lo_columns->get( ). LOOP AT lt_columns INTO ls_column. - CASE ls_column-columnname. - WHEN 'OBJ_TYPE' OR 'OBJ_NAME'. - WHEN 'SELECTED'. - lo_column ?= ls_column-r_column. - lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). - lo_column->set_output_length( 20 ). - lo_column->set_short_text( 'Overwrite?' ). - lo_column->set_medium_text( 'Overwr. Lcl Object?' ). - lo_column->set_long_text( 'Overwrite Local Object?' ). + IF ls_column-columnname = co_fieldname_selected. + lo_column ?= ls_column-r_column. + lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). + lo_column->set_output_length( 20 ). + lo_column->set_short_text( |{ i_select_column_text }| ). + lo_column->set_medium_text( |{ i_select_column_text }| ). + lo_column->set_long_text( |{ i_select_column_text }| ). + CONTINUE. + ENDIF. - WHEN OTHERS. - ls_column-r_column->set_technical( abap_true ). + READ TABLE it_columns_to_display TRANSPORTING NO FIELDS + WITH KEY table_line = ls_column-columnname. + IF sy-subrc <> 0. + ls_column-r_column->set_technical( abap_true ). + ENDIF. - ENDCASE. ENDLOOP. mo_select_list_popup->display( ). @@ -796,20 +803,71 @@ CLASS lcl_popups IMPLEMENTATION. zcx_abapgit_exception=>raise( 'Error from POPUP_SELECT_OBJ_OVERWRITE' ). ENDTRY. - LOOP AT lt_popup_list INTO ls_popup_list WHERE selected = abap_true. - MOVE-CORRESPONDING ls_popup_list TO ls_list. - APPEND ls_list TO rt_list. - ENDLOOP. + get_selected_rows( + IMPORTING + et_list = et_list ). - CLEAR: - mo_select_list_popup, - mtr_select_list. + CLEAR: mo_select_list_popup, + mr_table, + mo_table_descr. ENDMETHOD. + METHOD create_new_table. + + " create and populate a table on the fly derived from + " it_data with a select column + + DATA: lr_struct TYPE REF TO data, + lt_components TYPE cl_abap_structdescr=>component_table, + lo_struct_descr TYPE REF TO cl_abap_structdescr, + struct_descr TYPE REF TO cl_abap_structdescr. + + FIELD-SYMBOLS:
TYPE STANDARD TABLE, + TYPE abap_componentdescr, + TYPE data, + TYPE any. + + mo_table_descr ?= cl_abap_tabledescr=>describe_by_data( it_list ). + lo_struct_descr ?= mo_table_descr->get_table_line_type( ). + lt_components = lo_struct_descr->get_components( ). + + INSERT INITIAL LINE INTO lt_components ASSIGNING INDEX 1. + ASSERT sy-subrc = 0. + + -name = co_fieldname_selected. + -type ?= cl_abap_datadescr=>describe_by_name( 'FLAG' ). + + struct_descr = cl_abap_structdescr=>create( p_components = lt_components ). + mo_table_descr = cl_abap_tabledescr=>create( p_line_type = struct_descr ). + + CREATE DATA mr_table TYPE HANDLE mo_table_descr. + ASSIGN mr_table->* TO
. + ASSERT sy-subrc = 0. + + CREATE DATA lr_struct TYPE HANDLE struct_descr. + ASSIGN lr_struct->* TO . + ASSERT sy-subrc = 0. + + LOOP AT it_list ASSIGNING . + + CLEAR: . + MOVE-CORRESPONDING TO . + INSERT INTO TABLE
. + + ENDLOOP. + + ENDMETHOD. + + METHOD on_select_list_function_click. - DATA: - lsr_line TYPE REF TO t_popup_select_list. + + FIELD-SYMBOLS:
TYPE STANDARD TABLE, + TYPE any, + TYPE flag. + + ASSIGN mr_table->* TO
. + ASSERT sy-subrc = 0. CASE e_salv_function. WHEN 'O.K.'. @@ -817,44 +875,106 @@ CLASS lcl_popups IMPLEMENTATION. WHEN 'ABR'. "Canceled: clear list to overwrite nothing - CLEAR mtr_select_list->*. + CLEAR
. mo_select_list_popup->close_screen( ). WHEN 'SALL'. - LOOP AT mtr_select_list->* REFERENCE INTO lsr_line. - lsr_line->selected = abap_true. + + LOOP AT
ASSIGNING . + + ASSIGN COMPONENT co_fieldname_selected + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + = abap_true. + ENDLOOP. + mo_select_list_popup->refresh( ). WHEN 'DSEL'. - LOOP AT mtr_select_list->* REFERENCE INTO lsr_line. - lsr_line->selected = abap_false. + + LOOP AT
ASSIGNING . + + ASSIGN COMPONENT co_fieldname_selected + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + = abap_false. + ENDLOOP. + mo_select_list_popup->refresh( ). WHEN OTHERS. - CLEAR mtr_select_list->*. + CLEAR
. mo_select_list_popup->close_screen( ). ENDCASE. + ENDMETHOD. METHOD on_select_list_link_click. - DATA: - lsr_line TYPE REF TO t_popup_select_list, - lv_line TYPE sytabix. + + DATA: lv_line TYPE sytabix. + + FIELD-SYMBOLS:
TYPE STANDARD TABLE, + TYPE any, + TYPE flag. + + ASSIGN mr_table->* TO
. + ASSERT sy-subrc = 0. lv_line = row. - READ TABLE mtr_select_list->* REFERENCE INTO lsr_line INDEX lv_line. + READ TABLE
ASSIGNING + INDEX lv_line. IF sy-subrc = 0. - IF lsr_line->selected = abap_true. - lsr_line->selected = abap_false. + + ASSIGN COMPONENT co_fieldname_selected + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + IF = abap_true. + = abap_false. ELSE. - lsr_line->selected = abap_true. + = abap_true. ENDIF. + ENDIF. mo_select_list_popup->refresh( ). ENDMETHOD. + + METHOD get_selected_rows. + + DATA: lv_condition TYPE string, + lr_exporting TYPE REF TO data. + + FIELD-SYMBOLS: TYPE any, +
TYPE STANDARD TABLE, + TYPE any. + + lv_condition = |{ co_fieldname_selected } = ABAP_TRUE|. + + ASSIGN mr_table->* TO
. + ASSERT sy-subrc = 0. + + CREATE DATA lr_exporting LIKE LINE OF et_list. + ASSIGN lr_exporting->* TO . + + LOOP AT
ASSIGNING + WHERE (lv_condition). + + CLEAR: . + MOVE-CORRESPONDING TO . + APPEND TO et_list. + + ENDLOOP. + + ENDMETHOD. + ENDCLASS. diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 8e0d7f917..5aad471f5 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -133,9 +133,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. RAISING zcx_abapgit_exception, get_unnecessary_local_objs RETURNING VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>TY_TADIR_TT - RAISING zcx_abapgit_exception, - delete_unnecessary_local_objs - RAISING zcx_abapgit_exception lcx_cancel. + RAISING zcx_abapgit_exception. PRIVATE SECTION. DATA: diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index ada70888a..add2034b9 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -322,21 +322,6 @@ CLASS lcl_repo_online IMPLEMENTATION. ENDMETHOD. " delete_initial_online_repo - METHOD delete_unnecessary_local_objs. - - DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt. - - lt_tadir = get_unnecessary_local_objs( ). - - IF lines( lt_tadir ) > 0. - - lcl_objects=>delete( lt_tadir ). - - ENDIF. - - ENDMETHOD. " delete_unneccessary_local_objs. - - METHOD get_unnecessary_local_objs. DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt, diff --git a/src/zabapgit_services_git.prog.abap b/src/zabapgit_services_git.prog.abap index a5af5ebe8..173aae74a 100644 --- a/src/zabapgit_services_git.prog.abap +++ b/src/zabapgit_services_git.prog.abap @@ -49,7 +49,9 @@ CLASS lcl_services_git IMPLEMENTATION. DATA: lo_repo TYPE REF TO lcl_repo_online, lv_answer TYPE c LENGTH 1, - lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt. + lt_unnecessary_local_objs TYPE zif_abapgit_definitions=>ty_tadir_tt, + lt_selected LIKE lt_unnecessary_local_objs, + lt_columns TYPE stringtab. lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ). @@ -75,18 +77,22 @@ CLASS lcl_services_git IMPLEMENTATION. IF lines( lt_unnecessary_local_objs ) > 0. - lv_answer = lcl_popups=>popup_to_confirm( - titlebar = 'Question' - text_question = |Delete { lines( lt_unnecessary_local_objs ) } unnecessary local objects?| - text_button_1 = 'Yes' - icon_button_1 = 'ICON_OKAY' - text_button_2 = 'No' - icon_button_2 = 'ICON_CANCEL' - default_button = '2' - display_cancel_button = abap_false ). "#EC NOTEXT + INSERT `OBJECT` INTO TABLE lt_columns. + INSERT `OBJ_NAME` INTO TABLE lt_columns. + + lcl_popups=>popup_to_select_from_list( + EXPORTING + it_list = lt_unnecessary_local_objs + i_header_text = |Which unnecessary objects should be deleted?| + i_select_column_text = 'Delete?' + it_columns_to_display = lt_columns + IMPORTING + et_list = lt_selected ). + + IF lines( lt_selected ) > 0. + + lcl_objects=>delete( lt_selected ). - IF lv_answer = '1'. - lo_repo->delete_unnecessary_local_objs( ). ENDIF. ENDIF.