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:

KomponenteWert
ROOTNAMEZCL_ABC=======================
CATEGORYAC
CODEAM001
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 ).

Enno Wulff

COMMENTS

  • <cite class="fn">abapkadabra</cite>

    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

  • <cite class="fn">ralfwenzel</cite>

    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

Comments are closed.