From 0f87b87003ff218a46e398616c54e5840bba7ff3 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Tue, 31 Jan 2023 11:50:44 +0100 Subject: [PATCH] Enhancement for Object Selector (#6009) Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> Co-authored-by: Lars Hvam --- src/ui/zcl_abapgit_popups.clas.abap | 383 ++++++++++++++++++---------- 1 file changed, 249 insertions(+), 134 deletions(-) diff --git a/src/ui/zcl_abapgit_popups.clas.abap b/src/ui/zcl_abapgit_popups.clas.abap index 520d1d753..065dc3c61 100644 --- a/src/ui/zcl_abapgit_popups.clas.abap +++ b/src/ui/zcl_abapgit_popups.clas.abap @@ -40,6 +40,7 @@ CLASS zcl_abapgit_popups DEFINITION ty_commit_value_tab_tt TYPE STANDARD TABLE OF ty_commit_value_tab WITH DEFAULT KEY. CONSTANTS c_fieldname_selected TYPE abap_componentdescr-name VALUE `SELECTED` ##NO_TEXT. + CONSTANTS c_fieldname_obj_type TYPE abap_componentdescr-name VALUE `OBJ_TYPE` ##NO_TEXT. CONSTANTS c_answer_cancel TYPE c LENGTH 1 VALUE 'A' ##NO_TEXT. DATA mo_select_list_popup TYPE REF TO cl_salv_table . @@ -65,16 +66,16 @@ CLASS zcl_abapgit_popups DEFINITION EXPORTING !et_list TYPE INDEX TABLE . METHODS on_select_list_link_click - FOR EVENT link_click OF cl_salv_events_table + FOR EVENT link_click OF cl_salv_events_table IMPORTING !row !column . METHODS on_select_list_function_click - FOR EVENT added_function OF cl_salv_events_table + FOR EVENT added_function OF cl_salv_events_table IMPORTING !e_salv_function . METHODS on_double_click - FOR EVENT double_click OF cl_salv_events_table + FOR EVENT double_click OF cl_salv_events_table IMPORTING !row !column . @@ -99,6 +100,13 @@ CLASS zcl_abapgit_popups DEFINITION !et_commits TYPE zif_abapgit_definitions=>ty_commit_tt RAISING zcx_abapgit_exception. + METHODS get_pfstatus + IMPORTING + !iv_selection_mode TYPE salv_de_constant + !iv_object_list TYPE abap_bool + EXPORTING + !ev_report TYPE sy-repid + !ev_pfstatus TYPE sy-pfkey. ENDCLASS. @@ -269,6 +277,35 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDMETHOD. + METHOD get_pfstatus. + + ev_report = 'SAPMSVIM'. + + IF iv_selection_mode = if_salv_c_selection_mode=>single. + ev_pfstatus = '110'. + ELSE. + ev_pfstatus = '102'. + + IF iv_object_list = abap_true. + " For object lists with multiple selections, try to use a PFSTATUS that includes + " an additional button to show other selection options + CALL FUNCTION 'RS_CUA_STATUS_CHECK' + EXPORTING + objectname = 'SELECT_MULTI_WK' + program = 'SAPLSEDI_POPUPS' + EXCEPTIONS + object_not_found = 1 + OTHERS = 2. + IF sy-subrc = 0. + ev_report = 'SAPLSEDI_POPUPS'. + ev_pfstatus = 'SELECT_MULTI_WK'. + ENDIF. + ENDIF. + ENDIF. + + ENDMETHOD. + + METHOD get_selected_rows. DATA: lv_condition TYPE string, @@ -354,25 +391,32 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. METHOD on_select_list_function_click. + DATA: lv_answer TYPE c LENGTH 1, + ls_position LIKE ms_position, + ls_selection TYPE spopli, + lt_selection TYPE TABLE OF spopli. + FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE any, + TYPE tadir-object, TYPE abap_bool. ASSIGN mr_table->* TO . ASSERT sy-subrc = 0. + " Work for functions of SAPMSVIM and SAPLSEDI_POPUPS CASE e_salv_function. - WHEN 'O.K.'. + WHEN 'O.K.' OR 'OK'. mv_cancel = abap_false. mo_select_list_popup->close_screen( ). - WHEN 'ABR'. + WHEN 'ABR' OR 'CANCEL'. "Canceled: clear list to overwrite nothing CLEAR . mv_cancel = abap_true. mo_select_list_popup->close_screen( ). - WHEN 'SALL'. + WHEN 'SALL' OR 'SEL_ALL'. LOOP AT ASSIGNING . ASSIGN COMPONENT c_fieldname_selected @@ -386,7 +430,7 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. mo_select_list_popup->refresh( ). - WHEN 'DSEL'. + WHEN 'DSEL' OR 'SEL_DEL'. LOOP AT ASSIGNING . ASSIGN COMPONENT c_fieldname_selected @@ -400,6 +444,73 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. mo_select_list_popup->refresh( ). + WHEN 'SEL_KEY'. + ls_selection-varoption = 'All objects'. + APPEND ls_selection TO lt_selection. + ls_selection-varoption = 'Packages'. + APPEND ls_selection TO lt_selection. + ls_selection-varoption = 'DDIC objects'. + APPEND ls_selection TO lt_selection. + ls_selection-varoption = 'Source code'. + APPEND ls_selection TO lt_selection. + ls_selection-varoption = 'Enhancements'. + APPEND ls_selection TO lt_selection. + + ls_position-start_column = ms_position-start_column + 20. + ls_position-start_row = ms_position-start_row + 5. + + CALL FUNCTION 'POPUP_TO_DECIDE_LIST' + EXPORTING + titel = 'Selection' + textline1 = 'Which objects should be selected?' + start_col = ls_position-start_column + start_row = ls_position-start_row + cursorline = 1 + IMPORTING + answer = lv_answer + TABLES + t_spopli = lt_selection + EXCEPTIONS + OTHERS = 1. + IF sy-subrc <> 0 OR lv_answer = c_answer_cancel. + RETURN. + ENDIF. + + LOOP AT ASSIGNING . + + ASSIGN COMPONENT c_fieldname_obj_type OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + CASE lv_answer. + WHEN '2'. " Packages + IF 'DEVC' <> . + CONTINUE. + ENDIF. + WHEN '3'. " DDIC + IF zcl_abapgit_objects_activation=>is_ddic_type( ) = abap_false. + CONTINUE. + ENDIF. + WHEN '4'. " Source Code + IF 'CLAS,FUGR,INTF,PROG,TYPE' NS . + CONTINUE. + ENDIF. + WHEN '5'. " Enhancements + IF 'ENHO,ENHS,ENHC,ENSC' NS . + CONTINUE. + ENDIF. + ENDCASE. + + ASSIGN COMPONENT c_fieldname_selected + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. + + = abap_true. + + ENDLOOP. + + mo_select_list_popup->refresh( ). + WHEN OTHERS. CLEAR . mo_select_list_popup->close_screen( ). @@ -578,6 +689,38 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~choose_code_insp_check_variant. + + DATA: lt_return TYPE STANDARD TABLE OF ddshretval. + + FIELD-SYMBOLS: LIKE LINE OF lt_return. + + CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' + EXPORTING + tabname = 'SCI_DYNP' + fieldname = 'CHKV' + TABLES + return_tab = lt_return + EXCEPTIONS + field_not_found = 1 + no_help_for_field = 2 + inconsistent_help = 3 + no_values_found = 4 + OTHERS = 5. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). + ENDIF. + + READ TABLE lt_return ASSIGNING + WITH KEY retfield = 'SCI_DYNP-CHKV'. + IF sy-subrc = 0. + rv_check_variant = -fieldval. + ENDIF. + + ENDMETHOD. + + METHOD zif_abapgit_popups~choose_pr_popup. DATA lv_answer TYPE c LENGTH 1. @@ -966,7 +1109,9 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. METHOD zif_abapgit_popups~popup_to_select_from_list. - DATA: lv_pfstatus TYPE sypfkey, + DATA: lv_pfstatus TYPE sy-pfkey, + lv_report TYPE sy-repid, + lv_object_list TYPE abap_bool, 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, @@ -1012,18 +1157,6 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. cl_salv_table=>factory( IMPORTING r_salv_table = mo_select_list_popup CHANGING t_table = ). - CASE iv_selection_mode. - WHEN if_salv_c_selection_mode=>single. - lv_pfstatus = '110'. - - WHEN OTHERS. - lv_pfstatus = '102'. - - ENDCASE. - - mo_select_list_popup->set_screen_status( pfstatus = lv_pfstatus - report = 'SAPMSVIM' ). - mo_select_list_popup->set_screen_popup( start_column = ms_position-start_column end_column = ms_position-end_column start_line = ms_position-start_row @@ -1093,8 +1226,23 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDCASE. + IF ls_column-columnname = c_fieldname_obj_type. + lv_object_list = abap_true. + ENDIF. + ENDLOOP. + get_pfstatus( + EXPORTING + iv_selection_mode = iv_selection_mode + iv_object_list = lv_object_list + IMPORTING + ev_report = lv_report + ev_pfstatus = lv_pfstatus ). + + mo_select_list_popup->set_screen_status( pfstatus = lv_pfstatus + report = lv_report ). + mo_select_list_popup->display( ). CATCH cx_salv_msg. @@ -1115,6 +1263,87 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_popups~popup_to_select_labels. + + DATA: + lt_all_labels TYPE zif_abapgit_repo_srv=>ty_labels, + ls_label LIKE LINE OF lt_all_labels, + lt_current_labels TYPE string_table, + lt_selected_labels LIKE lt_all_labels, + lt_columns_to_display TYPE zif_abapgit_definitions=>ty_alv_column_tt, + lt_preselected_rows TYPE zif_abapgit_popups=>ty_rows, + ls_columns_to_display LIKE LINE OF lt_columns_to_display, + lv_save_tabix TYPE i, + li_popup TYPE REF TO zif_abapgit_popups. + + FIELD-SYMBOLS: TYPE zif_abapgit_repo_srv=>ty_label, + TYPE LINE OF string_table. + + lt_current_labels = zcl_abapgit_repo_labels=>split( iv_labels ). + + lt_all_labels = zcl_abapgit_repo_srv=>get_instance( )->get_label_list( ). + + " Add labels which are not saved yet + LOOP AT lt_current_labels ASSIGNING . + + READ TABLE lt_all_labels TRANSPORTING NO FIELDS + WITH KEY key_label + COMPONENTS label = . + IF sy-subrc <> 0. + ls_label-label = . + INSERT ls_label INTO TABLE lt_all_labels. + ENDIF. + + ENDLOOP. + + IF lines( lt_all_labels ) = 0. + zcx_abapgit_exception=>raise( |No labels maintained yet| ). + ENDIF. + + SORT lt_all_labels. + DELETE ADJACENT DUPLICATES FROM lt_all_labels. + + " Preselect current labels + LOOP AT lt_all_labels ASSIGNING . + + lv_save_tabix = sy-tabix. + + READ TABLE lt_current_labels TRANSPORTING NO FIELDS + WITH KEY table_line = -label. + IF sy-subrc = 0. + INSERT lv_save_tabix INTO TABLE lt_preselected_rows. + ENDIF. + + ENDLOOP. + + ls_columns_to_display-name = 'LABEL'. + ls_columns_to_display-text = 'Label'. + INSERT ls_columns_to_display INTO TABLE lt_columns_to_display. + + li_popup = zcl_abapgit_ui_factory=>get_popups( ). + li_popup->popup_to_select_from_list( + EXPORTING + iv_header_text = 'Select labels' + iv_select_column_text = 'Add label' + it_list = lt_all_labels + iv_selection_mode = if_salv_c_selection_mode=>multiple + it_columns_to_display = lt_columns_to_display + it_preselected_rows = lt_preselected_rows + iv_start_column = 15 + iv_end_column = 55 + IMPORTING + et_list = lt_selected_labels ). + + LOOP AT lt_selected_labels ASSIGNING . + IF rv_labels IS NOT INITIAL. + rv_labels = rv_labels && ','. + ENDIF. + rv_labels = rv_labels && -label. + ENDLOOP. + + ENDMETHOD. + + METHOD zif_abapgit_popups~popup_to_select_transports. * todo, method to be renamed, it only returns one transport @@ -1298,118 +1527,4 @@ CLASS zcl_abapgit_popups IMPLEMENTATION. ENDIF. ENDMETHOD. - - - METHOD zif_abapgit_popups~popup_to_select_labels. - - DATA: - lt_all_labels TYPE zif_abapgit_repo_srv=>ty_labels, - ls_label LIKE LINE OF lt_all_labels, - lt_current_labels TYPE string_table, - lt_selected_labels LIKE lt_all_labels, - lt_columns_to_display TYPE zif_abapgit_definitions=>ty_alv_column_tt, - lt_preselected_rows TYPE zif_abapgit_popups=>ty_rows, - ls_columns_to_display LIKE LINE OF lt_columns_to_display, - lv_save_tabix TYPE i, - li_popup TYPE REF TO zif_abapgit_popups. - - FIELD-SYMBOLS: TYPE zif_abapgit_repo_srv=>ty_label, - TYPE LINE OF string_table. - - lt_current_labels = zcl_abapgit_repo_labels=>split( iv_labels ). - - lt_all_labels = zcl_abapgit_repo_srv=>get_instance( )->get_label_list( ). - - " Add labels which are not saved yet - LOOP AT lt_current_labels ASSIGNING . - - READ TABLE lt_all_labels TRANSPORTING NO FIELDS - WITH KEY key_label - COMPONENTS label = . - IF sy-subrc <> 0. - ls_label-label = . - INSERT ls_label INTO TABLE lt_all_labels. - ENDIF. - - ENDLOOP. - - IF lines( lt_all_labels ) = 0. - zcx_abapgit_exception=>raise( |No labels maintained yet| ). - ENDIF. - - SORT lt_all_labels. - DELETE ADJACENT DUPLICATES FROM lt_all_labels. - - " Preselect current labels - LOOP AT lt_all_labels ASSIGNING . - - lv_save_tabix = sy-tabix. - - READ TABLE lt_current_labels TRANSPORTING NO FIELDS - WITH KEY table_line = -label. - IF sy-subrc = 0. - INSERT lv_save_tabix INTO TABLE lt_preselected_rows. - ENDIF. - - ENDLOOP. - - ls_columns_to_display-name = 'LABEL'. - ls_columns_to_display-text = 'Label'. - INSERT ls_columns_to_display INTO TABLE lt_columns_to_display. - - li_popup = zcl_abapgit_ui_factory=>get_popups( ). - li_popup->popup_to_select_from_list( - EXPORTING - iv_header_text = 'Select labels' - iv_select_column_text = 'Add label' - it_list = lt_all_labels - iv_selection_mode = if_salv_c_selection_mode=>multiple - it_columns_to_display = lt_columns_to_display - it_preselected_rows = lt_preselected_rows - iv_start_column = 15 - iv_end_column = 55 - IMPORTING - et_list = lt_selected_labels ). - - LOOP AT lt_selected_labels ASSIGNING . - IF rv_labels IS NOT INITIAL. - rv_labels = rv_labels && ','. - ENDIF. - rv_labels = rv_labels && -label. - ENDLOOP. - - ENDMETHOD. - - - METHOD zif_abapgit_popups~choose_code_insp_check_variant. - - DATA: lt_return TYPE STANDARD TABLE OF ddshretval. - - FIELD-SYMBOLS: LIKE LINE OF lt_return. - - CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' - EXPORTING - tabname = 'SCI_DYNP' - fieldname = 'CHKV' - TABLES - return_tab = lt_return - EXCEPTIONS - field_not_found = 1 - no_help_for_field = 2 - inconsistent_help = 3 - no_values_found = 4 - OTHERS = 5. - - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise_t100( ). - ENDIF. - - READ TABLE lt_return ASSIGNING - WITH KEY retfield = 'SCI_DYNP-CHKV'. - IF sy-subrc = 0. - rv_check_variant = -fieldval. - ENDIF. - - ENDMETHOD. - ENDCLASS.