Created
November 16, 2021 15:43
-
-
Save g-back/68480930d24a9798e6172c7ba8f3013b to your computer and use it in GitHub Desktop.
Example, CTS BAdI: Check if objects are included in abapGit repos
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CLASS zcl_im_cts_request_check DEFINITION | |
PUBLIC | |
FINAL | |
CREATE PUBLIC. | |
PUBLIC SECTION. | |
INTERFACES if_ex_cts_request_check. | |
PROTECTED SECTION. | |
PRIVATE SECTION. | |
CONSTANTS: | |
BEGIN OF c_type, | |
workbench TYPE trfunction VALUE 'K', | |
customizing TYPE trfunction VALUE 'W', | |
copies TYPE trfunction VALUE 'T', | |
development_task TYPE trfunction VALUE 'S', | |
repair TYPE trfunction VALUE 'R', | |
unclassified_task TYPE trfunction VALUE 'X', | |
customizing_task TYPE trfunction VALUE 'Q', | |
END OF c_type. | |
ENDCLASS. | |
CLASS zcl_im_cts_request_check IMPLEMENTATION. | |
METHOD if_ex_cts_request_check~check_before_add_objects. | |
RETURN. | |
ENDMETHOD. | |
METHOD if_ex_cts_request_check~check_before_changing_owner. | |
RETURN. | |
ENDMETHOD. | |
METHOD if_ex_cts_request_check~check_before_creation. | |
RETURN. | |
ENDMETHOD. | |
METHOD if_ex_cts_request_check~check_before_release. | |
IF type <> c_type-development_task OR lines( objects ) = 0. | |
RETURN. | |
ENDIF. | |
" special case: methods can be transported separately from the class itself | |
" extract class name to check the class itself | |
DATA(objects_cpy) = objects. | |
LOOP AT objects_cpy REFERENCE INTO DATA(obj) WHERE pgmid = 'LIMU' AND object = 'METH'. | |
SPLIT obj->obj_name AT ' ' INTO DATA(_class_name) DATA(_method_name). | |
obj->pgmid = 'R3TR'. | |
obj->object = 'CLAS'. | |
obj->obj_name = _class_name. | |
ENDLOOP. | |
" get all packages for transport objects | |
SELECT DISTINCT devclass | |
FROM tadir | |
INTO TABLE @DATA(packages) | |
FOR ALL ENTRIES IN @objects_cpy | |
WHERE pgmid = @objects_cpy-pgmid | |
AND object = @objects_cpy-object | |
AND obj_name = @objects_cpy-obj_name(40). | |
IF sy-subrc <> 0. | |
RETURN. | |
ENDIF. | |
" determine if packages are included in abapgit repos | |
DATA(repo_srv) = zcl_abapgit_repo_srv=>get_instance( ). | |
TYPES: | |
BEGIN OF ty_found, | |
package TYPE devclass, | |
repo_name TYPE string, | |
END OF ty_found. | |
DATA found TYPE STANDARD TABLE OF ty_found WITH EMPTY KEY. | |
LOOP AT packages REFERENCE INTO DATA(pack). | |
TRY. | |
repo_srv->get_repo_from_package( | |
EXPORTING | |
iv_package = pack->devclass | |
iv_ign_subpkg = abap_true | |
IMPORTING | |
eo_repo = DATA(lo_repo) | |
ev_reason = DATA(lv_reason) ). | |
" it's only bound if a repo has been found | |
IF lo_repo IS BOUND. | |
INSERT VALUE #( package = pack->devclass repo_name = lo_repo->get_name( ) ) INTO TABLE found. | |
ENDIF. | |
CATCH zcx_abapgit_exception. | |
ENDTRY. | |
ENDLOOP. | |
IF lines( found ) = 0. | |
RETURN. | |
ENDIF. | |
"inform user | |
cl_demo_output=>write_text( 'Packages serialized in abapGit found:' ). | |
cl_demo_output=>display( found ). | |
ENDMETHOD. | |
METHOD if_ex_cts_request_check~check_before_release_slin. | |
ENDMETHOD. | |
ENDCLASS. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment