BAPI verarbeiten
Vorgehensweise
Auf der Anwendungsseite wird bei der Ausführung des Eingangsfunktionsbausteins der BAPI-Aufruf aus dem IDoc erzeugt, der BAPI-Funktionsbaustein aufgerufen und der IDoc-Status ermittelt.
Nachdem die Verarbeitung des BAPIs bzw. des gesamten Pakets abgeschlossen worden ist, werden die Statussätze aller IDocs sowie die von erfolgreich abgeschlossenen BAPIs erzeugten Anwendungsdaten zusammen auf die Datenbank geschrieben.
Umwandlung des IDocs in einen BAPI-Aufruf
Bei der Erzeugung des BAPI-Aufrufs werden sämtliche Daten aus den Segmenten des IDocs in die zugehörigen Parameter des BAPI-Funktionsbausteins geschrieben. Ist für das BAPI eine Schnittstellenreduzierung definiert worden, werden die ausgeblendeten Felder nicht mit den IDoc-Daten gefüllt.
Aufruf des BAPI-Funktionsbausteins
Anschließend wird der BAPI-Funktionsbaustein synchron mit den gefüllten Parametern ausgeführt. Da das BAPI kein COMMIT-WORK-Kommando absetzt, werden die von ihm angelegten, modifizierten oder gelöschten Anwendungsdaten noch nicht in die Datenbank übernommen.
IDoc-Status ermitteln
Ist die Ausführung des Funktionsbausteins abgeschlossen, wird im Eingangsfunktionsbaustein in Abhängigkeit vom Ergebnis des Aufrufs der IDoc-Status ermittelt.
Wenn in mindestens einem übergebenen Eintrag des Return-Parameters das Feld TYPE mit A (Abbruch) oder E (Fehler) gefüllt ist, hat dies folgende Auswirkungen:
- Type A:
Alle Statussätze des zugehörigen IDocs erhalten den Status 51 (Fehler, Anwendungsbeleg nicht gebucht), und es wird ein ROLLBACK WORK durchgeführt.
- Type E:
Alle Statussätze des zugehörigen IDocs erhalten den Status 51 (Fehler, Anwendungsbeleg nicht gebucht), und es wird ein COMMIT WORK durchgeführt. Bei Verwendung der Paketierung wird das COMMIT WORK nach Abarbeitung des gesamten Pakets durchgeführt, sofern kein anderes BAPI eine A-Meldung zurückgibt. Die Ergebnisse des fehlerhaften BAPIs werden allerdings nicht übernommen, sondern nur der Fehlerstatus verbucht.
- In allen anderen Fällen wird der Status 53 (Anwendungsbeleg gebucht) gesetzt und ein COMMIT WORK durchgeführt. Bei Verwendung der Paketierung wird das COMMIT WORK nach Abarbeitung des gesamten Pakets durchgeführt, sofern kein anderes BAPI eine A-Meldung zurückgibt.
Anwendungsdaten und IDoc-Status buchen
Wird jedes IDoc bzw. BAPI einzeln verarbeitet, werden die Daten sofort auf die Datenbank geschrieben. Wenn allerdings mehrere IDocs innerhalb eines Pakets verarbeitet werden, sind folgende Situationen denkbar:
- Ist kein BAPI innerhalb des Pakets mit einer A-Meldung beendet worden, wird das COMMIT WORK-Kommando nach Abarbeitung des gesamten Pakets durchgeführt. Somit werden die Anwendungsdaten der erfolgreich abgeschlossenen BAPIs zusammen mit den Statussätzen aller IDocs auf die Datenbank geschrieben.
- Sobald allerdings ein BAPI innerhalb des Pakets mit einer A-Meldung beendet worden, wird der Status des zugehörigen IDocs auf 51 gesetzt und unmittelbar ein ROLLBACK WORK durchgeführt. Anschließend wird für alle BAPIs, die zuvor erfolgreich beendet wurden (also keine E- oder A-Meldung zurückgebracht haben), die Eingangsverarbeitung erneut durchlaufen. Tritt bei diesem Lauf keine A-Meldung mehr auf, wird ein COMMIT-WORK durchgeführt; die Anwendungsdaten der erfolgreich abgeschlossenen BAPIs werden zusammen mit den Statussätzen aller IDocs auf die Datenbank geschrieben. Beim Auftreten weiterer A-Meldungen wird dieser Vorgang wiederholt.

Die Paketverarbeitung wird nur durchgeführt, wenn keine Serialisierung stattfindet.
Fehlerbehandlung
Zusätzlich kann beim Auftreten von Fehlern die standardmäßige ALE-Fehlerbehandlung verwendet werden. Dies hat die folgenden Auswirkungen:
- Die Verbuchung des fehlerverursachenden IDocs bzw. BAPIs wird abgebrochen.
- Es wird ein Ereignis ausgelöst. Dieses Ereignis stößt eine Fehler-Aufgabe (Workitem) an:
- Die verantwortlichen Personen bekommen eine Aufgabe in ihren Workflow-Eingang.
- Durch Verarbeitung der Aufgabe wird die Fehlermeldung gezeigt.
- Nach dem Korrigieren des Fehlers in einem anderen Fenster kann das IDoc zur Verarbeitung wieder vorgelegt werden.
- Sollte der Fehler irreparabel sein, kann das IDoc zur Löschung vorgemerkt werden.
- Ist das BAPI bzw. IDoc erfolgreich eingebucht worden, wird ein Ereignis ausgelöst, das die Fehler- Aufgabe beendet. Damit verschwindet die Aufgabe aus dem Eingang.