Enhancement for Object Selector (#6009)

Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-01-31 11:50:44 +01:00 committed by GitHub
parent e6c67c4146
commit 0f87b87003
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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: <lt_table> TYPE STANDARD TABLE,
<lg_line> TYPE any,
<lv_object> TYPE tadir-object,
<lv_selected> TYPE abap_bool.
ASSIGN mr_table->* TO <lt_table>.
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 <lt_table>.
mv_cancel = abap_true.
mo_select_list_popup->close_screen( ).
WHEN 'SALL'.
WHEN 'SALL' OR 'SEL_ALL'.
LOOP AT <lt_table> ASSIGNING <lg_line>.
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 <lt_table> ASSIGNING <lg_line>.
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 <lt_table> ASSIGNING <lg_line>.
ASSIGN COMPONENT c_fieldname_obj_type OF STRUCTURE <lg_line> TO <lv_object>.
ASSERT sy-subrc = 0.
CASE lv_answer.
WHEN '2'. " Packages
IF 'DEVC' <> <lv_object>.
CONTINUE.
ENDIF.
WHEN '3'. " DDIC
IF zcl_abapgit_objects_activation=>is_ddic_type( <lv_object> ) = abap_false.
CONTINUE.
ENDIF.
WHEN '4'. " Source Code
IF 'CLAS,FUGR,INTF,PROG,TYPE' NS <lv_object>.
CONTINUE.
ENDIF.
WHEN '5'. " Enhancements
IF 'ENHO,ENHS,ENHC,ENSC' NS <lv_object>.
CONTINUE.
ENDIF.
ENDCASE.
ASSIGN COMPONENT c_fieldname_selected
OF STRUCTURE <lg_line>
TO <lv_selected>.
ASSERT sy-subrc = 0.
<lv_selected> = abap_true.
ENDLOOP.
mo_select_list_popup->refresh( ).
WHEN OTHERS.
CLEAR <lt_table>.
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: <ls_return> 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 <ls_return>
WITH KEY retfield = 'SCI_DYNP-CHKV'.
IF sy-subrc = 0.
rv_check_variant = <ls_return>-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 = <lt_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: <lv_label> TYPE zif_abapgit_repo_srv=>ty_label,
<lv_current_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 <lv_current_label>.
READ TABLE lt_all_labels TRANSPORTING NO FIELDS
WITH KEY key_label
COMPONENTS label = <lv_current_label>.
IF sy-subrc <> 0.
ls_label-label = <lv_current_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_label>.
lv_save_tabix = sy-tabix.
READ TABLE lt_current_labels TRANSPORTING NO FIELDS
WITH KEY table_line = <lv_label>-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 <lv_label>.
IF rv_labels IS NOT INITIAL.
rv_labels = rv_labels && ','.
ENDIF.
rv_labels = rv_labels && <lv_label>-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: <lv_label> TYPE zif_abapgit_repo_srv=>ty_label,
<lv_current_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 <lv_current_label>.
READ TABLE lt_all_labels TRANSPORTING NO FIELDS
WITH KEY key_label
COMPONENTS label = <lv_current_label>.
IF sy-subrc <> 0.
ls_label-label = <lv_current_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_label>.
lv_save_tabix = sy-tabix.
READ TABLE lt_current_labels TRANSPORTING NO FIELDS
WITH KEY table_line = <lv_label>-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 <lv_label>.
IF rv_labels IS NOT INITIAL.
rv_labels = rv_labels && ','.
ENDIF.
rv_labels = rv_labels && <lv_label>-label.
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_popups~choose_code_insp_check_variant.
DATA: lt_return TYPE STANDARD TABLE OF ddshretval.
FIELD-SYMBOLS: <ls_return> 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 <ls_return>
WITH KEY retfield = 'SCI_DYNP-CHKV'.
IF sy-subrc = 0.
rv_check_variant = <ls_return>-fieldval.
ENDIF.
ENDMETHOD.
ENDCLASS.