add label F4 value help (#5891)

Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
Christian Günter 2022-11-30 18:29:40 +01:00 committed by GitHub
parent 693a264d70
commit c40406930a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 281 additions and 8 deletions

View File

@ -272,6 +272,9 @@ CLASS lcl_repo_mock IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~validate_url.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~get_label_list.
ENDMETHOD.
ENDCLASS.
CLASS lcl_local_file_builder DEFINITION FINAL.

View File

@ -676,4 +676,37 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_repo_srv~get_label_list.
DATA:
lt_repo TYPE zif_abapgit_repo_srv=>ty_repo_list,
ls_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings,
lt_labels TYPE string_table,
ls_label LIKE LINE OF rt_labels.
FIELD-SYMBOLS:
<ls_repo> TYPE REF TO zif_abapgit_repo,
<lv_label> TYPE LINE OF string_table.
lt_repo = zif_abapgit_repo_srv~list( ).
LOOP AT lt_repo ASSIGNING <ls_repo>.
ls_local_settings = <ls_repo>->get_local_settings( ).
lt_labels = zcl_abapgit_repo_labels=>split( ls_local_settings-labels ).
LOOP AT lt_labels ASSIGNING <lv_label>.
ls_label-label = <lv_label>.
INSERT ls_label INTO TABLE rt_labels.
ENDLOOP.
ENDLOOP.
SORT rt_labels.
DELETE ADJACENT DUPLICATES FROM rt_labels.
ENDMETHOD.
ENDCLASS.

View File

@ -3,7 +3,13 @@ INTERFACE zif_abapgit_repo_srv
TYPES:
ty_repo_list TYPE STANDARD TABLE OF REF TO zif_abapgit_repo WITH DEFAULT KEY .
ty_repo_list TYPE STANDARD TABLE OF REF TO zif_abapgit_repo WITH DEFAULT KEY,
BEGIN OF ty_label,
label TYPE string,
END OF ty_label,
ty_labels TYPE STANDARD TABLE OF ty_label WITH NON-UNIQUE DEFAULT KEY
WITH NON-UNIQUE SORTED KEY key_label COMPONENTS label.
METHODS init.
METHODS delete
@ -99,4 +105,10 @@ INTERFACE zif_abapgit_repo_srv
!ev_reason TYPE string
RAISING
zcx_abapgit_exception .
METHODS get_label_list
RETURNING
VALUE(rt_labels) TYPE ty_labels
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -35,6 +35,7 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION
BEGIN OF c_event,
go_back TYPE string VALUE 'go-back',
choose_package TYPE string VALUE 'choose-package',
choose_labels TYPE string VALUE 'choose-labels',
create_package TYPE string VALUE 'create-package',
add_offline_repo TYPE string VALUE 'add-repo-offline',
END OF c_event .
@ -55,6 +56,11 @@ CLASS zcl_abapgit_gui_page_addofflin DEFINITION
METHODS get_form_schema
RETURNING
VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form .
METHODS choose_labels
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -119,6 +125,7 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION.
iv_value = zif_abapgit_dot_abapgit=>c_folder_logic-mixed
)->text(
iv_name = c_id-labels
iv_side_action = c_event-choose_labels
iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")|
iv_hint = 'Comma-separated labels for grouping and repo organization (optional)'
)->checkbox(
@ -163,6 +170,14 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION.
iv_val = |Invalid folder logic { io_form_data->get( c_id-folder_logic ) }| ).
ENDIF.
TRY.
zcl_abapgit_repo_labels=>validate( io_form_data->get( c_id-labels ) ).
CATCH zcx_abapgit_exception INTO lx_err.
ro_validation_log->set(
iv_key = c_id-labels
iv_val = lx_err->get_text( ) ).
ENDTRY.
ENDMETHOD.
@ -202,6 +217,11 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
ENDIF.
WHEN c_event-choose_labels.
choose_labels( ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_event-add_offline_repo.
mo_validation_log = validate_form( mo_form_data ).
@ -235,4 +255,22 @@ CLASS zcl_abapgit_gui_page_addofflin IMPLEMENTATION.
ri_html->add( '</div>' ).
ENDMETHOD.
METHOD choose_labels.
DATA:
lv_old_labels TYPE string,
lv_new_labels TYPE string.
lv_old_labels = mo_form_data->get( c_id-labels ).
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
mo_form_data->set(
iv_key = c_id-labels
iv_val = lv_new_labels ).
ENDMETHOD.
ENDCLASS.

View File

@ -40,6 +40,7 @@ CLASS zcl_abapgit_gui_page_addonline DEFINITION
choose_package TYPE string VALUE 'choose-package',
create_package TYPE string VALUE 'create-package',
choose_branch TYPE string VALUE 'choose-branch',
choose_labels TYPE string VALUE 'choose-labels',
add_online_repo TYPE string VALUE 'add-repo-online',
END OF c_event.
@ -59,6 +60,11 @@ CLASS zcl_abapgit_gui_page_addonline DEFINITION
METHODS get_form_schema
RETURNING
VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
METHODS choose_labels
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -135,6 +141,7 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
iv_hint = 'Name to show instead of original repository name (optional)'
)->text(
iv_name = c_id-labels
iv_side_action = c_event-choose_labels
iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")|
iv_hint = 'Comma-separated labels for grouping and repo organization (optional)'
)->checkbox(
@ -195,6 +202,14 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
iv_val = |Invalid folder logic { io_form_data->get( c_id-folder_logic ) }| ).
ENDIF.
TRY.
zcl_abapgit_repo_labels=>validate( io_form_data->get( c_id-labels ) ).
CATCH zcx_abapgit_exception INTO lx_err.
ro_validation_log->set(
iv_key = c_id-labels
iv_val = lx_err->get_text( ) ).
ENDTRY.
ENDMETHOD.
@ -260,6 +275,11 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
ENDIF.
WHEN c_event-choose_labels.
choose_labels( ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_event-add_online_repo.
mo_validation_log = validate_form( mo_form_data ).
@ -292,4 +312,22 @@ CLASS zcl_abapgit_gui_page_addonline IMPLEMENTATION.
io_validation_log = mo_validation_log ) ).
ri_html->add( '</div>' ).
ENDMETHOD.
METHOD choose_labels.
DATA:
lv_old_labels TYPE string,
lv_new_labels TYPE string.
lv_old_labels = mo_form_data->get( c_id-labels ).
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
mo_form_data->set(
iv_key = c_id-labels
iv_val = lv_new_labels ).
ENDMETHOD.
ENDCLASS.

View File

@ -40,7 +40,8 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
END OF c_id .
CONSTANTS:
BEGIN OF c_event,
save TYPE string VALUE 'save',
save TYPE string VALUE 'save',
choose_labels TYPE string VALUE 'choose-labels',
END OF c_event .
DATA mo_form TYPE REF TO zcl_abapgit_html_form .
@ -69,11 +70,15 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
METHODS save_settings
RAISING
zcx_abapgit_exception .
METHODS choose_labels
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_sett_locl IMPLEMENTATION.
METHOD constructor.
@ -124,6 +129,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
iv_hint = 'Name to show instead of original repo name (optional)'
)->text(
iv_name = c_id-labels
iv_side_action = c_event-choose_labels
iv_label = |Labels (comma-separated, allowed chars: "{ zcl_abapgit_repo_labels=>c_allowed_chars }")|
iv_hint = 'Comma-separated labels for grouping and repo organization (optional)'
)->checkbox(
@ -268,6 +274,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-go_back.
rs_handled-state = mo_form_util->exit( mo_form_data ).
WHEN c_event-choose_labels.
choose_labels( ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_event-save.
" Validate form entries before saving
mo_validation_log = validate_form( mo_form_data ).
@ -307,4 +318,22 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
ri_html->add( `</div>` ).
ENDMETHOD.
METHOD choose_labels.
DATA:
lv_old_labels TYPE string,
lv_new_labels TYPE string.
lv_old_labels = mo_form_data->get( c_id-labels ).
lv_new_labels = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_labels( lv_old_labels ).
mo_form_data->set(
iv_key = c_id-labels
iv_val = lv_new_labels ).
ENDMETHOD.
ENDCLASS.

View File

@ -100,6 +100,9 @@ CLASS ltcl_popups_mock IMPLEMENTATION.
METHOD zif_abapgit_popups~tag_list_popup.
ENDMETHOD.
METHOD zif_abapgit_popups~popup_to_select_labels.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_test_form DEFINITION

View File

@ -65,16 +65,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 .
@ -975,7 +975,10 @@ CLASS zcl_abapgit_popups IMPLEMENTATION.
lo_table_header TYPE REF TO cl_salv_form_text.
FIELD-SYMBOLS: <lt_table> TYPE STANDARD TABLE,
<ls_column_to_display> TYPE zif_abapgit_definitions=>ty_alv_column.
<ls_column_to_display> TYPE zif_abapgit_definitions=>ty_alv_column,
<lv_row> TYPE i,
<ls_line> TYPE any,
<lv_selected> TYPE data.
CLEAR: et_list.
@ -984,6 +987,23 @@ CLASS zcl_abapgit_popups IMPLEMENTATION.
ASSIGN mr_table->* TO <lt_table>.
ASSERT sy-subrc = 0.
LOOP AT it_preselected_rows ASSIGNING <lv_row>.
READ TABLE <lt_table> INDEX <lv_row> ASSIGNING <ls_line>.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Preselected row { <lv_row> } doesn't exist| ).
ENDIF.
ASSIGN
COMPONENT c_fieldname_selected
OF STRUCTURE <ls_line>
TO <lv_selected>.
ASSERT sy-subrc = 0.
<lv_selected> = abap_true.
ENDLOOP.
ms_position = center(
iv_width = iv_end_column - iv_start_column
iv_height = iv_end_line - iv_start_line ).
@ -1278,4 +1298,86 @@ 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.
ENDCLASS.

View File

@ -419,4 +419,8 @@ CLASS ltcl_popups_mock IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_popups~popup_to_select_labels.
ENDMETHOD.
ENDCLASS.

View File

@ -88,6 +88,10 @@ CLASS ltcl_abapgit_popups_mock IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_popups~popup_to_select_labels.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_no_dependency_injection IMPLEMENTATION.

View File

@ -3,7 +3,8 @@ INTERFACE zif_abapgit_popups
TYPES:
ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY .
ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY,
ty_rows TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.
CONSTANTS c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT.
@ -99,6 +100,7 @@ INTERFACE zif_abapgit_popups
!iv_selection_mode TYPE salv_de_constant DEFAULT if_salv_c_selection_mode=>multiple
!iv_select_column_text TYPE csequence DEFAULT space
!it_columns_to_display TYPE zif_abapgit_definitions=>ty_alv_column_tt
!it_preselected_rows TYPE ty_rows OPTIONAL
EXPORTING
VALUE(et_list) TYPE STANDARD TABLE
RAISING
@ -127,4 +129,9 @@ INTERFACE zif_abapgit_popups
METHODS popup_select_wb_tc_tr_and_tsk
RETURNING VALUE(rt_r_trkorr) TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt
RAISING zcx_abapgit_exception.
METHODS popup_to_select_labels
IMPORTING iv_labels TYPE string OPTIONAL
RETURNING VALUE(rv_labels) TYPE string
RAISING zcx_abapgit_exception.
ENDINTERFACE.