Programmieren von Delete()/Undelete()-BAPIs
Verwendung
Das BAPI Delete() löscht eine Instanz eines SAP-Business-Objekttyps von der Datenbank. Analog hierzu löscht das BAPI DeleteMultiple() mehrere Business-Objektinstanzen. Delete()-BAPIs müssen immer komplette Instanzen löschen, z.B. einen ganzen Materialstamm.
Im Gegensatz hierzu wird mit dem BAPI Cancel() eine Instanz eines Business-Objekts storniert, d.h. die zu stornierende Instanz bleibt auf der Datenbank erhalten und als Storno wird eine zusätzliche Instanz erzeugt. Weitere Informationen hierzu finden Sie unter
Programmieren von Cancel()-BAPIs.Der tatsächliche Löschvorgang eines Delete()-BAPIs kann entweder sofort erfolgen, oder zeitlich versetzt über eine Löschvormerkung. Welche Art des Löschens Sie in Ihrem BAPI realisieren, ist für den Aufrufer nicht relevant; Sie sollten hierzu keine Informationen an der BAPI-Schnittstelle bereitstellen.
Das BAPI Undelete() wird verwendet, um eine Löschvormerkung zurückzunehmen, mit der das Löschen eines Objekts spezifiziert wurde.
Die BAPIs Delete() und Undelete() sind Instanzmethoden, die BAPIs DeleteMultiple() und UndelteMultiple() dagegen Klassenmethoden (instanzunabhängig).
Funktionsumfang
Die Schnittstellen der BAPIs Delete() und Undelete() sollten identisch sein.
BAPI-Schnittstelle
Import-Parameter
Bei der Festlegung der Import-Parameter sind folgende Aspekte zu beachten:
- Soll eine einzige Instanz gelöscht werden, müssen Sie für jedes Schlüsselfeld des zugehörigen Business-Objekttyps einen Import-Parameter am Funktionsbaustein anlegen. Dabei müssen die Namen der Parameter mit den Namen der Objektschlüssel im BOR übereinstimmen und die gleichen Datenelemente besitzen.
Sollen mehrere Instanzen gelöscht werden, müssen Sie eine Tabelle für die Schlüsselfelder des Business-Objekttyps anlegen. Sie können dies beispielsweise über eine Range-Tabelle realisieren.
Bei der entsprechenden Methodendefinition im BOR dürfen die Schlüsselfelder jedoch nicht zusätzlich als Parameter aufgeführt werden. Aus diesem Grund nimmt der BOR/BAPI-Wizard beim Anlegen eines BAPIs die Funktionsbaustein-Parameter für die Schlüsselfelder nicht in die Methodendefinition auf.
- Das BAPI muß zusätzlich einen TestRun-Parameter besitzen, der es ermöglicht, Testläufe durchzuführen. Ist dieser Parameter mit dem Wert "X" gefüllt, wird das BAPI zwar normal abgearbeitet, die Ergebnisse werden aber nicht vom BAPI in den Verbucher geschrieben. Somit können nach Ausführen des BAPIs BapiService.TransactionCommit sämtliche Ergebnisse, wie beispielsweise der Application Log, ausgewertet werden, die Datenbank bleibt aber vom BAPI unberührt.
Weitere Informationen finden Sie unter
TestRun-Parameter.
- Soll einem Kunden die Möglichkeit gegeben werden, die Import-Parameter des BAPIs modifikationsfrei zu erweitern, so ist der Parameter ExtensionIn anzulegen. Informationen zu Extension-Parametern und Empfehlungen, wie das Kundenerweiterungskonzept in einem Delete()-BAPI realisiert werden sollte, finden Sie unter
Kundenerweiterung von BAPIs.
- Beim BAPI DeleteMultiple() muß es darüber hinaus möglich sein, über die Angabe von Selektionsbedingungen die zu löschenden Objektinstanzen auszuwählen. Hierzu können Sie Selektionsparameter anlegen.
- Beim BAPI DeleteMultiple() muß es darüber hinaus möglich sein, über die Angabe von Selektionsbedingungen die zu löschenden Objektinstanzen auszuwählen. Hierzu können Sie Selektionsparameter anlegen.
Informationen zu diesen Parametern finden Sie unter
Selektionsparameter.
Implementieren Sie die Schnittstelle eines Delete()-BAPIs so, daß es nicht möglich ist, durch eine einfache Parametrisierung der Schnittstelle alle Instanzen zu löschen, z.B. durch Default-Einstellungen.
Export-Parameter
Bei der Festlegung der Export-Parameter sind diese Aspekte zu beachten:
- Soll einem Kunden die Möglichkeit gegeben werden, die Export-Parameter des BAPIs modifikationsfrei zu erweitern, so ist der Parameter ExtensionOut anzulegen. Informationen zu Extension-Parametern und Empfehlungen, wie das Kundenerweiterungskonzept in einem Delete()-BAPI realisiert werden sollte, finden Sie unter
Kundenerweiterung von BAPIs.
- Legen Sie als Export-Parameter nur den Parameter Return an, um Meldungen aus dem Methodenaufruf an das aufrufende Programm zurückzugeben. Um ein umfangreiches Monitoring der Ergebnisse des Delete()-BAPIs sowohl bei einem synchronen als auch bei einem asynchronen Aufruf zu gewährleisten, müssen beim Füllen des Return-Parameters die folgenden Konventionen eingehalten werden:
- Wird das Delete()-BAPI erfolgreich abgearbeitet, also die gewünschte Instanz gelöscht, muß im Return-Parameter folgende standardisierte T100-Nachricht übergeben werden:
Dabei sind folgende Aspekte von Bedeutung:
- Das Feld MESSAGE_V1 enthält den externen Namen des Business-Objekttyps, wie z.B. SalesOrder.
- In dem Feld MESSAGE_V2 wird derjenige Schlüssel zurückgegeben, unter dem auf zu löschende Objekt zugegriffen wurde. Dies kann entweder bei externer Nummervergabe der externe Schlüssel oder bei interner Nummernvergabe der interne Schlüssel sein. Besitzt das Objekt mehrere Schlüsselfelder, dann müssen die Werte dieser Schlüsselfelder in MESSAGE_V2 konkateniert werden. Bei der Konkatenation ist die diejenige Reihenfolge einzuhalten, in der die Schlüsselfelder im BOR definiert sind. Außerdem muß für jedes Schlüsselfeld die maximale Länge verwendet werden, so daß gegebenenfalls ein Auffüllen notwendig ist.
Ist der Gesamtschlüssel länger als die maximale Kapazität von MESSAGE_V2 (also 50 Zeichen), so wird er auf die beiden Felder MESSAGE_V2 und MESSAGE_V3 aufgeteilt. Dabei werden die ersten 50 Zeichen in MESSAGE_V2 gespeichert und der Rest MESSAGE_V3 zugewiesen.
Bei einem Undelete()-BAPI wird im Erfolgsfall folgende standardisierte T100-Nachricht verwendet:
- Tritt bei der Abarbeitung des Delete()-BAPIs ein Fehler auf, ist neben den anwendungsspezifischen Fehlermeldungen folgende standardisierte T100-Nachricht im Return-Parameter zu übergeben:
Die Bedeutung der einzelnen Felder ist äquivalent zum Erfolgsfall.
Bei einem Undelete()-BAPI wird im Fehlerfall folgende standardisierte T100-Nachricht verwendet:
- Neben der standardisierten Meldung können weitere Meldungen in den Return-Parameter geschrieben werden. Insbesondere im Fehlerfall müssen Meldungen zurückgegeben werden, die den Fehler konkret beschreiben. Deshalb sollte der volle Funktionsumfang des Typs BAPIRET2 Verwendung finden. Insbesondere sollten die Felder Parameter, Row und Field gefüllt werden.
Informationen zu diesem Parameter finden Sie unter
Return-Parameter (Fehlerdarstellung).
Siehe auch:
Beispiel für ein Delete()-BAPI