Funktionsbausteine entwickeln 

Legen Sie fest, welche Dienste Sie mit der Archivierungsklasse anbieten wollen. Ein Funktionsbaustein zum Schreiben muß in jedem Fall vorhanden sein (class_ARCHIVE_OBJECT). Es ist ferner sinnvoll, für Auswertungsprogramme einen Funktionsbaustein zum Lesen zur Verfügung zu stellen.

Globale Daten deklarieren

Beschreiben Sie zunächst im INCLUDE LxxxxTOP die benötigten Daten und Strukturen. Beachten Sie, daß die Archivierungsklasse u.U. von mehreren Programmen gleichzeitig aufgerufen wird und sie daher in der Lage sein muß, Instanzen zu verwalten. Die Instanzen werden durch die identifizierende Nummer (Archiv-Handle) und den Objektschlüssel unterschieden.

Folgende internen Tabellen sind unbedingt erforderlich:

Funktionsbaustein class_ARCHIVE_OBJECT

Dieser Funktionsbaustein unterliegt einer Namenskonvention, wobei "class" dem Namen der Archivierungsklasse der Objektdefinition entspricht. Die Schnittstelle dieses Funktionsbausteins ist individuell auf die Bedürfnisse der zu archivierenden Daten anzupassen. Es gibt jedoch zwei Parameter, die in jedem Funktionsbaustein dieser Art vorkommen:

Ferner muß in der Schnittstelle der Schlüssel der zu archivierenden Daten übernommen werden.

Wie sich die Klasse die Daten "merkt", liegt in deren Verantwortung. Es ist jedoch sinnvoll, zunächst nur den Schlüssel der betroffenen Daten zu "merken". Die Schlüssel können z.B. in einer im Rahmenprogramm definierten internen Tabelle abgelegt werden. Erst beim Aufruf des Unterprogramms class_GET_DATA durch den ADK-Funktionsbaustein ARCHIVE_SAVE_OBJECT wird es notwendig, die Daten zu beschaffen, um diese an das Datenobjekt zu übergeben. Die Nutzung von Array-Operationen wird hierbei empfohlen.

Die Klasse muß sich die Daten solange "merken", bis durch die Funktionsbausteine des ADK die Unterprogramme class_FREE_DATA (durch ARCHIVE_CLOSE_FILE) oder class_RENEW_DATA (durch ARCHIVE_NEW_OBJECT) aufgerufen werden.

Funktionsbaustein zum Lesen (klassenspezifische, herkömmliche Methode)

Dieser Funktionsbaustein unterliegt keiner Namenskonvention, da er nur vom Programm direkt (also nicht vom ADK) aufgerufen wird. Falls Sie bereits einen Funktionsbaustein zum Lesen der Daten aus der Datenbank entwickelt haben, können Sie diesen verwenden. Sie müssen ihn lediglich um einen Parameter erweitern, mit dem der Handle übergeben werden kann. Dieser Parameter muß immer ARCHIVE_HANDLE heißen. Über den Handle steuern Sie, ob die Daten aus der Datenbank oder aus dem Archiv gelesen werden. Wird der Handle mit dem Initialwert "0" übergeben, liest der Funktionsbaustein direkt in der Datenbank, ansonsten entnimmt er die Daten dem Datenpaket in seinem lokalen Gedächtnis.

Beispiele finden Sie in den Funktionsbausteinen READ_TEXT (Archivierungsklasse Text) und MEAS_DOCUM_READ_ARCHIVE_OBJECT (Archivierungsklasse MEAS_DOCUM).

Funktionsbaustein zum Lesen: class_ARCHIVE_GET_TABLE (empfohlene Methode)

Damit generische Werkzeuge wie z.B. SAP AS auf die Daten einer Archivierungsklasse zugreifen können, muß es für diese Archivierungsklasse einen Lesefunktionsbaustein geben, der gewissen Konventionen genügt (Beispiel: Funktionsbaustein TEXT_ARCHIVE_GET_TABLE):

Die zurückgelieferten Daten müssen die Struktur RECORD_STRUCTURE haben! Ansonsten funktioniert es nicht.

Bei einem Aufruf sollen alle Daten zu der in RECORD_STRUCTURE übergebenen Struktur in T_DATA zurückgeliefert werden. Es sollen nur die Daten zum aktuellen Datenobjekt geliefert werden. Falls der Funktionsbaustein prinzipiell keine Daten zur übergebenen Struktur liefern kann, so kann er die Ausnahme INVALID_STRUCTURE auslösen.

Für Daten, die zu untergeordneten Archivierungsklassen gehören, ruft SAP AS selbst den entsprechenden Funktionsbaustein auf.

SAP AS versucht, zu einer Klasse alle Tabellen zu lesen, die in der Transaktion ACLA zu der Archivierungsklasse eingetragen sind. Das heißt, daß der Lesefunktionsbaustein genau diese Tabellen liefern sollte.

Zusatzinformation:

SAP AS geht beim Lesen eines Datenobjekts für die technische Sicht folgendermaßen vor:

  1. Es werden alle Daten zum Archivierungsobjekt gelesen, die über die „Standardklasse" archiviert wurden. Welche Strukturen das sind, muß nicht erst ermittelt werden. Es werden einfach alle Sätze mittels ARCHIVE_GET_NEXT_RECORD gelesen.
  2. Mit dem Funktionsbaustein ARCHIVE_GET_INFORMATION wird ermittelt, zu welchen Klassen Daten in der Archivdatei stehen.
  3. Zu jeder Klasse wird der Name des Lesebausteins gebildet. Dann wird geprüft, ob der Funktionsbaustein existiert. (Ansonsten kann man sich das Folgende sparen.)
  4. Aus der Tabelle CLASS_DEF wird dann ermittelt, welche Strukturen die Klassen kennen.
  5. Für jede Klasse wird dann der entsprechende Lesebaustein für jede ihrer Strukturen aufgerufen.