From 5c99f34d25f34b1350a2e4e2dd9006146f36911c Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 16 Nov 2023 15:29:50 +0100 Subject: [PATCH] apack performance fix (#6649) --- src/apack/zcl_abapgit_apack_reader.clas.abap | 28 +++++++++++++++---- .../zif_abapgit_apack_definitions.intf.abap | 2 +- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/apack/zcl_abapgit_apack_reader.clas.abap b/src/apack/zcl_abapgit_apack_reader.clas.abap index 6fbbdca16..a28f11267 100644 --- a/src/apack/zcl_abapgit_apack_reader.clas.abap +++ b/src/apack/zcl_abapgit_apack_reader.clas.abap @@ -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. diff --git a/src/apack/zif_abapgit_apack_definitions.intf.abap b/src/apack/zif_abapgit_apack_definitions.intf.abap index 1903f6047..5c4f71777 100644 --- a/src/apack/zif_abapgit_apack_definitions.intf.abap +++ b/src/apack/zif_abapgit_apack_definitions.intf.abap @@ -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.