apack performance fix (#6649)

This commit is contained in:
Lars Hvam 2023-11-16 15:29:50 +01:00 committed by GitHub
parent 380563d144
commit 5c99f34d25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 6 deletions

View File

@ -70,7 +70,7 @@ ENDCLASS.
CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
CLASS ZCL_ABAPGIT_APACK_READER IMPLEMENTATION.
METHOD constructor.
@ -173,6 +173,9 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt,
ls_manifest_implementation TYPE ty_s_manifest_declaration,
lt_manifest_implementation TYPE STANDARD TABLE OF ty_s_manifest_declaration WITH DEFAULT KEY.
DATA lt_refclsname TYPE RANGE OF abap_classname.
DATA ls_refclsname LIKE LINE OF lt_refclsname.
IF mv_package_name IS NOT INITIAL.
lt_packages = zcl_abapgit_factory=>get_sap_package( mv_package_name )->list_subpackages( ).
@ -180,16 +183,31 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
ENDIF.
IF mv_is_cached IS INITIAL AND lt_packages IS NOT INITIAL.
ls_refclsname-sign = 'I'.
ls_refclsname-option = 'EQ'.
ls_refclsname-low = zif_abapgit_apack_definitions=>c_apack_interface_cust.
INSERT ls_refclsname INTO TABLE lt_refclsname.
ls_refclsname-sign = 'I'.
ls_refclsname-option = 'EQ'.
ls_refclsname-low = zif_abapgit_apack_definitions=>c_apack_interface_sap.
INSERT ls_refclsname INTO TABLE lt_refclsname.
IF mv_package_name CA '/'.
ls_refclsname-sign = 'I'.
ls_refclsname-option = 'CP'.
ls_refclsname-low = zif_abapgit_apack_definitions=>c_apack_interface_nspc.
INSERT ls_refclsname INTO TABLE lt_refclsname.
ENDIF.
" Find all classes that implement customer or SAP version of APACK interface
SELECT seometarel~clsname tadir~devclass FROM seometarel "#EC CI_NOORDER
INNER JOIN tadir ON seometarel~clsname = tadir~obj_name "#EC CI_BUFFJOIN
INTO TABLE lt_manifest_implementation
WHERE tadir~pgmid = 'R3TR' AND
tadir~object = 'CLAS' AND
seometarel~version = '1' AND (
seometarel~refclsname = zif_abapgit_apack_definitions=>c_apack_interface_cust OR
seometarel~refclsname = zif_abapgit_apack_definitions=>c_apack_interface_sap OR
seometarel~refclsname LIKE zif_abapgit_apack_definitions=>c_apack_interface_nspc )
seometarel~version = '1' AND
seometarel~refclsname IN lt_refclsname
ORDER BY clsname devclass.
LOOP AT lt_packages INTO lv_package.

View File

@ -36,5 +36,5 @@ INTERFACE zif_abapgit_apack_definitions PUBLIC .
CONSTANTS c_repository_type_abapgit TYPE ty_repository_type VALUE 'abapGit' ##NO_TEXT.
CONSTANTS c_apack_interface_sap TYPE seoclsname VALUE 'IF_APACK_MANIFEST' ##NO_TEXT.
CONSTANTS c_apack_interface_cust TYPE seoclsname VALUE 'ZIF_APACK_MANIFEST' ##NO_TEXT.
CONSTANTS c_apack_interface_nspc TYPE seoclsname VALUE '/%/IF_APACK_MANIFEST' ##NO_TEXT.
CONSTANTS c_apack_interface_nspc TYPE seoclsname VALUE '/*/IF_APACK_MANIFEST' ##NO_TEXT.
ENDINTERFACE.