Classname Utilities
Klassen sind inzwischen von ABAP nicht mehr wegzudenken. Die Verwaltung der Klassen erfolgt jedoch immer noch in INCLUDES. Diese Includes interessieren in der Regel niemanden. Hin und wieder tauchen diese Klassen-Include jedoch in Shortdumps auf. Der Name der Klasse selbst ist eindeutig aus dem Includenamen zu erkennen. Der Name der Methode jedoch nicht. Häufig gibt es zwar auch die zusätzlich notwendige Information, um welche Methode es sich handelt, aber das ist nicht immer der Fall.
Einzelne Includes sehen zum Beispiel so aus:
CL_OO_CLASSNAME_SERVICE=======CCDEF CL_OO_CLASSNAME_SERVICE=======CCMAC CL_OO_CLASSNAME_SERVICE=======CCIMP CL_OO_CLASSNAME_SERVICE=======CCAU CL_OO_CLASSNAME_SERVICE=======CU CL_OO_CLASSNAME_SERVICE=======CO CL_OO_CLASSNAME_SERVICE=======CI CL_OO_CLASSNAME_SERVICE=======CP CL_OO_CLASSNAME_SERVICE=======CT CL_OO_CLASSNAME_SERVICE=======CS CL_OO_CLASSNAME_SERVICE=======CM001 CL_OO_CLASSNAME_SERVICE=======CM002 CL_OO_CLASSNAME_SERVICE=======CM003 CL_OO_CLASSNAME_SERVICE=======CM004
CL_OO_CLASSNAME_SERVICE
Um die einzelnen intern verwendeten Objekte (Includes) verwalten zu können, gibt es die Klasse CL_OO_CLASSNAME_SERVICE. Mit dieser Klasse kannst du herausfinden, welche Methode zu welchem Include gehört und umgekehrt.
GET_METHOD_INCLUDE liefert zum Beispiel für die gleichnamige Methode den Includenamen CL_OO_CLASSNAME_SERVICE=======CM00B.
Umgekehrt liefert die Methode GET_METHOD_BY_INCLUDE die Methode zum Includenamen.
die Methode GET_ALL_CLASS_INCLUDES liefert eine komplette Liste der verwendeten Klassen-Includes.
Nummerierung
Interessant finde ich, dass die Methodenincludes nicht numerisch hochgezählt werden, sondern erst numerisch (1-9) und dann alphabetisch (A-Z). Bei einem drei-stelligen numerischen Feld, wie das verwendete (==CMnnn) würden 999 Methoden in eine Klasse passen. Eigentlich mehr als ausreichend, sollte man meinen.
Die Nummerierung erfolgt übrigens in Funktionsbaustein SEO_METHOD_GENERATE_INCLUDE mit Hilfe des folgenden System-Calls:
system-call create method mtdkey-cpdname of class mtdkey-clsname include into filename.
Die Struktur FILENAME hat dann zum Beispiel folgenden Wert:
Komponente | Wert |
ROOTNAME | ZCL_ABC======================= |
CATEGORYA | C |
CODEA | M001 |
CATEGORYB | |
CODEB |
Alternative
Ebenfalls möglich ist die Verwendung von Klasse CL_OO_INCLUDE_NAMING. Auch hier bekommt man Informationen zu den Includes einer Klasse:
data(cifref) = cl_oo_include_naming=>get_instance_by_cifkey( class_interface_id ).
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024
Danke für den Tipp! Auch bei Transporten in ältere SAP-Releasestände war es immer eine Sucherei, welche Methode wegen Pragmas o.ä. einen RC=8 ausgelöst hat. Die Klasse kommt gleich in die persönliche Trickbibliothek…
Grüße aus Bremen,
Ingo
Zur Numerierung: Ich hab auch mal gedacht, 99 Funktionsbausteine schreibt niemand in eine Funktionsgruppe 😉
Darum finde ich es schon sinnvoll, wenn man da möglichst viel Luft nach oben lässt – auch wenn man komzeptionell sagen muss: Eine Klasse mit so vielen Methoden hat ein schlechtes Design.
Ralf