By exxsens GmbH on Mittwoch, 09. September 2015
Category: Developer Blog

Generische Methode zur dynamischen Erzeugung von internen Tabellen

​Es kommt immer mal wieder vor, dass man während der Entwicklung noch nicht genau weiß, wie die Strukturen und internen Tabellen zur Laufzeit aussehen werden bzw. müssen. Zu der folgenden Lösung bin ich bei der Herausforderung inspiriert worden, dass eine Schnittstelle entwickelt werden sollte, bei der Felder aus HCM-Infotypen ausgelesen und in eine Datei geschrieben werden sollten. Die auszuwertenden Infotypen sollten aber von den Fachteams gepflegt werden können und somit gab es keine Struktur bzw. Informationen darüber, welche Infotypen gelesen werden mussten.

Da bei dieser Entwicklung große Teile dynamisch zur Laufzeit erfolgen mussten, habe ich mir eine Klasse mit unterschiedlichen Methoden zur Unterstützung dafür angelegt. Eine dieser Methoden zur dynamischen Erzeugung einer internen Tabelle möchte ich nun vorstellen.

Zuerst benötigen wir die Struktur ZEXX_S_FIELDS. Diese Struktur wird für die interne Tabelle zur Übergabe an meine Methode verwendet, um die Informationen über die Felder des dynamisch zur Laufzeit erzeugten Teils der internen Tabelle zu übergeben..

Aufbauend auf dieser Struktur wird der Tabellentyp ZEXX_TT_FIELDS angelegt, damit dieser als Parameter in einer Methode verwendet werden kann.

Nun ist es an der Zeit unsere Klasse ZCL_EXX_DYNAMIC mit der statischen Methode CREATE_INT_TABLE anzulegen.

Die Methode hat die in der folgenden Abbildung zu sehenden Parameter und eine Ausnahme. Neben dem dynamischen Teil der internen Tabelle gab es einen fixen Teil der immer als erste Spalten ausgegeben werden sollte. Dies waren die Spalten der Tabelle PLOGI. Um die Klasse aber für andere Anwendungen wiederverwenden zu können, wurde diese Tabelle (Struktur) an den Parameter IM_S_BASE_TABLE übergeben. Die dynamischen Felder sind als Aufzählung in der internen Tabelle IM_T_TABLES enthalten.

Der folgende Coding-Block enthält die Implementierung der Methode CREATE_INT_TABLE

​Nachdem nun unsere Klasse erstellt ist, soll diese mit dem folgenden Beispiel-Report getestet werden. 

Im Coding wird zuerst die interne Tabelle mit den dynamischen Feldern (diese wurden bei der echten Entwicklung aus dem Customizing gelesen) gefüllt und zusammen mit der Angabe meiner Basis-Tabelle an die Methode CREATE_INT_TABLE übergeben.

​Wenn wir nun im Debugger anhalten, sehen wir das in der Zeile 60 dynamische die interne Tabelle mit unseren Feldern aus der Grundstruktur und den dynamisch zur Laufzeit übergebenen Feldern erzeugt wurde. Die folgenden Coding-Zeilen zeigen dann noch wie Sie auf die einzelnen Spalten einer neuen Zeile der internen Tabelle zugreifen können.

Auf diese Art und Weise konnten auch dynamisch typgerechte interne Tabellen erzeugt werden, die z.B. für die Zugriffe per Standard-Funktionsbausteine von Infotypen benötigt werden.

Die Entwicklungsobjekte stehen im folgenden Nugget als SAPlink Download zur Verfügung.

Related Posts