mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
check variant popup refactoring (#6350)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
parent
402748d966
commit
abbfdfd68f
|
@ -12,11 +12,7 @@ CLASS zcl_abapgit_code_inspector DEFINITION
|
|||
!iv_package TYPE devclass
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
CLASS-METHODS validate_check_variant
|
||||
IMPORTING
|
||||
!iv_check_variant_name TYPE sci_chkv
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
PROTECTED SECTION.
|
||||
DATA mv_package TYPE devclass .
|
||||
|
||||
|
@ -85,7 +81,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_CODE_INSPECTOR IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD cleanup.
|
||||
|
@ -316,24 +312,6 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_check_variant.
|
||||
|
||||
cl_ci_checkvariant=>get_ref(
|
||||
EXPORTING
|
||||
p_user = ''
|
||||
p_name = iv_check_variant_name
|
||||
EXCEPTIONS
|
||||
chkv_not_exists = 1
|
||||
missing_parameter = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |No valid check variant { iv_check_variant_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_code_inspector~get_summary.
|
||||
rv_summary = mv_summary.
|
||||
ENDMETHOD.
|
||||
|
@ -346,6 +324,25 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_code_inspector~list_global_variants.
|
||||
|
||||
DATA lt_result TYPE if_satc_ci_variant_access=>ty_variant_infos.
|
||||
FIELD-SYMBOLS <ls_result> LIKE LINE OF lt_result.
|
||||
FIELD-SYMBOLS <ls_list> LIKE LINE OF rt_list.
|
||||
|
||||
lt_result = cl_satc_db_access=>get_ci_variants_with_filter( sy-langu ).
|
||||
SORT lt_result BY name.
|
||||
|
||||
* convert types
|
||||
LOOP AT lt_result ASSIGNING <ls_result>.
|
||||
APPEND INITIAL LINE TO rt_list ASSIGNING <ls_list>.
|
||||
<ls_list>-name = <ls_result>-name.
|
||||
<ls_list>-description = <ls_result>-description.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_code_inspector~run.
|
||||
|
||||
DATA: lo_set TYPE REF TO cl_ci_objectset,
|
||||
|
@ -399,4 +396,22 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
|||
mv_summary = lo_timer->end( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_code_inspector~validate_check_variant.
|
||||
|
||||
cl_ci_checkvariant=>get_ref(
|
||||
EXPORTING
|
||||
p_user = ''
|
||||
p_name = iv_check_variant_name
|
||||
EXCEPTIONS
|
||||
chkv_not_exists = 1
|
||||
missing_parameter = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |No valid check variant { iv_check_variant_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -17,6 +17,13 @@ INTERFACE zif_abapgit_code_inspector
|
|||
|
||||
TYPES ty_results TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_variant,
|
||||
name TYPE sci_chkv,
|
||||
description TYPE string,
|
||||
END OF ty_variant.
|
||||
|
||||
TYPES ty_variants TYPE STANDARD TABLE OF ty_variant WITH DEFAULT KEY.
|
||||
|
||||
METHODS run
|
||||
IMPORTING
|
||||
!iv_variant TYPE sci_chkv
|
||||
|
@ -33,4 +40,14 @@ INTERFACE zif_abapgit_code_inspector
|
|||
METHODS get_summary
|
||||
RETURNING
|
||||
VALUE(rv_summary) TYPE string.
|
||||
|
||||
METHODS validate_check_variant
|
||||
IMPORTING
|
||||
!iv_check_variant_name TYPE sci_chkv
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS list_global_variants
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE ty_variants.
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -25,6 +25,8 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
|
|||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
DATA mo_popup_picklist TYPE REF TO zcl_abapgit_gui_picklist.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_id,
|
||||
local TYPE string VALUE 'local',
|
||||
|
@ -48,11 +50,9 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
|
|||
choose_labels TYPE string VALUE 'choose-labels',
|
||||
choose_check_variant TYPE string VALUE 'choose_check_variant',
|
||||
END OF c_event .
|
||||
|
||||
DATA mo_form TYPE REF TO zcl_abapgit_html_form .
|
||||
DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
|
||||
DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
|
||||
|
||||
DATA mo_repo TYPE REF TO zcl_abapgit_repo .
|
||||
DATA ms_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings .
|
||||
|
||||
|
@ -78,22 +78,26 @@ CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
|
|||
zcx_abapgit_exception .
|
||||
METHODS choose_labels
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
zcx_abapgit_exception .
|
||||
METHODS choose_check_variant
|
||||
IMPORTING
|
||||
iv_is_return TYPE abap_bool DEFAULT abap_false
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
zcx_abapgit_exception .
|
||||
METHODS choose_transport_request
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
zcx_abapgit_exception .
|
||||
METHODS choose_customizing_request
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
zcx_abapgit_exception .
|
||||
METHODS is_customizing_included
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
zcx_abapgit_exception .
|
||||
METHODS handle_picklist_state
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -103,14 +107,28 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
|
||||
METHOD choose_check_variant.
|
||||
|
||||
DATA: lv_check_variant TYPE sci_chkv.
|
||||
DATA ls_variant TYPE zif_abapgit_code_inspector=>ty_variant.
|
||||
DATA lv_popup_cancelled TYPE abap_bool.
|
||||
|
||||
lv_check_variant = zcl_abapgit_ui_factory=>get_popups( )->choose_code_insp_check_variant( ).
|
||||
IF iv_is_return = abap_false.
|
||||
|
||||
mo_popup_picklist = zcl_abapgit_popup_code_insp=>create(
|
||||
)->create_picklist(
|
||||
)->set_id( c_event-choose_check_variant
|
||||
)->set_in_page( abap_false ).
|
||||
|
||||
ELSE.
|
||||
|
||||
lv_popup_cancelled = mo_popup_picklist->was_cancelled( ).
|
||||
IF lv_popup_cancelled = abap_false.
|
||||
mo_popup_picklist->get_result_item( CHANGING cs_selected = ls_variant ).
|
||||
IF ls_variant IS NOT INITIAL.
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-code_inspector_check_variant
|
||||
iv_val = ls_variant-name ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF lv_check_variant IS NOT INITIAL.
|
||||
mo_form_data->set(
|
||||
iv_key = c_id-code_inspector_check_variant
|
||||
iv_val = lv_check_variant ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -278,6 +296,25 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD handle_picklist_state.
|
||||
|
||||
IF mo_popup_picklist IS BOUND AND
|
||||
( mo_popup_picklist->is_fulfilled( ) = abap_true OR mo_popup_picklist->is_in_page( ) = abap_false ).
|
||||
" Picklist is either fullfilled OR
|
||||
" it was on its own page and user went back from it via F3/ESC and the picklist had no "graceful back" handler
|
||||
CASE mo_popup_picklist->id( ).
|
||||
WHEN c_event-choose_check_variant.
|
||||
choose_check_variant( iv_is_return = abap_true ).
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_exception=>raise( |Unexpected picklist id { mo_popup_picklist->id( ) }| ).
|
||||
ENDCASE.
|
||||
|
||||
CLEAR mo_popup_picklist.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_customizing_included.
|
||||
|
||||
DATA lt_files TYPE zif_abapgit_definitions=>ty_files_item_tt.
|
||||
|
@ -404,7 +441,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
lv_check_variant = to_upper( io_form_data->get( c_id-code_inspector_check_variant ) ).
|
||||
IF lv_check_variant IS NOT INITIAL.
|
||||
TRY.
|
||||
zcl_abapgit_code_inspector=>validate_check_variant( lv_check_variant ).
|
||||
zcl_abapgit_factory=>get_code_inspector( mo_repo->get_package( )
|
||||
)->validate_check_variant( lv_check_variant ).
|
||||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
ro_validation_log->set(
|
||||
iv_key = c_id-code_inspector_check_variant
|
||||
|
@ -457,7 +495,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
WHEN c_event-choose_check_variant.
|
||||
|
||||
choose_check_variant( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
|
||||
WHEN c_event-save.
|
||||
" Validate form entries before saving
|
||||
|
@ -471,12 +508,26 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
|
||||
ENDCASE.
|
||||
|
||||
IF mo_popup_picklist IS BOUND. " Uniform popup state handling
|
||||
" This should happen only for a new popup because
|
||||
" on the first re-render main component event handling is blocked
|
||||
" and not called again until the popup distruction
|
||||
IF mo_popup_picklist->is_in_page( ) = abap_true.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
ELSE.
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page.
|
||||
rs_handled-page = zcl_abapgit_gui_page_hoc=>create(
|
||||
ii_child_component = mo_popup_picklist
|
||||
iv_show_as_modal = abap_true ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_renderable~render.
|
||||
|
||||
register_handlers( ).
|
||||
handle_picklist_state( ).
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
|
@ -493,5 +544,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETT_LOCL IMPLEMENTATION.
|
|||
|
||||
ri_html->add( `</div>` ).
|
||||
|
||||
IF mo_popup_picklist IS NOT BOUND OR mo_popup_picklist->is_in_page( ) = abap_false.
|
||||
register_handlers( ).
|
||||
ELSEIF mo_popup_picklist->is_in_page( ) = abap_true.
|
||||
" Block usual page events if the popup is an in-page popup
|
||||
ri_html->add( zcl_abapgit_gui_in_page_modal=>create( mo_popup_picklist ) ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
10
src/ui/popups/package.devc.xml
Normal file
10
src/ui/popups/package.devc.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DEVC>
|
||||
<CTEXT>abapGit - GUI Popups</CTEXT>
|
||||
</DEVC>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
63
src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap
Normal file
63
src/ui/popups/zcl_abapgit_popup_code_insp.clas.abap
Normal file
|
@ -0,0 +1,63 @@
|
|||
CLASS zcl_abapgit_popup_code_insp DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES zif_abapgit_gui_render_item .
|
||||
INTERFACES zif_abapgit_html_popup .
|
||||
|
||||
CLASS-METHODS create
|
||||
RETURNING
|
||||
VALUE(ri_popup) TYPE REF TO zif_abapgit_html_popup .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS fetch_list
|
||||
RETURNING
|
||||
VALUE(rt_list) TYPE zif_abapgit_code_inspector=>ty_variants
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_POPUP_CODE_INSP IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD create.
|
||||
CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_code_insp.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD fetch_list.
|
||||
|
||||
rt_list = zcl_abapgit_factory=>get_code_inspector( '$TMP' )->list_global_variants( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_gui_render_item~render.
|
||||
|
||||
FIELD-SYMBOLS <ls_item> TYPE LINE OF zif_abapgit_code_inspector=>ty_variants.
|
||||
|
||||
ASSIGN iv_item TO <ls_item>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ri_html = zcl_abapgit_html=>create( |<b>{ <ls_item>-name }</b> - { <ls_item>-description }| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_html_popup~create_picklist.
|
||||
|
||||
CREATE OBJECT ro_picklist
|
||||
EXPORTING
|
||||
iv_title = 'Choose Variant'
|
||||
it_list = fetch_list( )
|
||||
ii_item_renderer = me.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/ui/popups/zcl_abapgit_popup_code_insp.clas.xml
Normal file
16
src/ui/popups/zcl_abapgit_popup_code_insp.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_POPUP_CODE_INSP</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Select code inspector variant</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user