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
This commit is contained in:
Christian Günter 2017-10-10 17:29:12 +02:00 committed by Lars Hvam
parent 27561e2884
commit f31a0cfbbe
5 changed files with 228 additions and 106 deletions

View File

@ -12,7 +12,8 @@ CLASS lcl_objects IMPLEMENTATION.
METHOD warning_overwrite. METHOD warning_overwrite.
DATA: lt_results_overwrite LIKE ct_results, 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: <ls_result> LIKE LINE OF ct_results. FIELD-SYMBOLS: <ls_result> LIKE LINE OF ct_results.
@ -31,8 +32,20 @@ CLASS lcl_objects IMPLEMENTATION.
ENDLOOP. ENDLOOP.
IF lines( lt_results_overwrite ) > 0. 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 "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 <ls_result>. LOOP AT lt_results_overwrite ASSIGNING <ls_result>.
READ TABLE lt_confirmed_overwrite TRANSPORTING NO FIELDS READ TABLE lt_confirmed_overwrite TRANSPORTING NO FIELDS

View File

@ -77,24 +77,22 @@ CLASS lcl_popups DEFINITION FINAL.
lcx_cancel, lcx_cancel,
popup_to_select_transports popup_to_select_transports
RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers, RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers,
popup_select_obj_overwrite popup_to_select_from_list
IMPORTING it_list TYPE zif_abapgit_definitions=>ty_results_tt IMPORTING it_list TYPE STANDARD TABLE
RETURNING VALUE(rt_list) TYPE zif_abapgit_definitions=>ty_results_tt i_header_text TYPE csequence
RAISING zcx_abapgit_exception. i_select_column_text TYPE csequence
it_columns_to_display TYPE stringtab
EXPORTING VALUE(et_list) TYPE STANDARD TABLE.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY. TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
TYPES: BEGIN OF t_popup_select_list, CONSTANTS: co_fieldname_selected TYPE lvc_fname VALUE `SELECTED`.
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.
CLASS-DATA: 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: CLASS-METHODS:
add_field add_field
@ -105,16 +103,22 @@ CLASS lcl_popups DEFINITION FINAL.
iv_field_attr TYPE sval-field_attr DEFAULT '' iv_field_attr TYPE sval-field_attr DEFAULT ''
CHANGING ct_fields TYPE ty_sval_tt, CHANGING ct_fields TYPE ty_sval_tt,
on_select_list_link_click create_new_table
FOR EVENT link_click OF cl_salv_events_table
IMPORTING IMPORTING
!row it_list TYPE STANDARD TABLE,
!column,
on_select_list_function_click get_selected_rows
FOR EVENT added_function OF cl_salv_events_table EXPORTING
et_list TYPE INDEX TABLE,
on_select_list_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING 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. ENDCLASS.
@ -727,35 +731,36 @@ CLASS lcl_popups IMPLEMENTATION.
rs_transport_branch-commit_text = <ls_field>-value. rs_transport_branch-commit_text = <ls_field>-value.
ENDMETHOD. ENDMETHOD.
METHOD popup_select_obj_overwrite. METHOD popup_to_select_from_list.
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.
LOOP AT it_list INTO ls_list. DATA:
MOVE-CORRESPONDING ls_list TO ls_popup_list. lo_events TYPE REF TO cl_salv_events_table,
APPEND ls_popup_list TO lt_popup_list. lo_columns TYPE REF TO cl_salv_columns_table,
ENDLOOP. 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: <table> TYPE STANDARD TABLE.
CLEAR: et_list.
create_new_table( it_list = it_list ).
ASSIGN mr_table->* TO <table>.
ASSERT sy-subrc = 0.
TRY. TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = mo_select_list_popup cl_salv_table=>factory( IMPORTING r_salv_table = mo_select_list_popup
CHANGING t_table = lt_popup_list ). CHANGING t_table = <table> ).
GET REFERENCE OF lt_popup_list INTO mtr_select_list.
mo_select_list_popup->set_screen_status( pfstatus = '102' mo_select_list_popup->set_screen_status( pfstatus = '102'
report = 'SAPMSVIM' ). report = 'SAPMSVIM' ).
mo_select_list_popup->set_screen_popup( start_column = 1 mo_select_list_popup->set_screen_popup( start_column = 1
end_column = 65 end_column = 65
start_line = 1 start_line = 1
end_line = 20 ). end_line = 20 ).
lo_events = mo_select_list_popup->get_event( ). lo_events = mo_select_list_popup->get_event( ).
@ -764,7 +769,7 @@ CLASS lcl_popups IMPLEMENTATION.
CREATE OBJECT lo_table_header CREATE OBJECT lo_table_header
EXPORTING 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 ). mo_select_list_popup->set_top_of_list( lo_table_header ).
@ -773,21 +778,23 @@ CLASS lcl_popups IMPLEMENTATION.
lt_columns = lo_columns->get( ). lt_columns = lo_columns->get( ).
LOOP AT lt_columns INTO ls_column. LOOP AT lt_columns INTO ls_column.
CASE ls_column-columnname.
WHEN 'OBJ_TYPE' OR 'OBJ_NAME'.
WHEN 'SELECTED'. IF ls_column-columnname = co_fieldname_selected.
lo_column ?= ls_column-r_column. lo_column ?= ls_column-r_column.
lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
lo_column->set_output_length( 20 ). lo_column->set_output_length( 20 ).
lo_column->set_short_text( 'Overwrite?' ). lo_column->set_short_text( |{ i_select_column_text }| ).
lo_column->set_medium_text( 'Overwr. Lcl Object?' ). lo_column->set_medium_text( |{ i_select_column_text }| ).
lo_column->set_long_text( 'Overwrite Local Object?' ). lo_column->set_long_text( |{ i_select_column_text }| ).
CONTINUE.
ENDIF.
WHEN OTHERS. READ TABLE it_columns_to_display TRANSPORTING NO FIELDS
ls_column-r_column->set_technical( abap_true ). WITH KEY table_line = ls_column-columnname.
IF sy-subrc <> 0.
ls_column-r_column->set_technical( abap_true ).
ENDIF.
ENDCASE.
ENDLOOP. ENDLOOP.
mo_select_list_popup->display( ). mo_select_list_popup->display( ).
@ -796,20 +803,71 @@ CLASS lcl_popups IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Error from POPUP_SELECT_OBJ_OVERWRITE' ). zcx_abapgit_exception=>raise( 'Error from POPUP_SELECT_OBJ_OVERWRITE' ).
ENDTRY. ENDTRY.
LOOP AT lt_popup_list INTO ls_popup_list WHERE selected = abap_true. get_selected_rows(
MOVE-CORRESPONDING ls_popup_list TO ls_list. IMPORTING
APPEND ls_list TO rt_list. et_list = et_list ).
ENDLOOP.
CLEAR: CLEAR: mo_select_list_popup,
mo_select_list_popup, mr_table,
mtr_select_list. mo_table_descr.
ENDMETHOD. 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: <table> TYPE STANDARD TABLE,
<component> TYPE abap_componentdescr,
<line> TYPE data,
<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 <component> INDEX 1.
ASSERT sy-subrc = 0.
<component>-name = co_fieldname_selected.
<component>-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 <table>.
ASSERT sy-subrc = 0.
CREATE DATA lr_struct TYPE HANDLE struct_descr.
ASSIGN lr_struct->* TO <line>.
ASSERT sy-subrc = 0.
LOOP AT it_list ASSIGNING <data>.
CLEAR: <line>.
MOVE-CORRESPONDING <data> TO <line>.
INSERT <line> INTO TABLE <table>.
ENDLOOP.
ENDMETHOD.
METHOD on_select_list_function_click. METHOD on_select_list_function_click.
DATA:
lsr_line TYPE REF TO t_popup_select_list. FIELD-SYMBOLS: <table> TYPE STANDARD TABLE,
<line> TYPE any,
<selected> TYPE flag.
ASSIGN mr_table->* TO <table>.
ASSERT sy-subrc = 0.
CASE e_salv_function. CASE e_salv_function.
WHEN 'O.K.'. WHEN 'O.K.'.
@ -817,44 +875,106 @@ CLASS lcl_popups IMPLEMENTATION.
WHEN 'ABR'. WHEN 'ABR'.
"Canceled: clear list to overwrite nothing "Canceled: clear list to overwrite nothing
CLEAR mtr_select_list->*. CLEAR <table>.
mo_select_list_popup->close_screen( ). mo_select_list_popup->close_screen( ).
WHEN 'SALL'. WHEN 'SALL'.
LOOP AT mtr_select_list->* REFERENCE INTO lsr_line.
lsr_line->selected = abap_true. LOOP AT <table> ASSIGNING <line>.
ASSIGN COMPONENT co_fieldname_selected
OF STRUCTURE <line>
TO <selected>.
ASSERT sy-subrc = 0.
<selected> = abap_true.
ENDLOOP. ENDLOOP.
mo_select_list_popup->refresh( ). mo_select_list_popup->refresh( ).
WHEN 'DSEL'. WHEN 'DSEL'.
LOOP AT mtr_select_list->* REFERENCE INTO lsr_line.
lsr_line->selected = abap_false. LOOP AT <table> ASSIGNING <line>.
ASSIGN COMPONENT co_fieldname_selected
OF STRUCTURE <line>
TO <selected>.
ASSERT sy-subrc = 0.
<selected> = abap_false.
ENDLOOP. ENDLOOP.
mo_select_list_popup->refresh( ). mo_select_list_popup->refresh( ).
WHEN OTHERS. WHEN OTHERS.
CLEAR mtr_select_list->*. CLEAR <table>.
mo_select_list_popup->close_screen( ). mo_select_list_popup->close_screen( ).
ENDCASE. ENDCASE.
ENDMETHOD. ENDMETHOD.
METHOD on_select_list_link_click. METHOD on_select_list_link_click.
DATA:
lsr_line TYPE REF TO t_popup_select_list, DATA: lv_line TYPE sytabix.
lv_line TYPE sytabix.
FIELD-SYMBOLS: <table> TYPE STANDARD TABLE,
<line> TYPE any,
<selected> TYPE flag.
ASSIGN mr_table->* TO <table>.
ASSERT sy-subrc = 0.
lv_line = row. lv_line = row.
READ TABLE mtr_select_list->* REFERENCE INTO lsr_line INDEX lv_line. READ TABLE <table> ASSIGNING <line>
INDEX lv_line.
IF sy-subrc = 0. IF sy-subrc = 0.
IF lsr_line->selected = abap_true.
lsr_line->selected = abap_false. ASSIGN COMPONENT co_fieldname_selected
OF STRUCTURE <line>
TO <selected>.
ASSERT sy-subrc = 0.
IF <selected> = abap_true.
<selected> = abap_false.
ELSE. ELSE.
lsr_line->selected = abap_true. <selected> = abap_true.
ENDIF. ENDIF.
ENDIF. ENDIF.
mo_select_list_popup->refresh( ). mo_select_list_popup->refresh( ).
ENDMETHOD. ENDMETHOD.
METHOD get_selected_rows.
DATA: lv_condition TYPE string,
lr_exporting TYPE REF TO data.
FIELD-SYMBOLS: <ls_exporting> TYPE any,
<table> TYPE STANDARD TABLE,
<ls_line> TYPE any.
lv_condition = |{ co_fieldname_selected } = ABAP_TRUE|.
ASSIGN mr_table->* TO <table>.
ASSERT sy-subrc = 0.
CREATE DATA lr_exporting LIKE LINE OF et_list.
ASSIGN lr_exporting->* TO <ls_exporting>.
LOOP AT <table> ASSIGNING <ls_line>
WHERE (lv_condition).
CLEAR: <ls_exporting>.
MOVE-CORRESPONDING <ls_line> TO <ls_exporting>.
APPEND <ls_exporting> TO et_list.
ENDLOOP.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -133,9 +133,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
RAISING zcx_abapgit_exception, RAISING zcx_abapgit_exception,
get_unnecessary_local_objs get_unnecessary_local_objs
RETURNING VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>TY_TADIR_TT RETURNING VALUE(rt_unnecessary_local_objects) TYPE zif_abapgit_definitions=>TY_TADIR_TT
RAISING zcx_abapgit_exception, RAISING zcx_abapgit_exception.
delete_unnecessary_local_objs
RAISING zcx_abapgit_exception lcx_cancel.
PRIVATE SECTION. PRIVATE SECTION.
DATA: DATA:

View File

@ -322,21 +322,6 @@ CLASS lcl_repo_online IMPLEMENTATION.
ENDMETHOD. " delete_initial_online_repo 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. METHOD get_unnecessary_local_objs.
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt, DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,

View File

@ -49,7 +49,9 @@ CLASS lcl_services_git IMPLEMENTATION.
DATA: lo_repo TYPE REF TO lcl_repo_online, DATA: lo_repo TYPE REF TO lcl_repo_online,
lv_answer TYPE c LENGTH 1, 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 ). 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. IF lines( lt_unnecessary_local_objs ) > 0.
lv_answer = lcl_popups=>popup_to_confirm( INSERT `OBJECT` INTO TABLE lt_columns.
titlebar = 'Question' INSERT `OBJ_NAME` INTO TABLE lt_columns.
text_question = |Delete { lines( lt_unnecessary_local_objs ) } unnecessary local objects?|
text_button_1 = 'Yes' lcl_popups=>popup_to_select_from_list(
icon_button_1 = 'ICON_OKAY' EXPORTING
text_button_2 = 'No' it_list = lt_unnecessary_local_objs
icon_button_2 = 'ICON_CANCEL' i_header_text = |Which unnecessary objects should be deleted?|
default_button = '2' i_select_column_text = 'Delete?'
display_cancel_button = abap_false ). "#EC NOTEXT 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.
ENDIF. ENDIF.