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 |
Der Beitrag Classname Utilities erschien zuerst auf Tricktresor.