mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Feature: Objects locked in multiple requests
If an object contains several parts (`LIMU` objects), for example, a function group with includes and several functions, it's possible that changes land in different transports. In such case, abapGit would show only one of the transport requests which is misleading. The change will show "MULTIPLE" instead of a transport number. Clicking on the link will display all involved transports requests and tasks in a popup. The feature is available in the repo view as well as in staging. Closes #2961
This commit is contained in:
parent
8e02089f8f
commit
b5f7cd3ed5
|
@ -89,6 +89,9 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
||||||
DATA: lv_object_lockable TYPE abap_bool,
|
DATA: lv_object_lockable TYPE abap_bool,
|
||||||
lv_locked TYPE abap_bool,
|
lv_locked TYPE abap_bool,
|
||||||
lv_transport_request TYPE trkorr,
|
lv_transport_request TYPE trkorr,
|
||||||
|
ls_tlock TYPE tlock,
|
||||||
|
lt_tlock TYPE STANDARD TABLE OF tlock WITH DEFAULT KEY,
|
||||||
|
lt_transports TYPE STANDARD TABLE OF trkorr WITH DEFAULT KEY,
|
||||||
lv_task TYPE trkorr,
|
lv_task TYPE trkorr,
|
||||||
lv_tr_object_name TYPE trobj_name.
|
lv_tr_object_name TYPE trobj_name.
|
||||||
|
|
||||||
|
@ -104,6 +107,8 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
||||||
we_locked = lv_locked
|
we_locked = lv_locked
|
||||||
we_lock_order = lv_transport_request
|
we_lock_order = lv_transport_request
|
||||||
we_lock_task = lv_task
|
we_lock_task = lv_task
|
||||||
|
TABLES
|
||||||
|
wt_tlock = lt_tlock
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
empty_key = 1
|
empty_key = 1
|
||||||
no_systemname = 2
|
no_systemname = 2
|
||||||
|
@ -122,7 +127,15 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
||||||
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
|
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
LOOP AT lt_tlock INTO ls_tlock.
|
||||||
|
COLLECT ls_tlock-trkorr INTO lt_transports.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
IF lines( lt_transports ) = 1.
|
||||||
rv_transport = lv_transport_request.
|
rv_transport = lv_transport_request.
|
||||||
|
ELSE.
|
||||||
|
rv_transport = zif_abapgit_definitions=>c_multiple_transports.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -470,8 +483,12 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
||||||
WHERE object = ls_lock_key-obj
|
WHERE object = ls_lock_key-obj
|
||||||
AND hikey >= ls_lock_key-low
|
AND hikey >= ls_lock_key-low
|
||||||
AND lokey <= ls_lock_key-hi. "#EC PORTABLE
|
AND lokey <= ls_lock_key-hi. "#EC PORTABLE
|
||||||
|
IF lv_request IS INITIAL.
|
||||||
lv_request = <ls_tlock>-trkorr.
|
lv_request = <ls_tlock>-trkorr.
|
||||||
|
ELSE.
|
||||||
|
lv_request = zif_abapgit_definitions=>c_multiple_transports.
|
||||||
EXIT.
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true.
|
ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true.
|
||||||
lv_request = get_current_transport_from_db(
|
lv_request = get_current_transport_from_db(
|
||||||
|
|
|
@ -141,6 +141,8 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION
|
||||||
CLASS-METHODS render_transport
|
CLASS-METHODS render_transport
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_transport TYPE trkorr
|
!iv_transport TYPE trkorr
|
||||||
|
!iv_obj_type TYPE zif_abapgit_definitions=>ty_repo_item-obj_type OPTIONAL
|
||||||
|
!iv_obj_name TYPE zif_abapgit_definitions=>ty_repo_item-obj_name OPTIONAL
|
||||||
!iv_interactive TYPE abap_bool DEFAULT abap_true
|
!iv_interactive TYPE abap_bool DEFAULT abap_true
|
||||||
!iv_icon_only TYPE abap_bool DEFAULT abap_false
|
!iv_icon_only TYPE abap_bool DEFAULT abap_false
|
||||||
RETURNING
|
RETURNING
|
||||||
|
@ -1279,6 +1281,10 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
|
||||||
|
|
||||||
lv_jump = |{ zif_abapgit_definitions=>c_action-jump_transport }?transport={ iv_transport }|.
|
lv_jump = |{ zif_abapgit_definitions=>c_action-jump_transport }?transport={ iv_transport }|.
|
||||||
|
|
||||||
|
IF iv_obj_type IS NOT INITIAL AND iv_obj_name IS NOT INITIAL.
|
||||||
|
lv_jump = lv_jump && |&type={ iv_obj_type }&name={ iv_obj_name }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
IF iv_icon_only = abap_true.
|
IF iv_icon_only = abap_true.
|
||||||
ri_html->add_a( iv_act = lv_jump
|
ri_html->add_a( iv_act = lv_jump
|
||||||
iv_title = |Transport { iv_transport }|
|
iv_title = |Transport { iv_transport }|
|
||||||
|
|
|
@ -981,7 +981,10 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
|
||||||
|
|
||||||
ri_html->add( '<td class="transport">' ).
|
ri_html->add( '<td class="transport">' ).
|
||||||
|
|
||||||
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_transport( is_item-transport ) ).
|
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_transport(
|
||||||
|
iv_transport = is_item-transport
|
||||||
|
iv_obj_type = is_item-obj_type
|
||||||
|
iv_obj_name = is_item-obj_name ) ).
|
||||||
|
|
||||||
ri_html->add( '</td>' ).
|
ri_html->add( '</td>' ).
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,7 @@ ENDCLASS.
|
||||||
|
|
||||||
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
|
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
|
||||||
DATA lv_ts TYPE timestamp.
|
DATA lv_ts TYPE timestamp.
|
||||||
|
@ -439,7 +440,10 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
|
||||||
ri_html->add( '</td>' ).
|
ri_html->add( '</td>' ).
|
||||||
|
|
||||||
ri_html->add( '<td class="transport">' ).
|
ri_html->add( '<td class="transport">' ).
|
||||||
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_transport( iv_transport ) ).
|
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_transport(
|
||||||
|
iv_transport = iv_transport
|
||||||
|
iv_obj_type = is_item-obj_type
|
||||||
|
iv_obj_name = is_item-obj_name ) ).
|
||||||
ri_html->add( '</td>' ).
|
ri_html->add( '</td>' ).
|
||||||
|
|
||||||
ri_html->add( '<td class="status">?</td>' ).
|
ri_html->add( '<td class="status">?</td>' ).
|
||||||
|
|
|
@ -120,6 +120,8 @@ CLASS zcl_abapgit_gui_router DEFINITION
|
||||||
CLASS-METHODS jump_display_transport
|
CLASS-METHODS jump_display_transport
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_transport TYPE trkorr
|
!iv_transport TYPE trkorr
|
||||||
|
iv_obj_type TYPE tadir-object OPTIONAL
|
||||||
|
iv_obj_name TYPE tadir-obj_name OPTIONAL
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
CLASS-METHODS jump_display_user
|
CLASS-METHODS jump_display_user
|
||||||
|
@ -498,20 +500,38 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
||||||
METHOD jump_display_transport.
|
METHOD jump_display_transport.
|
||||||
|
|
||||||
DATA:
|
DATA:
|
||||||
|
ls_e071 TYPE e071,
|
||||||
lv_adt_link TYPE string,
|
lv_adt_link TYPE string,
|
||||||
lv_adt_jump_enabled TYPE abap_bool.
|
lv_adt_jump_enabled TYPE abap_bool.
|
||||||
|
|
||||||
lv_adt_jump_enabled = zcl_abapgit_persist_factory=>get_settings( )->read( )->get_adt_jump_enabled( ).
|
lv_adt_jump_enabled = zcl_abapgit_persist_factory=>get_settings( )->read( )->get_adt_jump_enabled( ).
|
||||||
IF lv_adt_jump_enabled = abap_true.
|
IF lv_adt_jump_enabled = abap_true AND iv_transport <> zif_abapgit_definitions=>c_multiple_transports.
|
||||||
TRY.
|
TRY.
|
||||||
lv_adt_link = zcl_abapgit_adt_link=>link_transport( iv_transport ).
|
lv_adt_link = zcl_abapgit_adt_link=>link_transport( iv_transport ).
|
||||||
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = lv_adt_link ).
|
zcl_abapgit_ui_factory=>get_frontend_services( )->execute( iv_document = lv_adt_link ).
|
||||||
|
RETURN.
|
||||||
CATCH zcx_abapgit_exception.
|
CATCH zcx_abapgit_exception.
|
||||||
" Fallback if ADT link execution failed or was cancelled
|
" Fallback if ADT link execution failed or was cancelled
|
||||||
CALL FUNCTION 'TR_DISPLAY_REQUEST'
|
|
||||||
EXPORTING
|
|
||||||
i_trkorr = iv_transport.
|
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF iv_transport = zif_abapgit_definitions=>c_multiple_transports.
|
||||||
|
ls_e071-pgmid = 'R3TR'.
|
||||||
|
ls_e071-object = iv_obj_type.
|
||||||
|
ls_e071-obj_name = iv_obj_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'TR_SHOW_OBJECT_LOCKS'
|
||||||
|
EXPORTING
|
||||||
|
iv_e071 = ls_e071
|
||||||
|
EXCEPTIONS
|
||||||
|
object_not_lockable = 1
|
||||||
|
empty_key = 2
|
||||||
|
unknown_object = 3
|
||||||
|
unallowed_locks = 4
|
||||||
|
OTHERS = 5.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise_t100( ).
|
||||||
|
ENDIF.
|
||||||
ELSE.
|
ELSE.
|
||||||
CALL FUNCTION 'TR_DISPLAY_REQUEST'
|
CALL FUNCTION 'TR_DISPLAY_REQUEST'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -732,7 +752,10 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
|
||||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
||||||
|
|
||||||
WHEN zif_abapgit_definitions=>c_action-jump_transport.
|
WHEN zif_abapgit_definitions=>c_action-jump_transport.
|
||||||
jump_display_transport( |{ ii_event->query( )->get( 'TRANSPORT' ) }| ).
|
jump_display_transport(
|
||||||
|
iv_transport = |{ ii_event->query( )->get( 'TRANSPORT' ) }|
|
||||||
|
iv_obj_type = |{ ii_event->query( )->get( 'TYPE' ) }|
|
||||||
|
iv_obj_name = |{ ii_event->query( )->get( 'NAME' ) }| ).
|
||||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
||||||
|
|
||||||
WHEN zif_abapgit_definitions=>c_action-jump_user.
|
WHEN zif_abapgit_definitions=>c_action-jump_user.
|
||||||
|
|
|
@ -415,4 +415,7 @@ INTERFACE zif_abapgit_definitions
|
||||||
use_lxe TYPE abap_bool,
|
use_lxe TYPE abap_bool,
|
||||||
END OF ty_i18n_params .
|
END OF ty_i18n_params .
|
||||||
TYPES ty_trrngtrkor_tt TYPE RANGE OF trkorr.
|
TYPES ty_trrngtrkor_tt TYPE RANGE OF trkorr.
|
||||||
|
|
||||||
|
CONSTANTS c_multiple_transports TYPE trkorr VALUE 'MULTIPLE'.
|
||||||
|
|
||||||
ENDINTERFACE.
|
ENDINTERFACE.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user