CTS integration (#2061)

* Implement facade for Change Transport System

* Render lock item in VIEW_REPO

* Add jump to SE01

* Display transport on stage page

* Optimize transport read on stage page

* Error handling CTS

* Fix indentation

* Disable transport column for local packages

* Code review changes
This commit is contained in:
Fabian Lupa 2018-11-09 05:36:44 +01:00 committed by Lars Hvam
parent 7cdbbc92b6
commit b08ee6a498
11 changed files with 413 additions and 68 deletions

View File

@ -34,6 +34,12 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
END OF ty_changed_by .
TYPES:
ty_changed_by_tt TYPE SORTED TABLE OF ty_changed_by WITH UNIQUE KEY item.
TYPES:
BEGIN OF ty_transport,
item TYPE zif_abapgit_definitions=>ty_item,
transport TYPE trkorr,
END OF ty_transport,
ty_transport_tt TYPE SORTED TABLE OF ty_transport WITH UNIQUE KEY item.
DATA mo_repo TYPE REF TO zcl_abapgit_repo_online .
DATA ms_files TYPE zif_abapgit_definitions=>ty_stage_files .
@ -45,6 +51,11 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
!it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
RETURNING
VALUE(rt_changed_by) TYPE ty_changed_by_tt .
METHODS find_transports
IMPORTING
it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
RETURNING
VALUE(rt_transports) TYPE ty_transport_tt.
METHODS render_list
RETURNING
VALUE(ro_html) TYPE REF TO zcl_abapgit_html .
@ -54,6 +65,7 @@ CLASS zcl_abapgit_gui_page_stage DEFINITION
!is_file TYPE zif_abapgit_definitions=>ty_file
!is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
!iv_changed_by TYPE xubname OPTIONAL
!iv_transport TYPE trkorr OPTIONAL
RETURNING
VALUE(ro_html) TYPE REF TO zcl_abapgit_html .
METHODS render_actions
@ -77,7 +89,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
METHOD build_menu.
@ -135,6 +147,43 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ENDMETHOD.
METHOD find_transports.
DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api,
ls_new LIKE LINE OF rt_transports.
FIELD-SYMBOLS: <ls_local> LIKE LINE OF it_local,
<ls_new> LIKE LINE OF rt_transports.
li_cts_api = zcl_abapgit_factory=>get_cts_api( ).
TRY.
LOOP AT it_local ASSIGNING <ls_local> WHERE item IS NOT INITIAL.
IF <ls_local>-item-obj_type IS NOT INITIAL AND
<ls_local>-item-obj_name IS NOT INITIAL AND
<ls_local>-item-devclass IS NOT INITIAL.
IF li_cts_api->is_chrec_possible_for_package( <ls_local>-item-devclass ) = abap_false.
EXIT. " Assume all other objects are also in packages without change recording
ELSEIF li_cts_api->is_object_type_lockable( <ls_local>-item-obj_type ) = abap_true AND
li_cts_api->is_object_locked_in_transport( iv_object_type = <ls_local>-item-obj_type
iv_object_name = <ls_local>-item-obj_name ) = abap_true.
ls_new-item = <ls_local>-item.
ls_new-transport = li_cts_api->get_current_transport_for_obj(
iv_object_type = <ls_local>-item-obj_type
iv_object_name = <ls_local>-item-obj_name
iv_resolve_task_to_request = abap_false ).
INSERT ls_new INTO TABLE rt_transports.
ENDIF.
ENDIF.
ENDLOOP.
CATCH zcx_abapgit_exception.
ASSERT 1 = 2.
ENDTRY.
ENDMETHOD.
METHOD get_page_patch.
@ -289,10 +338,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD render_file.
DATA: lv_param TYPE string,
lv_filename TYPE string.
lv_filename TYPE string,
lv_transport_string TYPE string,
lv_transport_html TYPE string.
CREATE OBJECT ro_html.
lv_transport_string = iv_transport.
lv_filename = is_file-path && is_file-filename.
* make sure whitespace is preserved in the DOM
REPLACE ALL OCCURRENCES OF ` ` IN lv_filename WITH '&nbsp;'.
@ -308,13 +361,21 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
lv_filename = zcl_abapgit_html=>a(
iv_txt = lv_filename
iv_act = |{ zif_abapgit_definitions=>c_action-go_diff }?{ lv_param }| ).
IF iv_transport IS NOT INITIAL.
lv_transport_html = zcl_abapgit_html=>a(
iv_txt = lv_transport_string
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?{ iv_transport }| ).
ENDIF.
ro_html->add( |<td class="type">{ is_item-obj_type }</td>| ).
ro_html->add( |<td class="name">{ lv_filename }</td>| ).
ro_html->add( |<td class="user">{ iv_changed_by }</td>| ).
ro_html->add( |<td class="transport">{ lv_transport_html }</td>| ).
WHEN 'remote'.
ro_html->add( '<td class="type">-</td>' ). " Dummy for object type
ro_html->add( |<td class="name">{ lv_filename }</td>| ).
ro_html->add( '<td></td>' ). " Dummy for changed-by
ro_html->add( '<td></td>' ). " Dummy for transport
ENDCASE.
ro_html->add( |<td class="status">?</td>| ).
@ -328,7 +389,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD render_list.
DATA: lt_changed_by TYPE ty_changed_by_tt,
ls_changed_by LIKE LINE OF lt_changed_by.
ls_changed_by LIKE LINE OF lt_changed_by,
lt_transports TYPE ty_transport_tt,
ls_transport LIKE LINE OF lt_transports.
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF ms_files-remote,
<ls_local> LIKE LINE OF ms_files-local.
@ -338,6 +401,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ro_html->add( '<table id="stageTab" class="stage_tab w100">' ).
lt_changed_by = find_changed_by( ms_files-local ).
lt_transports = find_transports( ms_files-local ).
" Local changes
LOOP AT ms_files-local ASSIGNING <ls_local>.
@ -346,6 +410,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ro_html->add( '<th>Type</th>' ).
ro_html->add( '<th>Files to add (click to see diff)</th>' ).
ro_html->add( '<th>Changed by</th>' ).
ro_html->add( '<th>Transport</th>' ).
ro_html->add( '<th></th>' ). " Status
ro_html->add( '<th class="cmd">' ).
ro_html->add( '<a>add</a>&#x2193; <a>reset</a>&#x2193;' ).
@ -355,12 +420,16 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
ENDAT.
READ TABLE lt_changed_by INTO ls_changed_by WITH KEY item = <ls_local>-item. "#EC CI_SUBRC
READ TABLE lt_transports INTO ls_transport WITH KEY item = <ls_local>-item. "#EC CI_SUBRC
ro_html->add( render_file(
iv_context = 'local'
is_file = <ls_local>-file
is_item = <ls_local>-item
iv_changed_by = ls_changed_by-name ) ).
iv_changed_by = ls_changed_by-name
iv_transport = ls_transport-transport ) ).
CLEAR ls_transport.
AT LAST.
ro_html->add( '</tbody>' ).

View File

@ -40,11 +40,14 @@ CLASS zcl_abapgit_gui_router DEFINITION
METHODS get_page_playground
RETURNING VALUE(ri_page) TYPE REF TO zif_abapgit_gui_page
RAISING zcx_abapgit_exception zcx_abapgit_cancel.
CLASS-METHODS jump_display_transport
IMPORTING iv_getdata TYPE clike.
ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
CLASS zcl_abapgit_gui_router IMPLEMENTATION.
METHOD get_page_background.
@ -241,6 +244,9 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
WHEN zif_abapgit_definitions=>c_action-jump_pkg. " Open SE80
zcl_abapgit_services_repo=>open_se80( |{ iv_getdata }| ).
ev_state = zif_abapgit_definitions=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-jump_transport.
jump_display_transport( iv_getdata ).
ev_state = zif_abapgit_definitions=>c_event_state-no_more_act.
" DB actions
WHEN zif_abapgit_definitions=>c_action-db_edit.
@ -376,4 +382,14 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
METHOD jump_display_transport.
DATA: lv_transport TYPE trkorr.
lv_transport = iv_getdata.
CALL FUNCTION 'TR_DISPLAY_REQUEST'
EXPORTING
i_trkorr = lv_transport.
ENDMETHOD.
ENDCLASS.

View File

@ -51,6 +51,7 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION
RAISING zcx_abapgit_exception,
render_item
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_repo_item
iv_render_transports TYPE abap_bool
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html
RAISING zcx_abapgit_exception,
render_item_files
@ -65,6 +66,9 @@ CLASS zcl_abapgit_gui_view_repo DEFINITION
get_item_icon
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_repo_item
RETURNING VALUE(rv_html) TYPE string,
render_item_lock_column
IMPORTING is_item TYPE zif_abapgit_definitions=>ty_repo_item
RETURNING VALUE(rv_html) TYPE string,
render_empty_package
RETURNING VALUE(rv_html) TYPE string,
render_parent_dir
@ -85,7 +89,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
CLASS zcl_abapgit_gui_view_repo IMPLEMENTATION.
METHOD build_dir_jump_link.
@ -398,20 +402,29 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
METHOD render_item.
DATA: lv_link TYPE string.
DATA: lv_link TYPE string,
lv_colspan TYPE i.
CREATE OBJECT ro_html.
IF iv_render_transports = abap_false.
lv_colspan = 2.
ELSE.
lv_colspan = 3.
ENDIF.
ro_html->add( |<tr{ get_item_class( is_item ) }>| ).
IF is_item-obj_name IS INITIAL AND is_item-is_dir = abap_false.
ro_html->add( '<td colspan="2"></td>'
ro_html->add( |<td colspan="{ lv_colspan }"></td>|
&& '<td class="object">'
&& '<i class="grey">non-code and meta files</i>'
&& '</td>' ).
ELSE.
ro_html->add( |<td class="icon">{ get_item_icon( is_item ) }</td>| ).
IF iv_render_transports = abap_true.
ro_html->add( render_item_lock_column( is_item ) ).
ENDIF.
IF is_item-is_dir = abap_true. " Subdir
lv_link = build_dir_jump_link( is_item-path ).
@ -528,6 +541,38 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
ENDMETHOD.
METHOD render_item_lock_column.
DATA: li_cts_api TYPE REF TO zif_abapgit_cts_api,
lv_transport TYPE trkorr,
lv_transport_string TYPE string,
lv_icon_html TYPE string.
li_cts_api = zcl_abapgit_factory=>get_cts_api( ).
TRY.
IF is_item-obj_type IS INITIAL OR is_item-obj_name IS INITIAL OR
li_cts_api->is_object_type_lockable( is_item-obj_type ) = abap_false OR
li_cts_api->is_object_locked_in_transport( iv_object_type = is_item-obj_type
iv_object_name = is_item-obj_name ) = abap_false.
rv_html = |<td class="icon"></td>|.
ELSE.
lv_transport = li_cts_api->get_current_transport_for_obj( iv_object_type = is_item-obj_type
iv_object_name = is_item-obj_name
iv_resolve_task_to_request = abap_false ).
lv_transport_string = lv_transport.
lv_icon_html = zcl_abapgit_html=>a( iv_txt = zcl_abapgit_html=>icon( iv_name = 'lock/darkgrey'
iv_hint = lv_transport_string )
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?| &&
lv_transport ).
rv_html = |<td class="icon">| &&
|{ lv_icon_html }| &&
|</td>|.
ENDIF.
CATCH zcx_abapgit_exception.
ASSERT 1 = 2.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_gui_page_hotkey~get_hotkey_actions.
@ -571,7 +616,8 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
lv_max TYPE abap_bool,
lv_max_str TYPE string,
lv_add_str TYPE string,
lo_log TYPE REF TO zcl_abapgit_log.
lo_log TYPE REF TO zcl_abapgit_log,
lv_render_transports TYPE abap_bool.
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
@ -582,6 +628,9 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
TRY.
lv_render_transports = zcl_abapgit_factory=>get_cts_api(
)->is_chrec_possible_for_package( mo_repo->get_package( ) ).
CREATE OBJECT lo_browser
EXPORTING
io_repo = mo_repo.
@ -624,7 +673,7 @@ CLASS ZCL_ABAPGIT_GUI_VIEW_REPO IMPLEMENTATION.
lv_max = abap_true.
EXIT. " current loop
ENDIF.
ro_html->add( render_item( <ls_item> ) ).
ro_html->add( render_item( is_item = <ls_item> iv_render_transports = lv_render_transports ) ).
ENDLOOP.
ENDIF.

View File

@ -193,7 +193,7 @@ function StageHelper(params) {
// Table columns (autodetection)
this.colIndex = this.detectColumns();
this.filterTargets = ["name", "user"];
this.filterTargets = ["name", "user", "transport"];
// Constants
this.HIGHLIGHT_STYLE = "highlight";

View File

@ -0,0 +1,118 @@
"! Change transport system API
CLASS zcl_abapgit_cts_api DEFINITION
PUBLIC
FINAL
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_factory.
PUBLIC SECTION.
INTERFACES:
zif_abapgit_cts_api.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_cts_api IMPLEMENTATION.
METHOD zif_abapgit_cts_api~get_current_transport_for_obj.
DATA: lv_object_lockable TYPE abap_bool,
lv_locked TYPE abap_bool,
lv_transport_request TYPE trkorr,
lv_task TYPE trkorr,
lv_tr_object_name TYPE trobj_name.
lv_tr_object_name = iv_object_name.
CALL FUNCTION 'TR_CHECK_OBJECT_LOCK'
EXPORTING
wi_pgmid = iv_program_id
wi_object = iv_object_type
wi_objname = lv_tr_object_name
IMPORTING
we_lockable_object = lv_object_lockable
we_locked = lv_locked
we_lock_order = lv_transport_request
we_lock_task = lv_task
EXCEPTIONS
empty_key = 1
no_systemname = 2
no_systemtype = 3
unallowed_lock_order = 4
OTHERS = 5.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
IF lv_locked = abap_false.
zcx_abapgit_exception=>raise( |Object { iv_program_id }-{ iv_object_type }-{ iv_object_name } is not locked| ).
ENDIF.
IF lv_object_lockable = abap_false.
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
ENDIF.
IF lv_task IS NOT INITIAL AND lv_task <> lv_transport_request AND iv_resolve_task_to_request = abap_false.
rv_transport = lv_task.
ELSE.
rv_transport = lv_transport_request.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_cts_api~is_object_locked_in_transport.
DATA: ls_object_key TYPE e071,
lv_type_check_result TYPE c LENGTH 1,
ls_lock_key TYPE tlock_int,
lv_lock_flag TYPE c LENGTH 1.
ls_object_key-pgmid = iv_program_id.
ls_object_key-object = iv_object_type.
ls_object_key-obj_name = iv_object_name.
CALL FUNCTION 'TR_CHECK_TYPE'
EXPORTING
wi_e071 = ls_object_key
IMPORTING
pe_result = lv_type_check_result
we_lock_key = ls_lock_key.
IF lv_type_check_result <> 'L'.
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
ENDIF.
CALL FUNCTION 'TRINT_CHECK_LOCKS'
EXPORTING
wi_lock_key = ls_lock_key
IMPORTING
we_lockflag = lv_lock_flag
EXCEPTIONS
empty_key = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |TRINT_CHECK_LOCKS: { sy-subrc }| ).
ENDIF.
rv_locked = boolc( lv_lock_flag <> space ).
ENDMETHOD.
METHOD zif_abapgit_cts_api~is_object_type_lockable.
DATA: ls_object_key TYPE e071,
lv_type_check_result TYPE c LENGTH 1.
ls_object_key-pgmid = iv_program_id.
ls_object_key-object = iv_object_type.
ls_object_key-obj_name = '*'.
CALL FUNCTION 'TR_CHECK_TYPE'
EXPORTING
wi_e071 = ls_object_key
IMPORTING
pe_result = lv_type_check_result.
rv_lockable = boolc( lv_type_check_result = 'L' ).
ENDMETHOD.
METHOD zif_abapgit_cts_api~is_chrec_possible_for_package.
rv_possible = zcl_abapgit_factory=>get_sap_package( iv_package )->are_changes_recorded_in_tr_req( ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?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_CTS_API</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Change transport system API</DESCRIPT>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -54,6 +54,9 @@ CLASS zcl_abapgit_factory DEFINITION
CLASS-METHODS get_stage_logic
RETURNING
VALUE(ri_logic) TYPE REF TO zif_abapgit_stage_logic .
CLASS-METHODS get_cts_api
RETURNING
VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api.
PRIVATE SECTION.
TYPES:
@ -96,6 +99,7 @@ CLASS zcl_abapgit_factory DEFINITION
CLASS-DATA gt_syntax_check TYPE tty_syntax_check .
CLASS-DATA gi_branch_overview TYPE REF TO zif_abapgit_branch_overview .
CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic .
CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api.
CLASS-DATA gi_adhoc_code_inspector TYPE REF TO zif_abapgit_code_inspector.
ENDCLASS.
@ -218,6 +222,13 @@ CLASS zcl_abapgit_factory IMPLEMENTATION.
ENDMETHOD.
METHOD get_cts_api.
IF gi_cts_api IS NOT BOUND.
CREATE OBJECT gi_cts_api TYPE zcl_abapgit_cts_api.
ENDIF.
ri_cts_api = gi_cts_api.
ENDMETHOD.
METHOD get_adhoc_code_inspector.
@ -246,6 +257,4 @@ CLASS zcl_abapgit_factory IMPLEMENTATION.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -24,12 +24,15 @@ CLASS zcl_abapgit_injector DEFINITION
CLASS-METHODS set_stage_logic
IMPORTING
!ii_logic TYPE REF TO zif_abapgit_stage_logic .
CLASS-METHODS set_cts_api
IMPORTING
ii_cts_api TYPE REF TO zif_abapgit_cts_api.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_INJECTOR IMPLEMENTATION.
CLASS zcl_abapgit_injector IMPLEMENTATION.
METHOD set_code_inspector.
@ -115,4 +118,8 @@ CLASS ZCL_ABAPGIT_INJECTOR IMPLEMENTATION.
zcl_abapgit_factory=>gi_tadir = ii_tadir.
ENDMETHOD.
METHOD set_cts_api.
zcl_abapgit_factory=>gi_cts_api = ii_cts_api.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,42 @@
"! Change transport system API
INTERFACE zif_abapgit_cts_api PUBLIC.
METHODS:
"! Returns the transport request / task the object is currently locked in
"! @parameter iv_program_id | Program ID
"! @parameter iv_object_type | Object type
"! @parameter iv_object_name | Object name
"! @parameter iv_resolve_task_to_request | Return the transport request number if the object is locked in a task
"! @parameter rv_transport | Transport request / task
"! @raising zcx_abapgit_exception | Object is not locked in a transport
get_current_transport_for_obj IMPORTING iv_program_id TYPE pgmid DEFAULT 'R3TR'
iv_object_type TYPE trobjtype
iv_object_name TYPE sobj_name
iv_resolve_task_to_request TYPE abap_bool DEFAULT abap_true
RETURNING VALUE(rv_transport) TYPE trkorr
RAISING zcx_abapgit_exception,
"! Check if the object is currently locked in a transport
"! @parameter iv_program_id | Program ID
"! @parameter iv_object_type | Object type
"! @parameter iv_object_name | Object name
"! @parameter rv_locked | Object is locked
"! @raising zcx_abapgit_exception | Object type is not lockable
is_object_locked_in_transport IMPORTING iv_program_id TYPE pgmid DEFAULT 'R3TR'
iv_object_type TYPE trobjtype
iv_object_name TYPE sobj_name
RETURNING VALUE(rv_locked) TYPE abap_bool
RAISING zcx_abapgit_exception,
"! Check if the object type is lockable
"! @parameter iv_program_id | Program ID
"! @parameter iv_object_type | Object type
"! @parameter rv_lockable | Lockable
is_object_type_lockable IMPORTING iv_program_id TYPE pgmid DEFAULT 'R3TR'
iv_object_type TYPE trobjtype
RETURNING VALUE(rv_lockable) TYPE abap_bool,
"! Check if change recording is possible for the given package
"! @parameter iv_package | Package
"! @parameter rv_possible | Change recording is possible
"! @raising zcx_abapgit_exception | Package could not be loaded
is_chrec_possible_for_package IMPORTING iv_package TYPE devclass
RETURNING VALUE(rv_possible) TYPE abap_bool
RAISING zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_CTS_API</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Change transport system API</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -481,6 +481,7 @@ INTERFACE zif_abapgit_definitions PUBLIC.
jump TYPE string VALUE 'jump',
jump_pkg TYPE string VALUE 'jump_pkg',
jump_transport TYPE string VALUE 'jump_transport',
url TYPE string VALUE 'url',
END OF c_action .