ALE Programmierleitfaden (BCMIDALEPRO)
ALE Programmierleitfaden (BCMIDALEPRO)
ALE Programmierleitfaden (BCMIDALEPRO)
HELP.BCMIDALEPRO
Release 4.6C
ALE-Programmierleitfaden SAP AG
Copyright
Weitergabe und Vervielfältigung dieser Publikation oder von Teilen daraus sind, zu welchem
Zweck und in welcher Form
auch immer, ohne die ausdrückliche schriftliche Genehmigung durch SAP AG nicht gestattet. In
dieser Publikation enthaltene Informationen können ohne vorherige Ankündigung geändert
werden.
Die von SAP AG oder deren Vertriebsfirmen angebotenen Software-Produkte können Software-
Komponenten auch anderer Software-Hersteller enthalten.
® ® ® ® ® ® ®
Microsoft , WINDOWS , NT , EXCEL , Word , PowerPoint und SQL Server sind eingetragene
Marken der
Microsoft Corporation.
® ® ® ® ® ® ® ® ®
IBM , DB2 , OS/2 , DB2/6000 , Parallel Sysplex , MVS/ESA , RS/6000 , AIX , S/390 ,
® ® ®
AS/400 , OS/390 und OS/400 sind eingetragene Marken der IBM Corporation.
®
ORACLE ist eine eingetragene Marke der ORACLE Corporation.
® ® TM
INFORMIX -OnLine for SAP und Informix Dynamic Server sind eingetragene Marken der
Informix Software Incorporated.
® ® ® ®
UNIX , X/Open , OSF/1 und Motif sind eingetragene Marken der Open Group.
®
HTML, DHTML, XML, XHTML sind Marken oder eingetragene Marken des W3C , World Wide
Web Consortium,
Massachusetts Institute of Technology.
®
JAVA ist eine eingetragene Marke der Sun Microsystems, Inc.
®
JAVASCRIPT ist eine eingetragene Marke der Sun Microsystems, Inc., verwendet unter der
Lizenz der von Netscape entwickelten und implementierten Technologie.
SAP, SAP Logo, R/2, RIVA, R/3, ABAP, SAP ArchiveLink, SAP Business Workflow, WebFlow,
SAP EarlyWatch, BAPI, SAPPHIRE, Management Cockpit, mySAP.com Logo und mySAP.com
sind Marken oder eingetragene Marken der SAP AG in Deutschland und vielen anderen Ländern
weltweit. Alle anderen Produkte sind Marken oder eingetragene Marken der jeweiligen Firmen.
2 April 2001
SAP AG ALE-Programmierleitfaden
Symbole
Symbol Bedeutung
Achtung
Beispiel
Hinweis
Empfehlung
Syntax
April 2001 3
ALE-Programmierleitfaden SAP AG
Inhalt
ALE-Programmierleitfaden ................................................................................ 7
Verteilung über BAPIs implementieren........................................................................................ 8
Ablauf der Verteilung über BAPIs...............................................................................................10
Eigene BAPIs implementieren ....................................................................................................17
Daten filtern................................................................................................................................... 19
Schnittstelle reduzieren............................................................................................................. 22
Filterobjekttypen definieren und zuordnen................................................................................ 25
BAPI-Parameter filtern .............................................................................................................. 27
Hierarchien zwischen BAPI-Parametern definieren.................................................................. 29
BAPI-ALE-Schnittstelle pflegen .................................................................................................. 32
Empfänger für ein BAPI ermitteln...............................................................................................39
Filterobjekte eines BAPIs abfragen........................................................................................... 41
Empfänger für asynchrone BAPIs ermitteln.............................................................................. 42
Eigene Filterobjekte über Business Add-Ins ermitteln......................................................... 44
Beispielprogramme mit asynchronem BAPI-Aufruf ............................................................. 47
Empfänger für synchrone BAPIs ermitteln................................................................................ 53
Beispielprogramme mit synchronem BAPI-Aufruf ............................................................... 55
Einzigen Empfänger für synchrone BAPIs ermitteln ................................................................. 58
BAPIs für interaktive Verbuchung entwickeln .......................................................................... 59
IDocs einer BAPI-ALE-Schnittstelle erweitern .......................................................................... 60
Verteilung über Nachrichtentypen implementieren.................................................................. 61
Ablauf der Verteilung über Nachrichtentypen........................................................................... 62
Ausgangsverarbeitung implementieren .................................................................................... 66
Entwicklung eines Funktionsbausteins zur ALE-Ausgangsverarbeitung.................................. 67
Grundlagen .......................................................................................................................... 68
Abfrage des Verteilungsmodells .......................................................................................... 69
Aufbau des Kontrollsatzes ................................................................................................... 70
Aufbau der Datensätze ........................................................................................................ 71
Konvertierung von Währungsbeträgen........................................................................... 72
Ersetzen von SAP-Codes durch ISO-Codes .................................................................. 73
Linksbündiges Füllen von IDoc-Feldern ......................................................................... 74
Aufruf von MASTER_IDOC_DISTRIBUTE .......................................................................... 75
Exceptions und Export-Parameter von master_idoc_distribute ..................................... 76
Beispiel für die IDoc-Erzeugung .......................................................................................... 77
Beispielprogramm für die IDoc-Erzeugung..................................................................... 78
Verwendung des Coding-Beispiels................................................................................. 84
Einstellung der ALE-Ausgangsverabeitung .............................................................................. 85
ALE-Objektypen definieren .................................................................................................. 86
Objekttyp für die Ausgangsverknüpfung dem Nachrichtentyp zuorden .............................. 87
Anwendungsobjekttyp für die Ausgangsverknüpfung dem Nachrichtentyp zuordnen ........ 88
Ausgang über die Nachrichtensteuerung.................................................................................. 89
Eingangsverarbeitung implementieren...................................................................................... 90
Funktionsbaustein im Eingang .................................................................................................. 91
4 April 2001
SAP AG ALE-Programmierleitfaden
April 2001 5
ALE-Programmierleitfaden SAP AG
6 April 2001
SAP AG ALE-Programmierleitfaden
ALE-Programmierleitfaden
ALE-Programmierleitfaden
Einsatzmöglichkeiten
Sie können die ALE-Geschäftsprozesse der Standardauslieferung durch eigene Szenarien
ergänzen.
Zu diesem Zweck werden zwei Programmiermodelle unterstützt, die sich durch die Art der
versendeten Nachricht unterscheiden:
· Verteilung über BAPIs [Seite 8]: Dieses Verfahren wird ab R/3-Release 4.0A unterstützt und
ist die Grundlage für zukünftige Entwicklungen.
· Verteilung über Nachrichtentypen [Seite 61] Dieses Programmiermodell liegt den ALE-
Entwicklungen von R/3-Release 3.x zugrunde.
April 2001 7
ALE-Programmierleitfaden SAP AG
Verteilung über BAPIs implementieren
Ablauf
Wenn Sie bei der Implementierung eines ALE-Geschäftsprozesses keines der von SAP
bereitgestellten BAPIs erweitern oder eigene BAPIs erstellen, müssen Sie lediglich folgende
Schritte ausführen:
· Daten filtern [Seite 19]
· Empfänger für ein BAPI ermitteln [Seite 39]
Wenn Sie hingegen BAPIs erweitern oder eigene BAPIs erstellen, müssen Sie die
nachfolgenden Schritte ausführen:
· Eigene BAPIs implementieren [Seite 17]
8 April 2001
SAP AG ALE-Programmierleitfaden
Verteilung über BAPIs implementieren
April 2001 9
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über BAPIs
Die Anwendung ruft im externen System synchron ein BAPI zum Anlegen eines FI-
Belegs. Der Beleg wird korrekt angelegt, doch es kommt während der Ausführung
des BAPIs zu einem Netzwerkausfall. Der Anwendung wird eine Fehlermeldung
zurückgegeben, die sie veranlaßt, den FI-Beleg erneut anzulegen. Es kommt zur
Duplizierung von Belegen im gerufenen System.
Ein Anwendungsprogramm kann durch aufwendiges Prüfen der Daten im externen System die
Funktionalität eines 2-Phasen-Commit realisieren. Eine einfachere Lösung ist der asynchrone
Aufruf eines BAPIs, da die Datenkonsistenz aufgrund der Fehlerbehandlung [Seite 212]
sichergestellt ist.
Ein BAPI sollte als asynchrone Schnittstelle implementiert werden, wenn eines der folgenden
Kriterien zutrifft:
· Konsistente Datenbankänderungen in beiden Systemen
Daten müssen sowohl auf dem lokalen System als auch auf einem entfernten System
konsistent fortgeschrieben werden.
· Lockerung der Ankopplung
Eine Implementation als synchrone Schnittstelle würde eine zu enge Kopplung zwischen
dem Client- und dem Server-System darstellen. Bei Ausfall der Verbindung könnte das
Client-System nicht mehr vernünftig arbeiten.
· Performance-Belastung
Es handelt sich um eine häufig verwendete Schnittstelle bzw. um eine Schnittstelle mit
großem Datenvolumen. Eine synchrone Schnittstelle kommt in dieser Situation aus
Performance-Gründen nicht in Frage.
Wenn Sie BAPIs als asynchrone Schnittstelle implementieren möchten, müssen Sie für ein
existierendes BAPI eine BAPI-ALE-Schnittstelle generieren. Weitere Einzelheiten zur
Generierung einer BAPI-ALE-Schnittstelle finden Sie unter BAPI-ALE-Schnittstelle generieren
[Seite 32].
Die Verteilung von Daten über BAPIs ist nachfolgend grafisch dargestellt und erläutert.
10 April 2001
SAP AG ALE-Programmierleitfaden
Ablauf der Verteilung über BAPIs
- Empfänger ermitteln
- Generierten Funktions- Verteilungs-
baustein aufrufen modell
IDoc Segmentfilterung
Datenfilterung Feldumsetzung
Generierter Generierter
Funktionsbaustein Funktionsbaustein
auf Ausgangsseite auf Eingangsseite
BAPI ® IDoc tRFC Übergabe-
Umwandlung oder IDoc ® BAPI
steuerung
EDI Umwandlung
Segmentfilterung
Serialisierung
Feldumsetzung BAPI-
IDoc Funktions-
Versionswandlung baustein
aufrufen
Auf der Ausgangs- und Eingangsseite werden jeweils die Anwendungsschicht und die ALE-
Schicht durchlaufen. Die Kommunikationsschicht sorgt für die Datenübertragung per
transaktionalem Remote Function Call (tRFC) oder EDI-Dateischnittstelle.
Der Ablauf läßt sich in folgende Teilphasen untergliedern.
1. Ausgangsverarbeitung
· Empfängerermittlung
· Aufruf des generierten Ausgangsfunktionsbausteins
· Umwandlung des BAPI-Aufrufs in ein IDoc
· Segmentfilterung
· Feldumsetzung
· IDoc-Versionswandlung
· Versendesteuerung
2. Versenden des IDocs
In der Kommunikationsschicht werden IDocs über den transaktionalen Remote Function Call
(tRFC) oder über andere Dateischnittstellen (z.B. für EDI) versendet.
Der tRFC garantiert dabei, daß die Daten genau einmal übertragen werden.
3. Eingangsverarbeitung
· Segmentfilterung
· Feldumsetzung
· Übergabesteuerung
April 2001 11
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über BAPIs
Ausgangsverarbeitung
Auf der Ausgangsseite wird in der Anwendungsschicht nach der Ermittlung der
Empfänger aus dem Verteilungsmodell der Ausgangsfunktionsbaustein aufgerufen, der
aus einem BAPI als Teil der BAPI-ALE-Schnittstelle generiert wurde (siehe auch
Beispielprogramme mit asynchronem BAPI-Aufruf [Seite 47]). In der ALE-Schicht wird
das zugehörige IDoc mit den gefilterten Daten aus dem BAPI-Aufruf gefüllt.
Über die Versendesteuerung wird die Datenübertragung zeitlich und mengenmäßig
gesteuert.
Im einzelnen setzt sich die Ausgangsverarbeitung aus den nachfolgend beschriebenen
Teilschritten zusammen.
Empfängerermittlung
Analog zum synchronen Aufruf eines BAPIs werden im Verteilungsmodell die
potentiellen Empfänger eines BAPI-Aufrufs definiert.
Vor dem Aufruf eines BAPIs bzw. einer generierten BAPI-ALE-Schnittstelle müssen
deren Empfänger ermittelt werden. Bei der Empfängerermittlung wird geprüft, ob die
Filterobjekte die vorgegebenen Bedingungen erfüllen, und es werden die erlaubten
Empfänger zurückgegeben.
Ist die Verteilung der Daten zusätzlich an Bedingungen geknüpft, werden diese
Abhängigkeiten zwischen BAPIs oder zwischen BAPIs und Nachrichtentypen als
Empfängerfilter definiert.
Für jeden dieser Empfängerfilter wurde vor der Pflege des Verteilungsmodells zunächst
ein Filterobjekt angelegt, dessen Wert zur Laufzeit darüber entscheidet, ob die
Bedingung erfüllt ist oder nicht.
Weitere Einzelheiten finden Sie unter Empfänger für ein BAPI ermitteln [Seite 39].
12 April 2001
SAP AG ALE-Programmierleitfaden
Ablauf der Verteilung über BAPIs
muß nicht sofort nach dem Aufruf, sondern kann auch in höheren Aufrufebenen oder
nach mehreren Aufrufen des Funktionsbausteins erfolgen.
Die erzeugten IDocs sind bis zum Ende der aufrufenden Transaktion gesperrt. Um
sie vorher zu entsperren, können Sie einen der folgenden Funktionsbausteine
aufrufen:
DEQUEUE_ALL gibt alle Sperrobjekte frei
EDI_DOCUMENT_DEQUEUE_LATER gibt einzelne IDocs frei, deren Nummern dem
Funktionsbaustein als Parameterwerte übergeben werden.
Datenfilterung
Für die Filterung stehen zwei Filterdienste zur Verfügung: die an Bedingungen geknüpfte
Parameterfilterung und die bedingungslose Schnittstellenreduzierung.
· Wenn bei der Schnittstellenreduktion vollständige Parameter ausgeblendet wurden,
dann werden diese nicht in das IDoc übernommen. Sollen dagegen bei strukturierten
Parametern nur einzelne Felder nicht übernommen werden, erscheinen trotzdem die
vollständigen Parameter im IDoc.
· Bei der Parameterfilterung herausgefilterte Tabellenzeilen werden nicht in das IDoc
übernommen.
Weitere Einzelheiten finden Sie unter Daten filtern [Extern].
Segmentfilterung
Nachdem das IDoc aufgebaut worden ist, kann eine zusätzliche Filterung der IDoc-
Segmente vorgenommen werden. Diese Filterung wird allerdings bei BAPIs nur in den
seltensten Fällen verwendet.
Einzelheiten dazu finden Sie im R/3-Einführungsleitfaden über folgenden Pfad:
Basis
Application Link Enabling
Geschäftsprozesse modellieren und implementieren
Verteilung von Stammdatenverteilung einstellen
Umfang der zu verteilenden Daten festlegen
Nachrichten reduzieren
Feldumsetzung
Empfängerspezifische Feldumsetzungen können Sie im R/3-Einführungsleitfaden
definieren:
Basis
Application Link Enabling
Geschäftsprozesse modellieren und implementieren
Datenumsetzung zwischen Sender und Empfänger einstellen
Es können allgemeine Regeln festgelegt werden, auf die man sich bei konkreten
Feldumsetzungen beziehen kann. Diese Funktion ist wichtig für die Konversion des
April 2001 13
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über BAPIs
Feldformats beim Datenaustausch zwischen R/2- und R/3-Systemen. In diesem Fall wird
beispielsweise das Feld Werk von 2 auf 4 Stellen erweitert.
Technisch erfolgt die Umsetzung mit Hilfe allgemeiner Umsetzungswerkzeuge aus dem
EIS-Bereich (Executive Information System).
IDoc-Versionswandlung
Damit die korrekte Funktion von ALE zwischen R/3-Systemen unterschiedlicher
Releasestände gewährleistet ist, kann eine Konversion von IDoc-Formaten durchgeführt
werden, um Nachrichtentypen unterschiedlicher Release-Stände anzupassen.
Ist die Versionswandlung abgeschlossen, werden die IDocs auf der Datenbank abgelegt
und die Versendesteuerung gestartet, die entscheidet, welche dieser IDocs sofort
versendet werden.
Bei der Änderung bestehender Nachrichtentypen hält sich die SAP-Entwicklung an
folgende Regeln:
· Felder können einem Segmenttyp angehängt werden;
· Segmente können hinzugefügt werden;
Im ALE-Customizing wird zu jedem Empfänger festgehalten, welche Version eines
Nachrichtentyps dort verwendet wird. Auf der Ausgangsseite wird das IDoc in der
korrekten Version erzeugt.
Versendesteuerung
Zeitliche Steuerung:
· Die IDocs können sofort oder per Hintergrundverarbeitung versandt werden. Diese
Einstellungen werden in der Partnervereinbarung vorgenommen.
· Erfolgt die Versendung per Hintergrundverarbeitung, muß ein Job eingeplant
werden. Der Ausführungsrhythmus ist frei wählbar.
Mengensteuerung:
· IDocs können gebündelt in Paketen versendet werden. Die Paketgröße wird im ALE-
Customizing partnerspezifisch vereinbart:
Basis
Application Link Enabling
Geschäftsprozesse modellieren und implementieren
Partnervereinbarung und Verarbeitungszeitpunkt einstellen
Partnervereinbarung manuell pflegen
oder: Partnervereinbarung generieren
Diese Einstellung ist nur wirksam, wenn Sie die Verarbeitung der IDocs im
Hintergrund einplanen.
Eingangsverarbeitung
Auf der Empfängerseite übernimmt die ALE-Schicht die Eingangsverarbeitung.
14 April 2001
SAP AG ALE-Programmierleitfaden
Ablauf der Verteilung über BAPIs
Segmentfilterung
Auf der Eingangsseite kann analog zur Ausgangsverarbeitung eine Filterung von IDoc-
Segmenten vorgenommen werden. Diese Filterung auf der Eingangsseite wird bei BAPIs
ebenfalls nur in den seltensten Fällen verwendet.
Feldumsetzung
Ebenfalls wie bei der Ausgangsverarbeitung ist es möglich, Feldumsetzungen
durchzuführen, wenn sich die Formate eines Feldes im Empfänger- und Sendesystem
unterscheiden.
Nachdem die Feldumsetzung stattgefunden hat wird das IDoc auf der Datenbank
gespeichert und die weitere Verarbeitung an die Übergabesteuerung übergeben.
Übergabesteuerung
In der Übergabesteuerung wird entschieden, wann die BAPIs in der Anwendung
aufgerufen werden sollen. Dies kann entweder sofort nach dem Eintreffen des IDocs
oder zeitgesteuert per Hintergrundverarbeitung erfolgen.
Werden mehrere voneinander abhängige Objekte verteilt, kann während der
Übergabesteuerung die Serialisierung genutzt werden. Durch eine serialisierte
Verteilung von Nachrichten wird eine bestimmte Reihenfolge bei der Erzeugung,
Versendung und Verbuchung der entsprechenden IDocs eingehalten. Dadurch werden
Fehler bei der Eingangsverarbeitung der IDocs vermieden.
Bei der Verwendung von BAPIs kann ausschließlich die Objektserialisierung genutzt
werden, die sicherstellt, daß die Reihenfolge der Nachrichten bezüglich eines
bestimmten Objektes auf der Empfängerseite immer gewahrt bleibt.
Weitere Einzelheiten zur Objektserialisierung finden Sie im ALE-Customizing:
Basis
Application Link Enabling
Geschäftsprozesse modellieren und implementieren
Verteilung von Stammdaten konfigurieren
Serialisierung der Daten beim Senden und Empfangen einstellen
Serialisierung über Objekttypen
Wenn der Zeitpunkt zur Verarbeitung des BAPIs gekommen ist, wird der generierte
Eingangsfunktionsbaustein aufgerufen.
April 2001 15
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über BAPIs
IDoc-Statusermittlung
Ist die Ausführung des Funktionsbausteins abgeschlossen, wird im
Eingangsfunktionsbaustein in Abhängigkeit vom Ergebnis des Aufrufs der IDoc-Status
ermittelt.
Fehlerbehandlung
Für die ALE-Fehlerbehandlung können Sie den SAP-Workflow verwenden:
· Die Verbuchung des fehlerverursachenden IDocs bzw. der BAPI-Daten wird
abgebrochen.
· Ein Ereignis wird ausgelöst. Dieses Ereignis stößt eine Fehler-Aufgabe (Workitem)
an.
· Sobald die Daten des BAPIs bzw. IDocs erfolgreich verbucht worden sind, wird ein
Ereignis ausgelöst, das die Fehler-Aufgabe beendet. Damit verschwindet die
Aufgabe aus dem Eingangssystem.
Weitere Einzelheiten finden Sie unter Fehlerbehandlung [Seite 212].
16 April 2001
SAP AG ALE-Programmierleitfaden
Eigene BAPIs implementieren
Vorgehensweise
Sie haben folgende Alternativen:
· Sie entwickeln ein eigenes BAPI im Kundennamensraum.
· Sie modifizieren ein BAPI der Standardauslieferung:
1. Kopieren und modifizieren Sie den zum originalen BAPI gehörenden Funktionsbaustein.
2. Legen Sie im Business Object Repository zum Objekttyp Ihres BAPIs einen Sub-
Objekttyp im Kundennamensraum an (Werkzeuge ® Business Framework ® BAPI-
Entwicklung ® Business Object Builder).
Beim Anlegen eines Sub-Objektyps werden die Methoden des Business-Objekts an
den Subtyp vererbt.
3. Setzen Sie den Status des Objekttyps auf Implementiert (Bearbeiten ® Freigabestatus
ändern ® Objekttyp).
4. Sie können die Methoden des Subtyps ändern, löschen oder durch eigene Methoden
ergänzen.
Einzelheiten zum Anlegen neuer BAPIs und zum Erweitern vorhandener BAPIs erfahren Sie im
BAPI-Programmierleitfaden unter dem Thema Modifikationen und Eigenentwicklungen von
Kunden [Extern]
April 2001 17
ALE-Programmierleitfaden SAP AG
Eigene BAPIs implementieren
· Type A:
Es wird für alle Statussätze des IDocs der Status 51 (Fehler, Anwendungsbeleg nicht
gebucht) geschrieben, nachdem ein ROLLBACK WORK durchgeführt wurde.
· Type E:
Es wird für alle Statussätze des IDocs der Status 51 (Fehler, Anwendungsbeleg nicht
gebucht) geschrieben und ein COMMIT WORK durchgeführt.
Andernfalls wird der Status 53 (Anwendungsbeleg gebucht) geschrieben und ein
COMMIT WORK durchgeführt.
18 April 2001
SAP AG ALE-Programmierleitfaden
Daten filtern
Daten filtern
Für die asynchronen BAPI-Aufrufe über die BAPI-ALE-Schnittstelle stehen Ihnen zwei
Filterdienste zur Verfügung:
· Schnittstellenreduzierung:
Wenn Sie die BAPI-Schnittstelle reduzieren, müssen Sie keine Filterobjekttypen
definieren.
Die BAPI-Reduzierung ist bedingungslos, d.h. es handelt sich um eine Projektion der
BAPI-Schnittstelle.
Das BAPI, dessen Schnittstelle reduziert werden können soll, muß vom BAPI-Entwickler
über entsprechende Parameterarten als reduzierbar angelegt werden.
Dabei werden optionale BAPI-Parameter und/oder -Felder über das Verteilungsmodell
für die Datenübermittlung ausgeschaltet.
Sie können auf zwei Arten eine Schnittstelle reduzieren [Seite 22]:
· Feldweise (über Ankreuzleisten)
· Vollständig
· Parameterfilterung
Dazu werden der Business-Objektmethode einer Verbindung Filterobjekttypen [Extern]
zugeordnet. Die zulässigen Filterobjektwerte müssen im Verteilungsmodell definiert
werden.
Die BAPI-Parameterfilterung ist an Bedingungen geknüpft, also inhaltsabhängig: Zeilen
in Tabellenparametern eines asynchron aufgerufenen BAPIs werden abhängig von
Werten in den Zeilen (oder abhängiger Zeilen) zum Empfänger übermittelt.
Mit Filtern definieren Sie Bedingungen in Form von Parameterwerten, die von BAPIs
erfüllt werden müssen, um von der ALE-Ausgangsverarbeitung verteilt zu werden.
Bei der Parameterfilterung wird die Datenmenge der Tabellen eines BAPIs bestimmt.
Zwischen den Parametern der Tabellen eines BAPIs können auch
Hierarchiebeziehungen definiert werden..
Eine Verteilung über Klassen [Extern] wird ebenfalls unterstützt.
Einzelheiten finden Sie unter BAPI-Parameter filtern [Seite 27].
BAPI-Filterung ist der Begriff für die (wahlweise) gemeinsame Verwendung der beiden
Filterdienste der BAPI-Schnittstelle. Eine BAPI-Filterung wird nur als Service in der Ausgangs-
verarbeitung realisiert.
April 2001 19
ALE-Programmierleitfaden SAP AG
Daten filtern
1. Ein unstrukturierter Parameter ohne Ankreuzleiste ist z.B. ein Schlüsselfeld des BAPIs (z.B.
der Parameter Material in Methoden zum Business Objekt Material).
Diese Parameterart kann nicht reduziert werden.
2. Gibt es zu einem unstrukturierten Parameter mit Namen P einen unstrukturierten
Ankreuzparameter mit Namen PX und Datenelement BAPIUPDATE, so ist der Parameter P
reduzierbar.
Die Reduzierung erfolgt durch Setzen des Wertes von P und des Ankreuzparameters PX auf
LEER.
3. Ein einzeiliger, strukturierter Parameter ohne Ankreuzleiste ist nicht reduzierbar.
4. Ein einzeiliger, strukturierter Parameter P mit Struktur S und zugehöriger Ankreuzleiste PX
mit Struktur SX ist feldweise reduzierbar, wenn folgendes zutrifftt:
· S und SX haben die gleiche Anzahl von Feldern, die in Namen und Reihenfolge identisch
sind.
· Das FUNCTION-Feld, sowie Schlüsselfelder in S und SX haben jeweils das selbe
Datenelement.
· Alle anderen Felder in SX haben das Datenelement BAPIUPDATE.
Das FUNCTION Feld in P, sowie die Schlüsselfelder müssen als Mußfelder gekennzeichnet
werden. Alle anderen Felder können wahlweise als Mußfelder gekennzeichnet werden.
Mußfelder sind nicht reduzierbar. Die Reduzierung für nicht-Mußfelder erfolgt durch Setzen
des Feldwertes und des korrespondierenden Ankreuzfeldes auf LEER.
5. Mehrzeilig strukturierte Parameter (Tabellenparameter) ohne Ankreuzleiste sind nicht
feldweise reduzierbar. Parameterfilterung und vollständige Filterung sind möglich.
20 April 2001
SAP AG ALE-Programmierleitfaden
Daten filtern
Ist die Hierarchie gepflegt und existieren in der Hierarchie abhängige Tabellen, so werden
Sätze der abhängigen Tabellen mitgefiltert.
6. Ein mehrzeiliger, strukturierter Parameter P mit Ankreuzleiste PX ist feldweise reduzierbar,
vollständig filterbar und Parameterfilterung ist möglich.
· Für die feldweise Reduzierung gelten die Voraussetzungen unter 4.
· Die Ankreuzleiste PX muß in der Hierarchie direkt unter P mit identischen Schlüsselfeldern
stehen, damit bei der Parameterfilterung die korrespondierenden Zeilen aus P und PX
gefiltert werden.
· Ist die Hierarchie gepflegt und existieren in der Hierarchie abhängige Tabellen, so werden
Sätze der abhängigen Tabellen mitgefiltert.
7. Ein mehrzeiliger, unstrukturierter Parameter kann nur vollständig gefiltert werden und darf
nicht in eine Hierarchie aufgenommen werden.
Parameterfilterung ist nicht erlaubt.
8. Für einen mehrzeiligen, unstrukturierten Parameter mit Ankreuzleiste kann keine Filterung
durchgeführt werden.
April 2001 21
ALE-Programmierleitfaden SAP AG
Schnittstelle reduzieren
Schnittstelle reduzieren
Verwendung
Die Integration von BAPIs und ALE hat zum Ziel, daß zukünftige ALE-Geschäftsprozesse BAPIs
als Schnittstellen verwenden können.
BAPI-Reduzierungen werden besonders in ALE-Geschäftsprozessen erforderlich, in denen
Stammdaten asynchron repliziert werden:
· Ein Teil der BAPI-Parameter wird, obwohl beim Aufruf angegeben, beim Empfänger nicht
benötigt.
· Genaue Kontrolle, welche Daten in Fremdsysteme (nicht R/3 und/oder zwischen
Geschäftspartnern) übertragen werden (z.B. durch ausblenden von Feldern).
· Bestimmte Daten dürfen beim Empfänger nicht überschrieben werden.
BAPI-Reduzierungen sind jedoch auch überall einsetzbar, wo asynchrone BAPI-Aufrufe genutzt
werden.
Beim asynchronen Aufruf eines BAPIs über die BAPI-ALE-Schnittstelle sollen nur die Parameter
der BAPI-Schnittstelle übermittelt werden, die für den Empfänger relevant sind. BAPI-
Reduzierungen können Sie im ALE-Verteilungsmodell im Rahmen der empfängerabhängigen
Filterung einstellen. Für Reduzierungen können Sie Vorlagen anlegen.
22 April 2001
SAP AG ALE-Programmierleitfaden
Voraussetzungen
Voraussetzungen
Die Grunddaten der BAPI-Reduzierung werden vom BAPI-Entwickler nach der Freigabe des
BAPIs und vor der Generierung der BAPI-ALE-Schnittstelle gepflegt. Sofern eine
Parameterhierarchie verwendet werden soll, muß diese ebenfalls vorher festgelegt werden.
Das BAPI muß vom BAPI-Entwickler über entsprechende Parameterarten als reduzierbar
angelegt werden. Muß-Parameter und –Felder müssen festgelegt werden.
Eine Matrix mit den Voraussetzungen für die Verwendung der Filterdienste finden Sie unter
Daten filtern [Extern].
Vorgehensweise
BAPI-Reduzierungen müssen wie folgt durchgeführt werden:
1. Erstellen Sie ein reduzierbares BAPI, das die obigen Voraussetzungen erfüllt.
2. Vor dem Generieren der BAPI-ALE-Schnittstelle müssen Sie die Datenfilterung explizit
aktivieren (Option Datenfilterung erlaubt).
Die Filterung können Sie im Verteilungsmodell über das Customizing unter Verteilung (ALE) ®
Geschäftsprozesse modellieren und implementieren ® Verteilungsmodell pflegen einstellen.
April 2001 23
ALE-Programmierleitfaden SAP AG
Voraussetzungen
Ergebnis
Die generierte BAPI-ALE-Schnittstelle ermöglicht die BAPI-Filterung als Service in der
Ausgangsverarbeitung.
24 April 2001
SAP AG ALE-Programmierleitfaden
Filterobjekttypen definieren und zuordnen
Ablauf
Um Filterobjekttypen für BAPIs einzurichten, müssen Sie folgende Schritte ausführen:
· Filterobjekttypen definieren
Wählen Sie dazu im SAP-Menü Werkzeuge ® ALE ® Entwicklung und dann BAPI-
Schnittstelle.
Sie können Filterobjekttypen über die Datenfilterung oder Empfängerermittlung anlegen:
Wählen Sie dann Filterobjekttyp pflegen (Transaktion BD95, Tabelle TBD11).
Legen Sie den Namen des Filterobjekttyps fest und hinterlegen Sie eine Referenz auf ein
Tabellenfeld. Der Verweis auf ein Tabellenfeld wird benötigt, um die Dokumentation aus
dem Datenelement zu ziehen und eine Wertehilfe für den Kunden bei der Pflege des
Verteilungsmodells anbieten zu können. Daher muß für das Tabellenfeld der
Fremdschlüssel gepflegt sein.
Für den Namen des Filterobjekttyps sind folgende Konventionen zu beachten
- Release 3.0/3.1: Domänenname (Beispiel: KOKRS für den Kostenrechnungskreis)
- Release 4.0: Default-Feldname für das Datenelement (Beispiel: COMP_CODE für
den Buchungskreis)
Kontrollieren Sie, ob unter der Domäne und dem Default-Feldnamen des
Datenelements für das gewünschte Objekt bereits ein Eintrag vorhanden ist. Falls
nicht, muß ein neues Filterobjekt angelegt werden. In der Regel wird das Filterobjekt
auch in der Schnittstelle des BAPIs als Feld in der Übergabestruktur auftauchen, z.B.
bapiachead-comp_code.
In diesem Fall sollte das Filterobjekt wie folgt angelegt werden:
ALE-Objekttyp: Feldname in der BAPI-Struktur, z.B. comp_code
Tabellenname: Name der BAPI-Struktur, z.B. bapiachead
Feldname: Feldname in der BAPI-Struktur, z.B. comp_code
· Filterobjekttypen einem BAPI zuordnen
Wählen Sie dazu im SAP-Menü Werkzeuge ® ALE ® Entwicklung und dann BAPI-
Schnittstelle.
Sie können einmem BAPI Filterobjekte für die Empfängerermittlung und die
Datenfilterung zuordnen.
In der jeweiligen Sicht auf die Tabelle TBD16 werden die für eine Objekt-Methode
zugelassenen Filterobjekttypen gepflegt:
- Empfängerermittlung:
April 2001 25
ALE-Programmierleitfaden SAP AG
Filterobjekttypen definieren und zuordnen
26 April 2001
SAP AG ALE-Programmierleitfaden
BAPI-Parameter filtern
BAPI-Parameter filtern
Verwendung
Die Parameterfilterung ermöglicht es, über Filterobjekte im ALE-Verteilungmodell den Umfang
der zu replizierenden Datenmenge in der Schnittstelle eines BAPIs zu steuern.
Die Parameterfilterung bezieht sich auf die Tabellenparameter eines BAPIs. Dabei werden die
Zeilen der BAPI-Tabellenparameter herausgefiltert, die den definierten Verteilungsbedingungen
nicht entsprechen. Die herausgefilterten Tabellenzeilen werden nicht repliziert.
Bsp.: Das logische System Q4VCLNT800 ist der BAPI-Server für das BAPI
RetailMaterial.Clone. Zu diesem System sollen durch die Parameterfilterung nur die
Werksdaten vom Werk 001 eines Materials repliziert werden.
Voraussetzungen
Die Voraussetzung für diese Filterung ist, dass dem entsprechenden BAPI Ihrer SAP-
Anwendungen ein Filterobjekttyp [Extern] zugeordnet ist. Für manche BAPIs wurden durch SAP
bereits Filterobjekttypen definiert und diesen zugeordnet. Sie können auch eigene
Filterobjekttypen definieren und einem BAPI zuordnen [Seite 25].
Die zulässigen Filterobjektwerte müssen Sie im Verteilungsmodell definieren. Einzelheiten dazu
erfahren Sie im R/3-Einführungsleitfaden unter Basis ® Application Link Enabling (ALE) ®
Geschäftsprozesse modellieren und implementieren ® Verteilungsmodell pflegen.
Die BAPI-Parameterfilterung ist vorerst nur für die Verteilung von Stammdaten über asynchron
aufgerufene BAPIs relevant. Deshalb ist das notwendige ALE-Customizing für die
Parameterfilterung nur für asynchron aufgerufene BAPIs mit einer ALE-IDoc Schnittstelle
zulässig.
Eine Parameterfilterung für die Verteilung von Bewegungsdaten über asynchrone BAPIs ist
zulässig, aber in den meisten Fällen nicht sinnvoll.
Die BAPI-Parameterfilterung für asynchrone BAPIs ist grundsätzlich optional. Sie müssen diese
explizit über ein Ankreuzfeld aktivieren, wenn Sie die BAPI-IDoc-Schnittstelle generieren [Seite
32]. Andernfalls wird kein Programmcode in der BAPI-IDoc-Schnittstelle generiert.
Falls eine BAPI-IDoc-Schnittstelle ohne Parameterfilterung generiert wurde, können Sie
nachträglich keine Parameterfilterung im ALE-Customizing einstellen.
Funktionsumfang
Die Parameterfilterung erfolgt dynamisch zur Laufzeit anhand der aktuellen Daten in den BAPI-
Tabellenparametern und den Verteilungsbedingungen im ALE-Verteilungsmodell:
· Lesen der definierten Parameter-Filterobjekte im Verteilungsmodell
· Lesen der Schnittstellendefinition des BAPIs
· Lesen der Tabellen-Feldwerte eines Tabelleneintrages für die zugehörigen Filterobjekte
· Verteilungsbedingung mit den gelesenen Filterobjektwerten vergleichen und Wert des
logischen Ausdrucks bestimmen
· Tabelleneintrag löschen
April 2001 27
ALE-Programmierleitfaden SAP AG
BAPI-Parameter filtern
28 April 2001
SAP AG ALE-Programmierleitfaden
Hierarchien zwischen BAPI-Parametern definieren
Ein BAPI für Material-Stammdaten enthält u.a. die Tabellen für Werksdaten und
zugehörige Lagerdaten. Die Tabelle für Werksdaten referenziert auf die Tabelle für
Lagerdaten über das Schlüsselfeld WERKS. Es existiert eine hierarchische
Abhängigkeit zwischen den Werks- und Lagerdaten, d.h. wenn das Werk 001 zu
einem Material aufgrund der Parameterfilterung nicht repliziert werden soll, dann
werden auch die Lagerdaten zu dem Werk 001 nicht repliziert.
Voraussetzungen
Sie nutzen die BAPI-Parameterfilterung zur Steuerung des Umfangs der Datenmenge in der
Schnittstelle eines BAPIs.
Vorgehensweise
Solche hierarchischen Abhängigkeiten können Sie in der ALE-Entwicklung über BAPI ®
Datenfilterung ® Hierarchie der Tabellenparameter pflegen definieren.
Geben Sie den Objekttyp und die Methode des BAPIs ein. Über die Eingabehilfe können Sie
sich die vorhandenen BOR-Objekttypen und die zugehörigen Methoden anzeigen und eine
Auswahl vornehmen.
Im Menü Hierarchie gibt es folgende Bearbeitungsaktivitäten für die Hierarchieerstellung:
· Anlegen
· Ändern
· Anzeigen
· Löschen
Hierarchie anlegen
Es wird geprüft, ob eine Hierarchie für das BAPI bereits existiert. Anschließend wird geprüft, ob
bereits eine ALE-IDOC Schnittstelle generiert wurde und ob das zugehörige IDOC bereits
freigegeben wurde.
Wenn das IDOC bereits freigegeben wurde, muß davon ausgegangen werden, daß die
generierte Schnittstelle bereits zum Kunden ausgeliefert wurde und somit aus
Kompatibilitätsgründen zu einem bestehenden BAPI keine Hierarchie angelegt bzw. geändert
April 2001 29
ALE-Programmierleitfaden SAP AG
Hierarchien zwischen BAPI-Parametern definieren
werden kann. In diesem Fall müssen Sie ein neues BAPI anlegen. Eine entsprechende
Fehlermeldung wird angezeigt. Existiert die ALE-Schnittstelle bereits, aber das IDOC ist noch
nicht freigegeben, so werden Sie darauf hingewiesen, daß eine Nachgenerierung notwendig ist.
Im Folgebild wird ein grafischer Hierarchiebaum angezeigt. Einzelheiten dazu finden Sie unter
Grafische Hierarchieanzeige bearbeiten weiter unten.
Hierarchie ändern
Es erfolgen die gleichen Prüfungen wie beim Anlegen. Im Folgebild gibt es die gleichen
Bearbeitungsaktivitäten wie beim Anlegen
Hierarchie anzeigen
Es erfolgen die gleichen Prüfungen wie beim Anlegen. Im Folgebild können keine Änderungen
an der Hierarchie vorgenommen werden.
Um die Feldreferenzen zwischen den Tabellen anzusehen, führen Sie einen Doppelklick auf der
Elterntabelle aus. Die Elterntabelle wird automatisch in das folgende Einblendfenster
übernommen. Über die Eingabehilfe können Sie eine der möglichen Kindtabellen auswählen.
Über die Drucktaste Feldreferenzen können Sie sich die Feldreferenzen anzeigen.
Hierarchie löschen
Es erfolgen die gleichen Prüfungen wie beim Anlegen. Nach einer Sicherheitsabfrage wird die
Hierarchie zu dem BAPI gelöscht.
Tabellenparameter hinzufügen
Positionieren Sie den Cursor auf einen Knoten der Hierarchiedarstellung und wählen Sie
Bearbeiten ® Tabellenparameter hinzufügen.
Wenn Sie den Cursor auf den Wurzelknoten positionieren, können Sie über die Eingabehilfe eine
Eltern-Tabelle der obersten Ebene auswählen.
Wenn eine Tabelle über dem markierten Knoten existiert, wird diese in das folgende
Einblendfenser automatisch übernommen, und Sie können zu dieser Tabelle eine Kind-Tabelle
hinzufügen.
30 April 2001
SAP AG ALE-Programmierleitfaden
Hierarchien zwischen BAPI-Parametern definieren
Grundsätzlich kann eine Tabelle nur einmal in der Hierarchie existieren. über die Eingabehilfe
können Sie sich die verfügbaren Tabellen anzeigen.
Im Einblendfenster können Sie sich über die Drucktaste Feldreferenzen die gemeinsamen Felder
der Eltern- und Kindtabelle anzeigen, über die Feldreferenzen definiert werden können. Durch
Markieren können Sie die Felder auswählen, für die eine Feldreferenz definiert werden soll. Falls
keine Feldreferenzen zwischen den beiden Tabellen existieren, so wird ein Fehlermeldung
ausgegeben.
Tabellenparameter löschen
Um eine Tabelle zu löschen, positioniert Sie den Cursor auf den entsprechenden Knoten der
Hierarchiedarstellung mit dem Tabellennamen der Kind-Tabelle. Bestätigen Sie die
Sicherheitsabfrage. Grundsätzlich werden alle weiteren Kind-Tabellen der zu löschenden Tabelle
ebenfalls gelöscht.
Hierarchie sichern
Um eine Hierarchie zu sichern, wählen Sie Hierarchie ® Sichern.
Beim Sichern wird ein Transportauftrag abgefragt, da die zugehörige Customizing-Tabelle an das
Korrektur- und Transportsystem angeschlossen ist.
Die Hierarchie wird nicht gesichert, wenn ein Fehler beim Datenbankzugriff auftritt. Eine
entsprechende Fehlermeldungen wird ausgegeben.
April 2001 31
ALE-Programmierleitfaden SAP AG
BAPI-ALE-Schnittstelle pflegen
BAPI-ALE-Schnittstelle pflegen
Das R/3-System enthält in der Standardauslieferung eine große Anzahl von Business-Objekten
und BAPIs. Dazu gehören auch BAPI-ALE-Schnittstellen, die aus BAPIs generiert wurden und
den asynchronen BAPI-Aufruf in ALE-Geschäftsprozessen ermöglichen.
Sie können Ihre eigene BAPIs in Ihrem Namensraum entwickeln und entsprechende BAPI-ALE-
Schnittstellen generieren.
Dabei werden zu einem BAPI folgende Objekte generiert:
· Nachrichtentyp
· IDoc-Typ einschließlich der Segmente
· Funktionsbaustein, der auf der Ausgangsseite aufgerufen wird
(Er baut aus den BAPI-Daten das IDoc auf und versendet es.)
· Funktionsbaustein, der auf der Eingangsseite mit den IDoc-Daten das BAPI aufruft
Der Unterschied zu manuell gepflegten Nachrichtentypen besteht darin, daß der
Funktionsbaustein zur Auswertung der Änderungszeiger kein IDoc aufbaut, sondern die
entsprechenden BAPI-Strukturen füllt, die Empfängerermittlung durchführt und den generierten
ALE-Funktionsbaustein aufruft.
Die generierten Nachrichtentypen, IDoc-Typen und Funktionsbausteine können auch für die
Stammdatenverteilung über das SMD-Tool verwendet werden.
Voraussetzungen
Als Grundvoraussetzung gilt das Vorhandensein eines BAPIs:
· Sie haben ein eigenes BAPI im Kundennamensraum entwickelt.
· Sie haben ein BAPI der Standardauslieferung modifiziert.
Die BAPI-ALE-Schnittstelle wird dann für den Subtyp und eine ihm zugeordnete Methode im
Kundennamensraum erzeugt.
Einzelheiten dazu finden Sie unter Eigene BAPIs implementieren [Seite 17].
32 April 2001
SAP AG ALE-Programmierleitfaden
BAPI-ALE-Schnittstelle pflegen
Vorgehensweise
Wählen Sie in der ALE-Entwicklung den Pfad BAPI ® ALE-Schnittstelle pflegen.
Beachten Sie, dass in Kundensystemen alle Objektnamen mit Y oder Z oder einem eigenen
Präfix beginnen müssen.
Verfahren Sie dann wie folgt:
1. Geben Sie das Ihrer Schnittstelle zugrundeliegende Business-Objekt (Objekttyp) und die
Methode ein.
2. Wählen Sie im Menü Schnittstelle eine der Optionen, um eine Schnittstelle zu pflegen,
anzuzeigen, zu prüfen oder zu löschen:
· Schnittstelle anlegen
Voraussetzung: Für dieses BAPI wurde noch keine Schnittstelle generiert oder eine
bereits erzeugt Schnittstelle wurde über die Option Löschen gelöscht.
Die Namen für die zu generierenden Objekte werden vorgeschlagen. Sie können diese
ändern.
1. Geben Sie einen Namen für den Nachrichtentyp an.
Es erscheint ein Dialogfenster.
Die vorgeschlagenen Namen werden nach folgender Konvention vergeben:
Nachrichtentyp: Betriebswirtschaftlicher Begriff
Beispiel: MYTEST
Bestätigen Sie Ihre Eingabe.
2. Im nachfolgenden Dialogfenster können Sie folgende Angaben vornehmen:
IDoc-Typ: <Nachrichtentyp>01
Beispiel: MYTEST01
Funktionsbaustein im Ausgang: ALE_<OBJECT>_<METHOD>
Beispiel:
ALE_EXAMPLE_TEST
Funktionsbaustein im Eingang: IDOC_INPUT_<Nachrichtentyp>
Beispiel:
IDOC_INPUT_MYTEST
Die vorgeschlagene Entwicklungsklasse und die Funktionsgruppe sind die, zu denen
der BAPI-Funktionsbaustein gehört. Sie sollten bei Ihrer eigenen
April 2001 33
ALE-Programmierleitfaden SAP AG
BAPI-ALE-Schnittstelle pflegen
34 April 2001
SAP AG ALE-Programmierleitfaden
BAPI-ALE-Schnittstelle pflegen
Falls ein Feld leer ist, können Sie das entsprechende Objekt generieren.
· Schnittstelle anzeigen
Voraussetzung: Zu diesem BAPI sind bereits Objekte vorhanden.
Es werden alle existierenden Objekte zu diesem BAPI angezeigt. Damit erhalten Sie
einen Überblick über den Zusammenhang zwischen BAPI-Methode und IDoc-
Nachrichtentyp.
· Schnittstelle löschen
Voraussetzung: Zu diesem BAPI wurden bereits Objekte angelegt.
Die Funktionsbausteine werden in jedem Fall gelöscht, sofern sie im System vorhanden
sind.
Die IDoc-Struktur wird gelöscht, wenn sie noch nicht freigegeben ist.
Die IDoc-Segmente werden nur dann gelöscht, wenn sie nicht freigegeben sind und nicht
in anderen IDocs verwendet werden.
Zum Schluß wird der Nachrichtentyp gelöscht, wenn er keine Zuordnung mehr zum Idoc-
Typ hat.
· Schnittstelle prüfen
Voraussetzung: Zu diesem BAPI wurden bereits Objekte angelegt.
Es werden alle Objekte bezüglich dieses BAPIs darauf geprüft, ob sie bereits im System
vorhanden sind. Es wird auch geprüft, ob Objekte (IDoc-Typ und Segmente) bereits
freigegeben sind.
Der Status der Freigabe für Objekte kann geändert werden (siehe Freigabe setzen und
Freigabe aufheben unter Hinweise unten).
5. Sie können die Schnittstelle freigeben.
Entwickler können den Status der Freigabe von IDoctyp und Segmenten ändern (über
Bearbeiten ® Freigabe setzen oder Freigabe aufheben).
Dafür sind die Berechtigungen S_IDCDFT_AL+ und S_IDCDFT_ALL des
Berechtigungsobjekts S_IDOCDEFT erforderlich.
Die Voraussetzung für die Freigabe ist, daß das BAPI bereits freigegeben ist. Bei der
Freigabe wird zunächst geprüft, ob die generierte Schnittstelle unter der BAPI-Methode
den aktuellen Status hat. Wenn nicht, wird abgefragt, ob die Schnittstelle neu generiert
werden soll. Es wird ermittelt, welche Segmente und welcher IDoc-Typ für die Freigabe
relevant sind. Für noch nicht freigegebene Objekte wird dann der neue Status
eingesetzt.
Die Freigabe kann jederzeit zurückgenommen werden. Diese Aktion ist an das
Transportwesen angeschlossen.
Die generierten Funktionsbausteine werden nicht freigegeben.
Ergebnis
Auf dem Ausgabebildschirm werden die bearbeiteten Objekte mit ihrem Status angezeigt. Alle
Änderungen werden in Transportaufträgen erfaßt.
April 2001 35
ALE-Programmierleitfaden SAP AG
BAPI-ALE-Schnittstelle pflegen
Hinweise
Beachten Sie auch die folgenden Hinweise:
· Namensraumerweiterung
Ab 4.5A ist die Namensraumerweiterung auch bei Kunden und Partnern unterstüzt.
· Serialisierung
Der Funktionsbaustein auf der Ausgangsseite hat einen optionalen Parameter
SERIAL_ID (Referenz auf die Kanalnummer). Dieser Eingabeparameter steuert die
Zuordnung von Nachrichten zu Objektkanälen. In einem Objektkanal werden alle
Nachrichten im Zielsystem in der gleichen Reihenfolge bearbeitet, wie sie im
Quellsystem entstanden sind. Ein Objektkanal wird durch einen Schlüssel aus dem
Objekttyp des BAPIs und der Kanalnummer identifiziert.
Mehr zu diesem Thema finden Sie unter Serialisierung über Objekttypen [Extern].
· Verknüpfungen
Die Verknüpfung im ALE beantwortet folgende Fragen:
- Auf der Ausgangsseite:
Aus welchem Anwendungsobjekt wurde das IDoc aufgebaut?
Die Voraussetzung ist, daß die Anwendung den Parameter
APPLICATION_OBJECTS im Funktionsbaustein auf der Ausgangsseite richtig
ausgefüllt hat.
- Auf der Eingangsseite:
Aus welchem Ausgangs-IDoc wurde das Eingangs-IDoc erzeugt, und welches
Anwendungsobjekt wurde aus diesem Eingangs-IDoc erzeugt?
Die Voraussetzung ist, daß für die BAPI-Methode ein Schlüssel im Business Object
Repository (BOR) definiert wurde und dieser Schlüssel im BAPI-Funktionsbaustein
im Exporting- oder Importing-Parameter enthalten ist. Dieser Schlüssel kann aus
mehreren Schlüsselfeldern zusammengesetzt sein. Existieren keine Schlüsselfelder
36 April 2001
SAP AG ALE-Programmierleitfaden
BAPI-ALE-Schnittstelle pflegen
im BOR, dann kann bei der entsprechenden Abfrage eine Verknüpfung mit einem
anderem Objekt angegeben werden.
April 2001 37
ALE-Programmierleitfaden SAP AG
BAPI-ALE-Schnittstelle pflegen
einsetzen, da nur ein Segment mit einer Datenmenge von maximal 1000-Bytes
geladen werden kann.
38 April 2001
SAP AG ALE-Programmierleitfaden
Empfänger für ein BAPI ermitteln
Funktionsumfang
Die Funktionsbausteine der Funktionsgruppe BDAPI haben folgenden Funktionsumfang:
April 2001 39
ALE-Programmierleitfaden SAP AG
Empfänger für ein BAPI ermitteln
Funktionsbaustein Funktionsumfang
ALE_BAPI_GET_FILTEROBJECTS Filterobjekte eines BAPIs abfragen [Seite 41]
ALE_ASYNC_BAPI_GET_RECEIVER Empfänger für asynchrone BAPIs ermitteln [Seite 42]
ALE_SYNC_BAPI_GET_RECEIVER Empfänger für synchrone BAPIs ermitteln [Seite 53]
ALE_BAPI_GET_UNIQUE_RECEIVE Einzigen Empfänger für synchrone BAPIs ermitteln
R [Seite 58]
40 April 2001
SAP AG ALE-Programmierleitfaden
Filterobjekte eines BAPIs abfragen
Input Parameter:
Parameter Bezugsfeld/Bezugsstruktur Beschreibung
OBJECT BDI_BAPI-OBJECT BOR-Objekt des BAPIs
METHOD BDI_BAPI-METHOD BOR-Methode des BAPIs
RECEIVER_INPUT BDI_LOGSYS Logische Empfängersysteme als
Vorgabewert
Output Parameter:
Parameter Bezugsfeld/ Bezugsstruktur Beschreibung
FILTEROBJECTS BDI_FLTTYP Filterobjekte und -werte
Exceptions
Parameter Beschreibung
ERROR_IN_ALE_CUSTOMIZING Fehler im ALE-Customizing
April 2001 41
ALE-Programmierleitfaden SAP AG
Empfänger für asynchrone BAPIs ermitteln
Input Parameter:
Parameter Bezugsfeld/Bezugsstruktur Beschreibung
OBJECT BDI_BAPI-OBJECT BOR-Objekt des BAPIs
METHOD BDI_BAPI-METHOD BOR-Methode des BAPIs
RECEIVER_INPUT, optional BDI_LOGSYS Logische Empfängersysteme
als Vorgabewert
FILTEROBJECT_VALUES BDI_FOBJ Filterobjekte und -werte
Output Parameter:
Parameter Bezugsfeld/Bezugsstruktur Beschreibung
RECEIVERS BDI_LOGSYS Empfängersysteme des BAPIs
Exceptions
Parameter Beschreibung
ERROR_IN_FILTEROBJECTS Filterobjekte sind fehlerhaft oder unvollständig
ERROR_IN_ALE_CUSTOMIZING Fehler im ALE-Customizing
42 April 2001
SAP AG ALE-Programmierleitfaden
Empfänger für asynchrone BAPIs ermitteln
April 2001 43
ALE-Programmierleitfaden SAP AG
Eigene Filterobjekte über Business Add-Ins ermitteln
Verwendung
Diese Beschreibung gilt nur für die Empfängerermittlung mit Business Add-Ins.
Sie ist nur für solche BAPIs relevant, für die ALE-Schnittstellen vorhanden sind und für die
Business Add-Ins implementiert werden sollen.
Als Standard liefert die SAP-Anwendung für die Empfängerermittlung eine Reihe von
Filterobjekttypen, die mit den von Ihnen zugeordneten Werten zur Laufzeit ausgewertet werden
(z.B. Filterobjekt Werk 0001, 0002). Die voreingestellten Werte können Sie ergänzen.
Wenn Sie jedoch für die Abbildung Ihrer eigenen Geschäftsprozesse andere Filterobjekttypen
verwenden möchten, um den asynchronen BAPI-Aufruf unter erweiterten Bedingungen
durchzuführen, benötigen Sie dafür von SAP definierte Business Add-Ins, die Sie implementieren
und aktivieren müssen. Business Add-Ins sind von SAP-Programmierern definierte Stellen im
Quellcode, an denen Sie Ihren Code einfügen können, ohne das Originalobjekt zu modifizieren.
Welche Ihrer SAP-Anwendungen Business Add-Ins enthalten, erfahren Sie in Ihrer
Anwendungsdokumentation.
Voraussetzungen
Folgende Voraussetzungen müssen erfüllt sein:
· Ihre SAP-Anwendungen enthalten Business Add-Ins, die von SAP definiert wurden (über
Werkzeuge ® ABAP Workbench ® Hilfsmittel ® Business Add-Ins ® Definition, siehe auch
das Beispiel Aufbau eines Business Add-Ins in einer Form-Routine unten).
· Sie haben im ALE-Entwicklungsumfeld einen Filterobjekttyp für die Empfängerermittlung
definiert, z.B. FILTER, und dem entsprechenden BAPI zugeordnet (über das SAP-Menü:
Werkzeuge ® ALE ® ALE-Entwicklung ® Empfängerermittlung).
· Sie haben das Business Add-In implementiert und aktiviert (über das SAP-Menü: Werkzeuge
® ABAP Workbench ® Hilfsmittel ® Business Add-Ins ® Implementierung).
· Sie haben im Verteilungsmodell ein Filterobjekt mit bestimmten Bedingungen unter der
Sender-Empfänger-Beziehung gepflegt (über den R/3-Einführungsleitfaden: Basis ®
Application Link Enabling (ALE)).
Beispiel:
Sender
Empfänger
BUSOBJECT.METHOD
Empfängerermittlung
Filtergruppe
FILTER
1010
44 April 2001
SAP AG ALE-Programmierleitfaden
Eigene Filterobjekte über Business Add-Ins ermitteln
In diesem Beispiel enthalten die Parameter parameters alle für die Empfängerermittlung
notwendigen Filterobjektwerte der Anwendung. Sie sind anwendungsabhängig.
Der Parameter receivers enthält als vorgegebenen Wert die gewünschten Empfänger (oder
Initialwert), und als Rückgabewert die ermittelten Empfänger.
Variablen-Definition:
t_filter_object_type TYPE bdi_flttyp_tab
t_filter_object_value TYPE bdi_fobj_tab
receivers_output LIKE bdi_logsys OCCURS 0 WITH
HEADER LINE
Im Code einer SAP-Anwendung werden folgende Schritte durchgeführt. Es handelt sich um die
gleichen Schritte wie bei der Ermittlung der von SAP definierten Filterobjekttypen mit dem
Zusatzschritt (Schritt 3) für die Ermittlung Ihrer selbst definierten Filterobjekte.
April 2001 45
ALE-Programmierleitfaden SAP AG
Eigene Filterobjekte über Business Add-Ins ermitteln
(Den Programmcode dieses Beispiels finden Sie unter Beispielprogramme mit asynchronem
BAPI-Aufruf [Seite 47], Empfängerermittlung mit Business Add-In)
Vorgehensweise
Implementieren Sie die Objekt-Methode für das Business Add-In unter Verwendung Ihres selbst
definierten Filterobjekttyps.
Ergebnis
Die Empfänger für den asynchronen BAPI-Aufruf wurden anhand der vorgegebenen Filterobjekte
ermittelt.
46 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramme mit asynchronem BAPI-Aufruf
constants:
c_objtype_plant type c value ‘WERKS’,
c_objtype_langu type c value ‘SPRAS’.
April 2001 47
ALE-Programmierleitfaden SAP AG
Beispielprogramme mit asynchronem BAPI-Aufruf
error_in_ale_customizing = 1.
loop at filterobj_types.
case filterobj_values-objtype.
when c_objtype_plant.
filterobj_values-objtype = c_objtype_plant.
filterobj_values-objvalue = ‘0002’.
when c_objtype_langu.
filterobj_values-objtype = c_objtype_langu.
filterobj_values-objvalue = ‘D’.
when others.
endcase.
append filterobj_values.
endloop.
if sy-subrc <> 0.
if not bapi_logsys[] is initial.
call function ‘ALE_MATERIAL_REPLICATE_DATA’
tables
receivers = bapi_logsys
...
commit work.
endif.
endif.
48 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramme mit asynchronem BAPI-Aufruf
* variables definition
DATA: w_filter_object_type TYPE bdi_flttyp,
t_filter_object_type TYPE bdi_flttyp_tab,
w_filter_object_value TYPE bdi_fobj,
t_filter_object_value TYPE bdi_fobj_tab,
receivers_output LIKE bdi_logsys OCCURS 0 WITH HEADER LINE.
IF sy-subrc <> 0.
return_info = syst.
EXIT.
ENDIF.
April 2001 49
ALE-Programmierleitfaden SAP AG
Beispielprogramme mit asynchronem BAPI-Aufruf
WHEN 'TEST_KEY2'.
MOVE-CORRESPONDING w_filter_object_type
TO w_filter_object_value.
w_filter_object_value-objvalue = key2.
APPEND w_filter_object_value TO t_filter_object_value.
* customers defined filter objects
WHEN OTHERS.
ENDCASE.
ENDLOOP.
IF sy-subrc <> 0.
return_info = syst.
EXIT.
ENDIF.
receivers[] = receivers_output[].
ENDFORM.
50 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramme mit asynchronem BAPI-Aufruf
METHOD if_ex_customer_filter~filtering.
* ...
DATA: w_filterobjtype TYPE bdi_flttyp,
w_filterobjvalue TYPE bdi_fobj.
ENDMETHOD.
filterobj_values-objtype = ‘KKBER’.
filterobj_values-objvalue = ‘0002’.
append filterobj_values.
April 2001 51
ALE-Programmierleitfaden SAP AG
Beispielprogramme mit asynchronem BAPI-Aufruf
error_in_filterobjects = 1
error_in_ale_customizing = 2.
if sy-subrc <> 0.
if not bapi_logsys[] is initial.
call function ‘ALE_DEBITOR_CREDITACC_REPLICATESTATUS’
tables
receivers = bapi_logsys
...
commit work.
endif.
endif.
52 April 2001
SAP AG ALE-Programmierleitfaden
Empfänger für synchrone BAPIs ermitteln
Input Parameter
Parameter Bezugsfeld/Bezugsstruktur Beschreibung
OBJECT BDI_BAPI-OBJECT BOR-Objekt des BAPIs
METHOD BDI_BAPI-METHOD BOR-Methode des BAPIs
RECEIVER_INPUT BDI_LOGSYS Logische Empfängersysteme als
Vorgabewert
FILTEROBJECT_VALUES BDI_FOBJ Filterobjekte und -werte
Output Parameter
Parameter Bezugsfeld/Bezugsstruktur Beschreibung
RECEIVERS BDI_LOGSYS Empfängersysteme des BAPIs und RFC-
Destination
April 2001 53
ALE-Programmierleitfaden SAP AG
Empfänger für synchrone BAPIs ermitteln
Exceptions
Parameter Beschreibung
ERROR_IN_FILTEROBJECTS Filterobjekte sind fehlerhaft oder unvollständig
ERROR_IN_ALE_CUSTOMIZING Fehler im ALE-Customizing
NO_RFC_DESTINATION_MAINTAINED RFC Destination zum logischen System fehlt
54 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramme mit synchronem BAPI-Aufruf
constants:
c_objtype_plant type c value ‘WERKS’,
c_objtype_langu type c value ‘SPRAS’.
loop at filterobj_types.
case filterobj_values-objtype.
when c_objtype_plant.
filterobj_values-objtype = c_objtype_plant.
filterobj_values-objvalue = ‘0002’.
when c_objtype_langu.
filterobj_values-objtype = c_objtype_langu.
filterobj_values-objvalue = ‘D’.
when others.
April 2001 55
ALE-Programmierleitfaden SAP AG
Beispielprogramme mit synchronem BAPI-Aufruf
endcase.
append filterobj_values.
endloop.
if sy-subrc = 0.
if not bapi_server[] is initial.
loop at bapi_server.
call function ‘BAPI_MATERIAL_GET_DETAIL’
destination bapi_server-rfc_dest
...
endloop.
else.
call function ‘BAPI_MATERIAL_GET_DETAIL’
...
endif.
endif.
filterobj_values-objtype = ‘KKBER’.
filterobj_values-objvalue = ‘0002’.
append filterobj_values.
56 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramme mit synchronem BAPI-Aufruf
method = ‘GETSTATUS’
tables
receivers = bapi_server
filterobjects_values = filterobj_values
exceptions
error_in_filterobjects = 1
error_in_ale_customizing = 2.
if sy-subrc <> 0.
if not bapi_server[] is initial.
loop at bapi_server.
call function ‘BAPI_DEBITOR_CREDITACC_GETSTATUS’
destination bapi_server-rfc_dest
...
endloop.
else.
call function ‘BAPI_DEBITOR_CREDITACC_GETSTATUS’
...
endif.
endif.
April 2001 57
ALE-Programmierleitfaden SAP AG
Einzigen Empfänger für synchrone BAPIs ermitteln
Input Parameter
Parameter Bezugsfeld Beschreibung
OBJECT BDI_BAPI-OBJECT BOR-Objekt des BAPIs
METHOD BDI_BAPI-METHOD BOR-Methode des BAPIs
FILTEROBJECT_VALUES BDI_FOBJ Filterobjekte und -werte
Output Parameter
Parameter Bezugsfeld Beschreibung
RECEIVER BDBAPIDEST Empfängersystem des BAPIs
Exceptions
Parameter Beschreibung
ERROR_IN_FILTEROBJECTS Filterobjekte sind fehlerhaft oder unvollständig
ERROR_IN_ALE_CUSTOMIZING Fehler im ALE-Customizing
NOT_UNIQUE_RECEIVER Es gibt mehrere Empfängersysteme für das BAPI
NO_RFC_DESTINATION_MAINTAINED RFC Destination zum logischen System fehlt
58 April 2001
SAP AG ALE-Programmierleitfaden
BAPIs für interaktive Verbuchung entwickeln
Vorgehensweise
Die ALE-Schicht setzt im globalen Speicher einen Parameter, der im Programm-Code des BAPIs
wie folgt abgefragt werden kann:
April 2001 59
ALE-Programmierleitfaden SAP AG
IDocs einer BAPI-ALE-Schnittstelle erweitern
Vorgehensweise
Kundenerweiterungen der von BAPIs generierten BAPI-ALE-Schnittstellen müssen
folgendermaßen gehandhabt werden:
1. Kopieren und modifizieren Sie den zum originalen BAPI gehörenden Funktionsbaustein.
2. Legen sie ein kundeneigenes BAPI im BOR an, indem Sie einen Sub-Objekttyp im
Kundennamensraum anlegen.
Beim Anlegen eines Sub-Objektyps werden die Methoden des Business-Objekts an den
Subtyp vererbt. Sie können die Methoden des Subtyps ändern, löschen oder durch
eigene Methoden ergänzen.
3. Generieren Sie eine kundeneigene BAPI-ALE-Schnittstelle aus diesem neuen BAPI.
Um das erweiterte IDoc im Ausgang zu erzeugen, muß die Anwendung einen Customer-Exit an
der Aufrufstelle vorsehen.
60 April 2001
SAP AG ALE-Programmierleitfaden
Verteilung über Nachrichtentypen implementieren
Ablauf
Definition von Nachrichten- und IDoc-Typen:
· Neue IDoc-Typen definieren [Extern]
Wenn Sie für die Verteilung von Stammdaten Erweiterungen zu einem Nachrichtentyp
anlegen möchten, müssen Sie für jede Erweiterung auch einen weiteren Nachrichtentyp
anlegen.
Die ALE-Schnittstelle lässt es nicht zu, für unterschiedliche IDoc-Typen bei gleichem
Nachrichtentyp unterschiedliche Segmentdaten aufzubauen.
Erstellen von ABAP-Code:
· Ausgangsverarbeitung [Seite 66]
· Eingangsverarbeitung [Seite 90]
Hinweise zu anderen ALE-Funktionen finden Sie unter den folgenden Themen
· Stammdatenverteilung [Seite 173]
· Kommunikation mit Nicht-R/3-Systemen [Extern]
April 2001 61
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über Nachrichtentypen
Nachricht Verteilungs-
erzeugen?
modell
Segment- Segment-
filterung filterung
tRFC
Feld-
oder Feld-
umsetzung EDI umsetzung
Versions- Übergabe-
wandlung steuerung IDoc
IDoc
IDoc
verarbeiten
IDoc Serialisierung
Ausgangsverarbeitung
Bei der Ausgangsverarbeitung wird durch einen Funktionsbaustein der Anwendung ein Stamm-
IDoc aufgebaut und an die ALE-Schicht weitergeleitet.
In der ALE-Schicht durchläuft es folgende Schritte:
· Empfängerermittlung, falls nicht bereits durch die Anwendung erfolgt
· Datenselektion
· Segmentfilterung
· Feldumsetzung
· Versionswandlung
· Versendesteuerung
Das aufbereitete IDoc wird an die Kommunikationsschicht übergeben und von dort über per
transaktionalen Remote Function Call (RFC) oder über Dateischnittstelllen (z.B. für EDI) an das
gerufene System (Server) geschickt.
Bei einem Fehler in der ALE-Schicht wird das fehlerhafte IDoc gesichert und eine Workflow-
Aufgabe erzeugt, mit deren Hilfe der ALE-Administrator den Fehler bearbeiten kann.
62 April 2001
SAP AG ALE-Programmierleitfaden
Ablauf der Verteilung über Nachrichtentypen
Empfängerermittlung:
Ein IDoc hat analog zu einem Brief einen Absender und einen Empfänger. Wenn der
Empfänger nicht durch die Anwendung eingetragen wurde, ermittelt die ALE-Schicht
anhand des Verteilungsmodells den oder die Interessenten für diese Nachricht.
Aus dem Modell kann die ALE-Schicht entnehmen, ob und wieviele verteilte Systeme die
Nachricht erhalten sollen. Es können kein, ein oder mehrere Empfänger ermittelt werden.
Für jedes der ermittelten verteilten Systeme werden die Daten, die laut Filterobjekte im
Verteilungsmodell festgelegt sind, aus dem Master-IDoc selektiert. Mit diesen Daten wird
ein IDoc gefüllt, in das der Interessent als Empfänger eingetragen wird.
Segmentfilterung:
Vor dem Versenden können in diesem Verarbeitungsschritt einzelne Segmente aus dem
IDoc entfernt werden. Zu unterdrückende Segmente können Sie im ALE-Customizing
über folgenden Pfad festlegen:
ALE-Geschäftsprozessen modellieren und implementieren
Verteilung von Stammdatenverteilung konfigurieren
Umfang der zu verteilenden Daten einstellen
IDoc-Segmente filtern
Die Einstellung erfolgt abhängig vom sendenden und empfangenden logischen R/3-
System.
Feldumsetzung:
Empfängerspezifische Feldumsetzungen können Sie im ALE-Customizing definieren:
ALE-Geschäftsprozessen modellieren und implementieren
Datenumsetzen zwischen Sender und Empfänger einstellen
Es können allgemeine Regeln festgelegt werden, auf die man sich bei konkreten
Feldumsetzungen beziehen kann. Die Regeln werden pro IDoc-Segment angelegt und je
Segmentfeld definiert. Diese Funktion ist wichtig für die Konversion des Feldformats
beim Datenaustausch zwischen R/2- und R/3-Systemen. In diesem Fall wird
beispielsweise das Feld Werk von 2 auf 4 Stellen erweitert.
Technisch erfolgt die Umsetzung mit Hilfe allgemeiner Umsetzungswerkzeuge aus dem
EIS-Bereich (Executive Information System).
IDoc-Versionswandlung:
SAP gewährleistet die korrekte Funktion von ALE zwischen R/3-Systemen
unterschiedlicher Release-Stände. Zur Anpassung der Nachrichtentypen verschiedener
R/3-Releasestände kann in diesem Verarbeitungsschritt eine Konversion der IDoc-
Formate erfolgen.
Bei der Änderung bestehender Nachrichtentypen hält sich die SAP-Entwicklung an
folgende Regeln:
· Felder können einem Segmenttyp angehängt werden.
· Segmente können hinzugefügt werden.
April 2001 63
ALE-Programmierleitfaden SAP AG
Ablauf der Verteilung über Nachrichtentypen
Versendesteuerung
In der Versendesteuerung wird der Versand nach Zeitpunkt und Menge gesteuert.
Zeitliche Steuerung:
Die IDocs können sofort oder per Hintergrundverarbeitung versandt werden. Diese
Einstellungen werden in der Partnervereinbarung vorgenommen.
Erfolgt die Versendung per Hintergrundverarbeitung, muß ein Job eingeplant
werden. Der Ausführungs-Rhythmus ist frei wählbar.
Mengensteuerung:
IDocs können gebündelt in Paketen versendet werden. Die Paketgröße wird im ALE-
Customizing wie folgt partnerspezifisch vereinbart:
Geschäftsprozesse modellieren und implementieren
® Partnervereinbarung und Verarbeitungszeitpunkt einstellen
® Partnervereinbarungen manuell pflegen
Diese Einstellung ist nur wirksam, wenn die IDocs im Hintergrund verarbeitet
werden.
Eingangsverarbeitung
In der ALE-Schicht durchläuft das ankommende IDoc folgende Schritte:
· Segmentfilterung
· Feldumsetzung
· Übergabesteuerung
· Serialisierung
Einzelheiten zur Programmierung finden Sie unter Eingangsverarbeitung implementieren [Seite
90].
Die einzelnen Schritte sind nachfolgend erläutert.
Segmentfilterung
Im Eingang können Sie eine Filterung von IDoc-Segmenten vornehmen.
Diese Funktion in der Eingangsverarbeitung gleicht im Prinzip der der
Ausgangsverarbeitung.
Feldumsetzung
Empfängerspezifische Feldumsetzungen können Sie im ALE-Customizing definieren:
ALE-Geschäftsprozessen modellieren und implementieren
Datenumsetzen zwischen Sender und Empfänger einstellen
Es können allgemeine Regeln festgelegt werden, auf die man sich bei konkreten
Feldumsetzungen beziehen kann. Die Regeln werden pro IDoc-Segment angelegt und je
64 April 2001
SAP AG ALE-Programmierleitfaden
Ablauf der Verteilung über Nachrichtentypen
Segmentfeld definiert. Diese Funktion ist wichtig für die Konversion des Feldformats
beim Datenaustausch zwischen R/2- und R/3-Systemen. In diesem Fall wird
beispielsweise das Feld Werk von 2 auf 4 Stellen erweitert.
Technisch erfolgt die Umsetzung mit Hilfe allgemeiner Umsetzungswerkzeuge aus dem
EIS-Bereich (Executive Information System).
Übergabesteuerung
Wurden die IDocs auf der Datenbank abgelegt, können sie von der entsprechenden
Anwendung gebucht werden.
Die Übergabe an die Anwendung kann sofort nach Eintreffen der IDocs oder
zeitgesteuert per Hintergrundverarbeitung erfolgen.
IDocs können auf drei Arten verbucht werden:
· Ein Funktionsbaustein wird direkt aufgerufen:
Die eingehenden IDocs werden direktes gebucht. Nur im Fehlerfall wird ein Fehler-
Workflow gestartet.
· Ein SAP Business Workflow wird gestartet. Ein Workflow ist die Abfolge von
Schritten zur Buchung eines IDocs.
Es werden keine Workflows für ALE ausgeliefert.
· Ein Workitem wird gestartet:
Start eines einzigen Schrittes zur Einbuchung eines IDocs.
Standardmäßig werden von ALE in der Eingangsverarbeitung die ausgelieferten
Funktionsbausteine aufgerufen. Informationen über die SAP Business Workflow-Alternativen
finden Sie unter Eingangsverarbeitung über SAP-Workflow [Seite 160].
Zur Behandlung von Störungen in der IDoc-Verarbeitung können Sie im SAP-Workflow zu
benachrichtigende Personen festlegen. Dies kann für jeden Nachrichtentyp getrennt
April 2001 65
ALE-Programmierleitfaden SAP AG
Ausgangsverarbeitung implementieren
Ausgangsverarbeitung implementieren
In diesem Abschnitt werden die zum Versand eines IDocs erforderlichen Entwicklungsschritte
beschrieben. Es wird vorausgesetzt, daß die IDoc-Struktur und der Nachrichtentyp bereits
angelegt und miteinander verknüpft sind.
Siehe auch:
· Entwicklung eines Funktionsbausteins zur ALE-Ausgangsverarbeitung [Seite 67]
· Einstellung der ALE-Ausgangsverabeitung [Seite 85]
· Ausgang über die Nachrichtensteuerung [Seite 89]
66 April 2001
SAP AG ALE-Programmierleitfaden
Entwicklung eines Funktionsbausteins zur ALE-Ausgangsverarbeitung
April 2001 67
ALE-Programmierleitfaden SAP AG
Grundlagen
Grundlagen
Ein IDoc besteht aus einem Kontrollsatz der Struktur edidc und einem oder mehreren
Datensätzen der Struktur edidd. Der Kontrollsatz ist eine Art Briefumschlag. In ihm stehen
Sender und Empfänger des IDocs sowie Informationen zur Art der Nachricht. Die Datensätze
enthalten die Nutzdaten des IDocs als unformatierte Zeichenketten.
Um ein IDoc an die ALE-Schicht übergeben zu können, muß eine Feldleiste der Struktur edidc
und eine interne Tabelle der Struktur edidd aufgebaut werden. Mit diesen wird dann der
Funktionsbaustein MASTER_IDOC_DISTRIBUTE aufgerufen. Der Baustein übernimmt das
Abspeichern auf die Datenbank und falls notwendig den Anstoß des Versandes.
Alle ALE-Nachrichtenflüsse sind im ALE Verteilungsmodell abgelegt. Das Verteilungsmodell ist
die zentrale steuernde Instanz für ALE. Die Anwendung kann bereits vor dem Erstellen des
IDocs das Verteilungsmodell abfragen. Das ist sinnvoll, wenn die Tatsache, daß ein IDoc erstellt
wird, auf die Anwendung Einfluß nimmt. Da man sich das Aufbauen der internen Tabelle für das
IDoc sparen kann, wenn im Verteilungmodell kein Nachrichtenfluß gepflegt ist, kann dies auch
die Performance verbessern.
Die ALE-Schicht fragt auf jeden Fall das Verteilungsmodell ab. Wenn der Empfänger nicht von
der Anwendung mitgegeben wird, werden alle Empfänger ermittelt und für jeden ein IDoc erstellt.
Wenn der Empfänger von der Anwendung mitgegeben wird, wird gegen das Verteilungsmodell
geprüft, ob er laut Verteilungsmodell berechtigt ist. Aufgrund der Filtereinstellungen im
Verteilungsmodell können in der ALE-Schicht auch Teile des IDocs weggeschnitten werden.
68 April 2001
SAP AG ALE-Programmierleitfaden
Abfrage des Verteilungsmodells
April 2001 69
ALE-Programmierleitfaden SAP AG
Aufbau des Kontrollsatzes
Wenn das empfangende System aus dem Verteilungsmodell ermittelt wurde, kann es in das Feld
rcvprn geschrieben werden. Dann muß das Feld rcvprt mit "LS" für logisches System gefüllt
werden. Falls notwendig, kann die Partnerrolle in das Feld rcvpfc geschrieben werden. Im
Regelfall wird die Partnerrolle aber nicht für ALE verwendet. Wichtig ist, daß entweder rcvprt und
rcvprn beide frei bleiben oder beide gefüllt werden. Wenn rcvprt und rcvprn initial übergeben
werden, läuft die Empfängerermitllung vollständig in der ALE-Schicht ab
70 April 2001
SAP AG ALE-Programmierleitfaden
Aufbau der Datensätze
Feld Bedeutung
segnam Segmenttyp des IDoc-Datensatz
sdata 1000 Bytes langes Characterfeld für die Nutzdaten
April 2001 71
ALE-Programmierleitfaden SAP AG
Konvertierung von Währungsbeträgen
72 April 2001
SAP AG ALE-Programmierleitfaden
Ersetzen von SAP-Codes durch ISO-Codes
April 2001 73
ALE-Programmierleitfaden SAP AG
Linksbündiges Füllen von IDoc-Feldern
74 April 2001
SAP AG ALE-Programmierleitfaden
Aufruf von master_idoc_distribute
April 2001 75
ALE-Programmierleitfaden SAP AG
Exceptions und Export-Parameter von master_idoc_distribute
Exception Auftreten
error_in_idoc_control Kein oder falscher Nachrichtentyp angegeben.
Kein oder falscher IDoc-Typ angegeben.
Kein IDoc erzeugt, obwohl Empfänger durch
Anwendung vorgegeben.
error_in_idoc_data Keine Datensätze übergeben
error_writing_idoc_status Technische Probleme beim Schreiben der Status-
Sätze.
sending_logical_system_unknown Das eigene logische System konnte nicht ermittelt
werden.
76 April 2001
SAP AG ALE-Programmierleitfaden
Beispiel für die IDoc-Erzeugung
Siehe auch:
· Coding Beispiel [Seite 105] aus der Eingangsverarbeitung
· Verwendung des Coding-Beispiels [Seite 84]
April 2001 77
ALE-Programmierleitfaden SAP AG
Beispielprogramm für die IDoc-Erzeugung
FUNCTION MASTER_IDOC_CREATE_XAMPLE.
*"---------------------------------------------------------------------
*" Lokale Schnittstelle:
*" IMPORTING
*" VALUE(APPL_HEADER) LIKE XHEAD STRUCTURE XHEAD
*" TABLES
*" APPL_ITEM STRUCTURE XITEM
*"---------------------------------------------------------------------
IF H_CREATE_IDOC IS INITIAL.
* no message flow maintained in the model, nothing to do
78 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramm für die IDoc-Erzeugung
EXIT.
ENDIF.
LOOP AT APPL_ITEM.
* put the application item record to the IDoc segment
MOVE-CORRESPONDING APPL_ITEM TO E1XITEM.
April 2001 79
ALE-Programmierleitfaden SAP AG
Beispielprogramm für die IDoc-Erzeugung
MASTER_IDOC_DATA = T_IDOC_DATA.
* exceptions
* error_in_idoc_control = 1
* error_writing_idoc_status = 2
* error_in_idoc_data = 3
* sending_logical_system_unknown = 4
* others = 5.
ENDFUNCTION.
*&---------------------------------------------------------------------
*
*& Form E1XITEM_CONDENSE
*&---------------------------------------------------------------------
*
* text
*
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
*
FORM E1XITEM_CONDENSE
CHANGING
IDOC_SEGMENT LIKE E1XITEM.
80 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramm für die IDoc-Erzeugung
*
FORM E1XITEM_CURRENCY_SAP_TO_IDOC
USING
CURRENCY_CODE LIKE TCURC-WAERS
CHANGING
IDOC_SEGMENT LIKE E1XITEM.
April 2001 81
ALE-Programmierleitfaden SAP AG
Beispielprogramm für die IDoc-Erzeugung
EXPORTING
SAP_CODE = APPL_DATA-COUNTRY
IMPORTING
ISO_CODE = IDOC_SEGMENT-COUNTRY.
* exceptions
* not_found = 1
* others = 2.
ELSE.
IDOC_SEGMENT-COUNTRY = APPL_DATA-COUNTRY.
ENDIF.
82 April 2001
SAP AG ALE-Programmierleitfaden
Beispielprogramm für die IDoc-Erzeugung
* exceptions
* not_found = 1
* others = 2.
ELSE.
IDOC_SEGMENT-SHIP_INST = APPL_DATA-SHIP_INST.
ENDIF.
April 2001 83
ALE-Programmierleitfaden SAP AG
Verwendung des Coding-Beispiels
84 April 2001
SAP AG ALE-Programmierleitfaden
Einstellung der ALE-Ausgangsverabeitung
April 2001 85
ALE-Programmierleitfaden SAP AG
ALE-Objektypen definieren
ALE-Objektypen definieren
Die Voraussetzung sowohl für die Verknüpfung zu einem Anwendungsobjekt als auch für das
Filtern in der Empfängerermittlung ist das Vorhandensein von entsprechenden ALE-Objekten.
Wenn wie im obigen Beispiel das ausgehende IDoc mit der Materialnummer verknüpft werden
soll, muß die Materialnummer aus dem IDoc-Datenteil gelesen werden. Die ALE-Schicht
übernimmt die IDoc-Daten aber als unformatierte Character-Strings. Deshalb braucht ALE die
Information, aus welchen Nachrichtentyp, welchem Segment und welchen Feldern das ALE-
Objekt "Materialnummer" gelesen werden kann. Das gleiche gilt für das ALE-Objekt "Materialart",
das für die Empfängerermittlung verwendet wird.
Um ALE-Objekte zu definieren, wählen sie in der ALE-Entwicklung IDoc-Schnittstelle ®
Datenfilterung ® Filterobjekttyp pflegen.
86 April 2001
SAP AG ALE-Programmierleitfaden
Objekttyp für die Ausgangsverknüpfung dem Nachrichtentyp zuorden
April 2001 87
ALE-Programmierleitfaden SAP AG
Anwendungsobjekttyp für die Ausgangsverknüpfung dem Nachrichtentyp zuordnen
88 April 2001
SAP AG ALE-Programmierleitfaden
Ausgang über die Nachrichtensteuerung
Customizing
· Zusätzlich zu den obigen Einstellungen muß ein Vorgangscode für den Ausgang angelegt
werden. Hinter dem Vorgangscode verbirgt sich der IDoc-erzeugende Funktionsbaustein der
Anwendung.
· Die Sendemedien, die für die Kombination Applikation/Nachrichtentart verwendet werden
können, sind "6" (ohne ALE-Modell, kein Umsetzen des NAST-Empfängers auf das
entsprechende logische System) und "A" (mit ALE-Modell).
· Für das Sendemedium "6" sollte aus der Nachrichtensteuerung die Formroutine
edi_processing(rsnasted) gerufen werden. Für das Sendemedium "A" kann man die
Formroutine ale_processing(rsnasted) verwenden bzw. eine eigene Formroutine schreiben,
die einen Aufruf von master_idoc_distribute absetzt.
Programmierung
· Die Schnittstelle des IDoc-erzeugenden Funktionsbausteins ist vorgegeben. Als Beispiel
betrachte man idoc_output_orders.
· Der Aufruf von master_idoc_distribute fällt weg.
· Es darf kein COMMIT WORK abgesetzt werden!
April 2001 89
ALE-Programmierleitfaden SAP AG
Eingangsverarbeitung implementieren
Eingangsverarbeitung implementieren
Dieser Abschnitt beschreibt die Implementation einer ALE-fähigen Schnittstelle für eingehende
IDocs. Es wird vorausgesetzt, daß Nachrichtentypen und IDoc-Typen bereits definiert sind.
Siehe auch:
Funktionsbaustein im Eingang [Seite 91]
ALE-Einstellungen [Seite 156]
Anzulegende Objekte, Ereignisse und Aufgaben [Seite 214]
Eingangsverarbeitung über SAP-Workflow [Seite 160]
Erweiterte Workflow-Programmierung [Seite 165]
90 April 2001
SAP AG ALE-Programmierleitfaden
Funktionsbaustein im Eingang
Funktionsbaustein im Eingang
In diesem Abschnitt erfahren Sie, wie Sie den Funktionsbaustein implementieren, der für die
Verarbeitung eingehender IDocs aufgerufen wird.
Zunächst wird beschrieben, welche Gesichtspunkte für die Datenkonsistenz maßgebend sind.
Dann befassen wir uns mit dem einfachsten Verarbeitungsfall, d.h. der Funktionsbaustein im
Eingang verarbeitet ein einzelnes IDoc.
Anschließend wird beschrieben, wie die Serialisierungsfunktion eingesetzt wird und Customer-
Exits hinzugefügt werden.
Danach beschäftigen wir uns mit der Implementierung eines Funktionsbausteins im Eingang, der
mehrere IDoc gleichzeitig verarbeitet ("Massenverarbeitung").
Schließlich erfahren Sie, wie Sie Datenkonsistenz beim Einsatz einer Call Transaction
garantieren.
Siehe auch:
· Einbettung eines Funktionsbausteins in die ALE-Eingangsverarbeitung [Seite 92]
· Datenkonsistenz [Seite 93]
· Verarbeitung eines einzelnen IDocs [Seite 96]
· Serialisierung [Seite 119]
· Customer-Exits [Seite 126]
· Massenverarbeitung [Seite 134]
· Call Transaction einsetzen [Seite 146]
April 2001 91
ALE-Programmierleitfaden SAP AG
Einbettung eines Funktionsbausteins in die ALE-Eingangsverarbeitung
ALE-Schicht Anwendungs-
funktionsbaustein
IDoc(s) sperren
IDoc(s) lesen
Anwendungsobjekte
Optional:
IDoc-Daten verarbeiten
Anwendungsdaten auf DB
IDoc-Status schreiben
Links schreiben
Optional:
Serialisierungsdaten
Ereignis(se) auslösen
Commit Work
IDoc(s) und
objekte entsperren
92 April 2001
SAP AG ALE-Programmierleitfaden
Datenkonsistenz
Datenkonsistenz
Siehe auch:
Gewährleistung der Datenkonsistenz [Seite 94]
Serialisierung [Seite 95]
April 2001 93
ALE-Programmierleitfaden SAP AG
Gewährleistung der Datenkonsistenz
Das IDoc enthält Buchungen; doppelte Verarbeitung würde dazu führen, daß für die
gleichen Daten zwei FI-Belege erstellt werden würden
Um sicherzustellen, daß nur eine LUW verwendet wird, darf der Anwendungsfunktionsbaustein
die Daten nicht in der Datenbank festschreiben. Die Daten werden von der ALE-Schicht
festgeschrieben, nachdem die Funktion aufgerufen wurde und die Statussätze des IDocs
aktualisiert worden sind.
Dies ist nicht möglich, wenn die Anwendungsdaten über eine Call Transaction aktualisiert
werden, da jede Call Transaction automatisch mit einem Commit Work abgeschlossen wird. In
diesem Fall muß die Transaktion selbst modifiziert werden (siehe unten).
Ein Call Dialog anstatt einer Call Transaction umgeht zwar einen Commit Work, kann aber nur
eingesetzt werden, wenn der Dialogschritt keine PERFORM ON COMMIT-Anweisungen enthält -
da der Commit über ALE nach Abschluß des Dialogs erfolgt, gehen alle globalen Variablen, die
während des Dialogs gesetzt wurden, verloren. Verwenden Sie daher einen Call Dialog nur mit
äußerster Vorsicht!
Enthalten die IDocs Stammdaten (z.B. Kundendaten), dann erweist sich das Problem als nicht so
akut, da fehlende Daten immer bei Bedarf noch einmal übertragen werden können, und eine
doppelte Verarbeitung eines IDocs führt nicht dazu, daß ein Beleg zweimal erstellt wird.
94 April 2001
SAP AG ALE-Programmierleitfaden
Serialisierung
Serialisierung
Falls die richtige Reihenfolge bei der Verarbeitung der eingegangenen IDocs entscheidend ist,
können Sie die ALE-Serialisierungsfunktion einsetzen, um festzustellen, ob ein IDoc
übernommen wurde oder nicht. Die Serialisierungsfunktion wird unten näher beschrieben.
April 2001 95
ALE-Programmierleitfaden SAP AG
Verarbeitung eines einzelnen IDocs
96 April 2001
SAP AG ALE-Programmierleitfaden
Namenskonvention
Namenskonvention
Wir empfehlen, den Funktionsbaustein für die Verarbeitung eingegangener IDocs mit dem
Nachrichtentyp "MSGTYP" "IDOC_INPUT_MSGTYP" zu nennen; Kunden können
"Z_IDOC_INPUT_MSGTYP" verwenden.
April 2001 97
ALE-Programmierleitfaden SAP AG
Die Schnittstelle des Funktionsbausteins
98 April 2001
SAP AG ALE-Programmierleitfaden
Import-Parameter
Import-Parameter
Parameter Bedeutung
IDoc_Contrl Diese Tabelle enthält einen Eintrag für den Steuersatz der
IDocs. Der Funktionsbaustein verwendet sie nur für den
Import von Daten. Normalerweise verwendet der Funktions-
Funktionsbaustein im Eingang nur die Felder Docnum (die
IDoc-Nummer) und entweder Mestyp (Nachrichtentyp) oder
IDoctp (Basis-IDoc-Typ).
IDoc_Data Diese Tabelle enthält nur einen Eintrag für jedes Idoc-
Datensegment. Die folgenden Felder sind für den Funktions-
baustein im Eingang relevant:
Docnum die IDoc-Nummer
Segnam der Segmentname
Sdata die Daten des Segments
Input_Method Zeigt an, ob das IDoc im Dialog (z.B. über Call Transaction)
oder nicht verarbeitet werden soll. Mögliche Werte sind:
" " Hintergrund (kein Dialog)
"A" zeigt alle Dynpros
"E" Startet den Dialog an der Stelle im Dynpro, an
dem der Fehler aufgetreten ist
Hinweis: Der Parameter kann die Werte "A" oder "E" nur
annehmen, wenn die ALE-Einstellung für den Funtions-
baustein Dialogverarbeitung unterstützt.
Mass_Processing Wird nicht mehr verwendet (außer bei fortgeschrittener
Workflow-Programmierung). Ist initial, wenn die Methoden
InputForeground oder InputBackground vorgesehen sind,
ansonsten enthält er den Wert "X".
April 2001 99
ALE-Programmierleitfaden SAP AG
IDoc Verarbeitung
IDoc Verarbeitung
Der Funktionsbaustein sollte die folgenden Schritte ausführen:
· Prüfen Sie, ob das IDoc den richtigen Nachrichtentyp enthält (Feld Idoc_Contrl-Mestyp). Ist
dies nicht der Fall, lösen Sie die Ausnahme Wrong_Function_Called mit der entsprechenden
Meldung aus.
- Wenn Sie einen Funktionsbaustein im Eingang für Stammdaten implementieren, die vom
Kunden "reduziert" werden können, prüfen Sie nicht den Nachrichtentyp, sondern den
Basis-IDoc-Typ (Feld Idoc_Contrl-Idoctp)
· Initialisieren/aktualisieren Sie alle globalen Variablen bzw. Tabellen. Der Funktionsbaustein
im Eingang kann mehrmals von einem Prozeß aufgerufen werden. Die globalen Variablen
sind daher beim zweiten Mal mit Werten versorgt.
· Konvertieren Sie die Character-Daten in table Idoc_Data in internes Format in internen
Tabellen. Sehen Sie im unten folgenden Beispiel nach, wie Sie dazu vorgehen müssen.
Besondere Beachtung sollten Sie den Feldern schenken, die enthalten:
- Maßeinheiten (ISO-Code im IDoc)
- Währungscodes (ISO-Code im IDoc)
- Ländercodes (ISO-Code im IDoc)
- Versandvorschriften (ISO-Code im IDoc)
- Geldbeträge (Konvertierungsfaktor erforderlich)
- Datums- und Zeitangaben (siehe unten)
Felder mit Datums- und Zeitangaben können bei der Eingangsverarbeitung zu Fehlern führen,
wenn das Feld im IDoc leer ist: wenn in ABAP/4 ein leeres Zeichenfeld in ein Datenfeld
übertragen wird, bleibt das Datenfeld leer, anstatt initial (nur Nullen), d.h., das Datenfeld hat
schließlich einen ungültigen Wert. Die Fehler treten dann bei der nachfolgenden Verarbeitung
auf, sobald das Datenfeld gegen den Initialwert "if DateField is initial..." geprüft wird. Um dies zu
vermeiden, entfernen Sie den Wert im Datenfeld, wenn das IDoc-Feld leer ist, wie im Beispiel-
Coding gezeigt.
Denken Sie daran: der Funktionsbaustein sollte nicht die Daten auf der Datenbank
festschreiben (Commit Work).
Wenn Sie die Wahl haben, aktualisieren Sie die Datenbank nicht mit Call Function
"xxx" In Update Task - dies ist für die ALE-Verarbeitung nicht erforderlich und erhöht
nur die Last der Datenbank
Export-Parameter
Siehe auch:
Exportparameter des eingehenden Funktionsbausteins [Seite 102]
Exportparameter bei erfolgreicher IDoc-Verarbeitung [Seite 103]
Exportparameter bei fehlerhafter IDoc-Verarbeitung [Seite 104]
Parameter Bedeutung
In_Update_Task Flag: Soll die Verbuchungstask die Datenbank aktualisieren?
D.h., aktualisiert Ihr Funktionsbaustein die Datenbank mit Call
Function "xxx" In Update Task?
Call_Transaction_Done Flag: Wurde eine Call Transaction verwendet, die den IDoc-
Status aktualisiert hat?
Workflow_Result Ein Parameter, der kontrolliert, ob Ereignisse ausgelöst
wurden.
Application_Variable Ein optionaler Parameter, der an den Workflow übergeben
wird.
Idoc_Status Eine Tabelle, die einen Satz für jedes verarbeitete IDoc enthält.
Gültige Werte für das Feld Status sind:
"51" Fehler
"53" IDoc erfolgreich verarbeitet
Return_Variables Eine Tabelle, die die Belegnummern des verarbeiteten IDocs
und des Anwendungsobjekts enthält. Diese Nummern werden
für den Workflow (z.B. Fehlerbehandlung) verwendet und um
das IDoc mit dem entsprechenden Anwendungsobjekt zu
verknüpfen.
Serialization_Info Noch nicht relevant - siehe Abschnit zu Serialisierung
Parameter Wert
In_Update_Task " " (z.B. Initialwert) -
Verbuchungstask nicht verwendet
Call_Transaction " " (z.B. Initialwert)
_Done
Workflow_Result "99999"
Application_Vari " "(z.B. Initialwert)
able
Idoc_Status Die Tabelle muß einen Satz
enthalten, deren Felder-
folgende Werte besitzen:
Docnum: 4711
Status: 51
Msgid, Msgno etc. müssen die
Kennung der Fehler-
meldung, Nummer etc. enthalten.
Return_Variable Die Tabelle muß folgenden Eintrag
s haben:
Wf_param Doc_Number
"Error_IDOCs" 4711
Serialization_Inf Leer
o
FUNCTION IDOC_INPUT_XAMPLE.
*"---------------------------------------------------------------------
-
*"
*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"---------------------------------------------------------------------
-
* ---------------------------------------------------------------------
-
* ---------------------- 05 July 1996 ---------------------------------
-
* ---------------------------------------------------------------------
-
* Example function module for processing inbound IDocs for ALE or EDI.
* This example applies for processing
*
* with - one IDoc at a time
*
* without - serialization
* - customer-exits
* - calling an ALE-enabled transaction
* - mass processing (more than one IDoc at a time)
* >> The following line must appear in the global part of your
* >> function group:
* include mbdconwf. "Report containing the ALE constants.
* The ALE constants start with 'c_'.
* Initialize variables
SUBRC = 0.
WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
WORKFLOW_RESULT = C_WF_RESULT_OK.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
APPEND RETURN_VARIABLES.
ENDIF.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM IDOC_PROCESS_XAMPLE *
*---------------------------------------------------------------------*
* This routine creates an application document based on the IDoc's *
* contents. Object_Number contains the new document's number. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'' "Field name
'idoc_process_xample'. "Form routine
ELSE.
* Fill the remaining export parameters
OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number
t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_ok.
t_idoc_status-msgty = 'S'.
t_idoc_status-msgid = your_msgid. "Global variable.
t_idoc_status-msgno = msgno_success."Global variable.
t_idoc_status-msgv1 = object_number.
APPEND T_IDOC_STATUS.
ENDIF. "if sy-subrc <> 0.
ENDIF. "if subrc = 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM IDOC_INTERPRET *
*---------------------------------------------------------------------*
* This routine checks that the correct message type is being used, *
* and then converts and moves the data from the IDoc segments to the *
* internal structure f_xhead and internal table t_xitem. *
* If an error occurs, t_idoc_status is filled an subrc <> 0. *
*---------------------------------------------------------------------*
* --> T_IDOC_STATUS *
* --> T_XITEM *
* --> F_IDOC_DATA *
* --> F_XHEAD *
* --> SUBRC *
*---------------------------------------------------------------------*
FORM IDOC_INTERPRET TABLES T_IDOC_DATA STRUCTURE EDIDD
T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC LIKE SY-SUBRC.
TYPE 'E'
NUMBER MSGNO_WRONG_FUNCTION "Global variable
WITH F_IDOC_CONTRL-MESTYP "message type
'IDOC_INPUT_XAMPLE' "Your function module.
F_IDOC_CONTRL-SNDPRT "Sender partner type
F_IDOC_CONTRL-SNDPRN "Sender number.
RAISING WRONG_FUNCTION_CALLED.
ENDIF.
* Loop through the IDoc's segments and convert the data from the IDoc
* format to the internal format.
LOOP AT T_IDOC_DATA WHERE DOCNUM = F_IDOC_CONTRL-DOCNUM.
CASE T_IDOC_DATA-SEGNAM.
WHEN 'E1XHEAD'.
PERFORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS
USING T_IDOC_DATA
CHANGING F_XHEAD
SUBRC.
WHEN 'E1XITEM'.
PERFORM E1XITEM_PROCESS TABLES T_XITEM
T_IDOC_STATUS
USING F_XHEAD-CURRENCY
T_IDOC_DATA
CHANGING SUBRC.
ENDCASE.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM E1XHEAD_PROCESS *
*---------------------------------------------------------------------*
* This routine fills 'f_xhead' out of segment e1xhead. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
*---------------------------------------------------------------------*
* --> F_IDOC_DATA IDoc segment containing e1xhead fields *
* <-- F_XHEAD Internal structure containing doc. header *
* <-- T_IDOC_STATUS Status fields for error handling *
* <-- SUBRC Return code: non-zero if an error occurred *
*---------------------------------------------------------------------*
FORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC LIKE SY-SUBRC.
F_E1XHEAD = F_IDOC_DATA-SDATA.
ENDFORM. "e1xhead_process
*---------------------------------------------------------------------*
* FORM E1XITEM_PROCESS *
*---------------------------------------------------------------------*
* This routine converts the data in the segment 'e1xitem' for *
* to the format of table 't_xitem' and appends it to the table. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
*---------------------------------------------------------------------*
* --> F_IDOC_DATA IDoc segment *
* <-- T_XITEM Document items to be updated to database *
* <-- T_IDOC_STATUS Status fields filled if an error occurred *
* <-- SUBRC Return code: 0 if all OK *
*---------------------------------------------------------------------*
FORM E1XITEM_PROCESS TABLES T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING CURRENCY LIKE XHEAD-CURRENCY
F_IDOC_DATA STRUCTURE EDIDD
CHANGING SUBRC LIKE SY-SUBRC.
F_E1XITEM = F_IDOC_DATA-SDATA.
SUBRC.
APPEND T_XITEM.
ENDFORM.
*---------------------------------------------------------------------*
* FORM E1XHEAD_CODES_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO-Codes in f_e1xhead to SAP-codes in f_xhead. *
* f_idoc_data, t_idoc_status and subrc are used for error handling. *
*---------------------------------------------------------------------*
FORM E1XHEAD_CODES_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_E1XHEAD STRUCTURE E1XHEAD
F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC.
CHECK SUBRC = 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM E1XITEM_CODES_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO-Codes in f_e1xitem to SAP-codes in f_xitem *
ENDFORM.
*---------------------------------------------------------------------*
* FORM E1XITEM_VALUE_IDOC_TO_SAP *
*---------------------------------------------------------------------*
* Converts fields containing monetary values in f_e1xitem to *
* the internal representation in f_xitem. *
* f_idoc_data, t_idoc_status and subrc are used for error handling. *
*---------------------------------------------------------------------*
FORM E1XITEM_VALUE_IDOC_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_E1XITEM STRUCTURE E1XITEM
CURRENCY LIKE XHEAD-CURRENCY
F_IDOC_DATA STRUCTURE EDIDD
CHANGING F_XITEM STRUCTURE XITEM
SUBRC LIKE SY-SUBRC.
SAP_AMOUNT = F_XITEM-VALUE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
'value' "Field name
'e1xitem_value_idoc_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM E1XHEAD_DATE_TIME *
*---------------------------------------------------------------------*
* Moves date and time fields in f_e1xhead to the fields in f_xhead. *
*---------------------------------------------------------------------*
FORM E1XHEAD_DATE_TIME USING F_E1XHEAD STRUCTURE E1XHEAD
CHANGING F_XHEAD STRUCTURE XHEAD.
ENDFORM.
*---------------------------------------------------------------------*
* FORM CURRENCY_CODE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO currency code 'iso_currency_code' to SAP code in *
* 'sap_currency_code' *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM CURRENCY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_CURRENCY_CODE LIKE TCURC-ISOCD
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_CURRENCY_CODE LIKE TCURC-WAERS
SUBRC LIKE SY-SUBRC.
IF ISO_CURRENCY_CODE IS INITIAL.
CLEAR SAP_CURRENCY_CODE.
ELSE.
CALL FUNCTION 'CURRENCY_CODE_ISO_TO_SAP'
EXPORTING
ISO_CODE = ISO_CURRENCY_CODE
IMPORTING
SAP_CODE = SAP_CURRENCY_CODE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'currency_code_iso_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM COUNTRY_CODE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO country code 'iso_country_code' to SAP code in *
* 'sap_country_code' *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM COUNTRY_CODE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_COUNTRY_CODE LIKE T005-INTCA
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_COUNTRY_CODE LIKE T005-LAND1
SUBRC LIKE SY-SUBRC.
OTHERS = 1.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'country_code_iso_to_sap'. "Form routine
ENDIF. "if sy-subrc <> 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM UNIT_OF_MEASURE_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO unit of measure code 'iso_unit_of_measure' to SAP *
* code in 'sap_unit_of_measure'. *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM UNIT_OF_MEASURE_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_UNIT_OF_MEASURE LIKE T006-ISOCODE
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_UNIT_OF_MEASURE LIKE T006-MSEHI
SUBRC LIKE SY-SUBRC.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
ENDFORM.
*---------------------------------------------------------------------*
* FORM SHIPPING_INSTRUCT_ISO_TO_SAP *
*---------------------------------------------------------------------*
* Converts ISO package code 'iso_package_type' to SAP code for *
* purchasing shipping instructions in 'sap_shipping_instructions'. *
* f_idoc_data, field_name, t_idoc_status and subrc are used for *
* for error handling. *
*---------------------------------------------------------------------*
FORM SHIPPING_INSTRUCT_ISO_TO_SAP
TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING ISO_PACKAGE_TYPE LIKE T027A-IVERS
F_IDOC_DATA STRUCTURE EDIDD
FIELD_NAME LIKE BDIDOCSTAT-SEGFLD
CHANGING SAP_SHIPPING_INSTRUCTIONS LIKE T027A-EVERS
SUBRC LIKE SY-SUBRC.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING F_IDOC_DATA
SY
FIELD_NAME
'shipping_instruct_iso_to_sap'. "Form rout.
ENDIF. "if sy-subrc <> 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM STATUS_FILL_SY_ERROR *
*---------------------------------------------------------------------*
* Fills the structure t_idoc_status with the import parameters *
* plus the relevant sy fields. *
*---------------------------------------------------------------------*
* --> IDOC_NUMBER IDoc number *
* --> SEGNUM Segment number *
* --> SEGFLD Field in segment *
* --> ROUTID Name of routine *
* <-- T_IDOC_STATUS Status fields *
*---------------------------------------------------------------------*
FORM STATUS_FILL_SY_ERROR TABLES T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_DATA STRUCTURE EDIDD
VALUE(F_SY) STRUCTURE SY
SEGFLD LIKE BDIDOCSTAT-SEGFLD
ROUTID LIKE BDIDOCSTAT-
ROUTID.
t_idoc_status-docnum = f_idoc_data-docnum.
t_idoc_status-status = c_idoc_status_error.
t_idoc_status-msgty = f_sy-msgty.
t_idoc_status-msgid = f_sy-msgid.
T_IDOC_STATUS-MSGNO = F_SY-MSGNO.
t_idoc_status-msgv1 = f_sy-msgv1.
t_idoc_status-msgv2 = f_sy-msgv2.
t_idoc_status-msgv3 = f_sy-msgv3.
t_idoc_status-msgv4 = f_sy-msgv4.
t_idoc_status-segnum = f_idoc_data-segnum.
t_idoc_status-segfld = segfld.
t_idoc_status-repid = f_sy-repid.
t_idoc_status-routid = routid.
APPEND T_IDOC_STATUS.
ENDFORM.
Das Beispielprogramm für die Serialisierung [Seite 120] zeigt das zusätzliche
Coding, das im Funktionsbaustein IDOC_INPUT_XAMPLE erforderlich ist, um
übernommene IDocs zu erkennen und eine entsprechende Fehlermeldung
zurückzugeben. Im Beispiel wird angenommen, daß übernommene IDocs manuell
behandelt werden müssen, d.h., sie können nicht automatisch verarbeitet werden
FUNCTION IDOC_INPUT_XAMPLE2.
*"---------------------------------------------------------------------
-
*"
*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"---------------------------------------------------------------------
-
* ---------------------------------------------------------------------
-
* ---------------------- 05 July 1996 ---------------------------------
-
* ---------------------------------------------------------------------
-
* Example function module for processing inbound IDocs for ALE or EDI.
* This example applies for processing
*
* with - one IDoc at a time
* - serialization
*
* without - customer-exits
* - calling an ALE-enabled transaction
* - mass processing (more than one IDoc at a time)
* >> The following line must appear in the global part of your
* >> function group:
* include mbdconwf. "Report containing the ALE constants.
* The ALE constants start with 'c_'.
* Initialize variables
SUBRC = 0.
WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
WORKFLOW_RESULT = C_WF_RESULT_OK.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
APPEND RETURN_VARIABLES.
ENDIF.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM IDOC_PROCESS_XAMPLE2 *
*---------------------------------------------------------------------*
* This routine creates an application document based on the IDoc's *
* contents. Object_Number contains the new document's number. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
* Note: if more than one error is detected, t_idoc_status contains *
* more than one status record. *
*---------------------------------------------------------------------*
* --> F_IDOC_CONTRL IDoc control record *
* --> T_IDOC_DATA IDoc data records *
* <-- T_IDOC_STATUS IDoc status records *
* <-- OBJECT_NUMBER Created document's number *
* <-- SUBRC Return code *
*---------------------------------------------------------------------*
FORM IDOC_PROCESS_XAMPLE2
TABLES T_IDOC_DATA STRUCTURE EDIDD
T_SERIALIZATION_INFO STRUCTURE BDI_SER
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO
SUBRC LIKE SY-SUBRC.
DOCUMENT_NUMBER = DOCUMENT_NUMBER
TABLES
XITEM = T_XITEM
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'' "Field name
'idoc_process_xample'. "Form routine
ELSE.
* Fill the remaining export parameters
OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number
t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_ok.
t_idoc_status-msgty = 'S'.
t_idoc_status-msgid = your_msgid. "Global variable.
t_idoc_status-msgno = msgno_success."Global variable.
t_idoc_status-msgv1 = object_number.
APPEND T_IDOC_STATUS.
ENDIF. "if sy-subrc <> 0.
ENDIF. "if subrc = 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM IDOC_INTERPRET2 *
*---------------------------------------------------------------------*
* This routine checks that the correct message type is being used, *
* then checks that the IDoc has not been overtaken (serialization), *
* and then converts and moves the data from the IDoc segments to the *
* internal structure f_xhead and internal table t_xitem. *
* If an error occurs, t_idoc_status is filled an subrc <> 0. *
*---------------------------------------------------------------------*
* --> T_IDOC_STATUS *
* --> T_XITEM *
* --> F_IDOC_DATA *
* --> F_XHEAD *
* --> SUBRC *
*---------------------------------------------------------------------*
FORM IDOC_INTERPRET2 TABLES T_IDOC_DATA STRUCTURE EDIDD
T_SERIALIZATION_INFO STRUCTURE BDI_SER
T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
ENDIF.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 'idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'materialid' "Field name
'e1xitem_process'. "Form routine
EXIT. "Leave the routine.
ENDIF. "if sy-subrc <> 0.
* Check whether the IDoc has been flagged as having been overtaken.
IF NOT T_SERIALIZATION_INFO-SERFLAG IS INITIAL.
* IDoc has been overtaken: in this example, flag as an error and
quit.
SUBRC = 1.
* Put the error message into 't_idoc_status'
t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_error.
t_idoc_status-msgty = 'E'.
T_IDOC_STATUS-MSGID = YOUR_MSGID. "Global variable
T_IDOC_STATUS-MSGNO = MSGNO_IDOC_OVERTAKEN. "Global variable
APPEND T_IDOC_STATUS.
EXIT. "Leave the routine.
ENDIF. "if not t_serialization_info-serflag is initial.
* >>>>>>>>>>>>> Serialization check (End)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* Loop through the IDoc's segments and convert the data from the IDoc
* format to the internal format.
LOOP AT T_IDOC_DATA WHERE DOCNUM = F_IDOC_CONTRL-DOCNUM.
CASE T_IDOC_DATA-SEGNAM.
WHEN 'E1XHEAD'.
PERFORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS
USING T_IDOC_DATA
CHANGING F_XHEAD
SUBRC.
WHEN 'E1XITEM'.
PERFORM E1XITEM_PROCESS TABLES T_XITEM
T_IDOC_STATUS
USING F_XHEAD-CURRENCY
T_IDOC_DATA
CHANGING SUBRC.
ENDCASE.
ENDLOOP.
ENDFORM.
Customer-Exits
Customer-Exits im Funktionsbaustein im Eingang erlauben dem Benutzer:
· die Verarbeitung der SAP-Segmente zu beeinflussen, z.B. durch Ändern von Feldwerten.
· auf die Kundensegmente zuzugreifen, die sie über das IDoc-Definitionswerkzeug dem SAP-
IDoc hinzugefügt haben.
Das Beispielprogramm für einen Customer-Exit [Seite 127] dient als Vorlage für die
Implementation eines Customer-Exits.
FUNCTION IDOC_INPUT_XAMPLE3.
*"---------------------------------------------------------------------
-
*"
*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"---------------------------------------------------------------------
-
* ---------------------------------------------------------------------
-
* --------------------------- 05 July 1996 ----------------------------
-
* ---------------------------------------------------------------------
-
* Example function module for processing inbound IDocs for ALE or EDI.
* This example applies for processing
*
* with - one IDoc at a time
* - serialization
* - customer-exits
*
* without - calling an ALE-enabled transaction
* - mass processing (more than one IDoc at a time)
* >> The following line must appear in the global part of your
* >> function group:
* include mbdconwf. "Report containing the ALE constants.
* The ALE constants start with 'c_'.
* Initialize variables
SUBRC = 0.
IF SY-SUBRC <> 0.
SUBRC = 1.
PERFORM STATUS_FILL_SY_ERROR TABLES IDOC_STATUS
USING IDOC_DATA
SY
' '
'customer-function 001'.
ENDIF.
* >>>>>>>>>>>>> Customer exit 1 (End)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
WORKFLOW_RESULT = C_WF_RESULT_OK.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
APPEND RETURN_VARIABLES.
ENDIF.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM IDOC_PROCESS_XAMPLE3 *
*---------------------------------------------------------------------*
* This routine creates an application document based on the IDoc's *
* contents. Object_Number contains the new document's number. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
* Note: if more than one error is detected, t_idoc_status contains *
* more than one status record. *
*---------------------------------------------------------------------*
* --> F_IDOC_CONTRL IDoc control record *
* --> T_IDOC_DATA IDoc data records *
* <-- T_IDOC_STATUS IDoc status records *
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'' "Field name
'idoc_process_xample'. "Form routine
ELSE.
* Fill the remaining export parameters
OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number
t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_ok.
t_idoc_status-msgty = 'S'.
t_idoc_status-msgid = your_msgid. "Global variable.
t_idoc_status-msgno = msgno_success."Global variable.
t_idoc_status-msgv1 = object_number.
APPEND T_IDOC_STATUS.
ENDIF. "if sy-subrc <> 0.
ENDIF. "if subrc = 0.
ENDFORM.
*---------------------------------------------------------------------*
* FORM IDOC_INTERPRET3 *
*---------------------------------------------------------------------*
* This routine checks that the correct message type is being used, *
* then checks that the IDoc has not been overtaken (serialization), *
* and then converts and moves the data from the IDoc segments to the *
* internal structure f_xhead and internal table t_xitem. *
* If an error occurs, t_idoc_status is filled an subrc <> 0. *
*---------------------------------------------------------------------*
* --> T_IDOC_STATUS *
* --> T_XITEM *
* --> F_IDOC_DATA *
* --> F_XHEAD *
* --> SUBRC *
*---------------------------------------------------------------------*
FORM IDOC_INTERPRET3 TABLES T_IDOC_DATA STRUCTURE EDIDD
T_XITEM STRUCTURE XITEM
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING F_XHEAD STRUCTURE XHEAD
SUBRC LIKE SY-SUBRC.
ENDIF.
* Loop through the IDoc's segments and convert the data from the IDoc
* format to the internal format.
LOOP AT T_IDOC_DATA WHERE DOCNUM = F_IDOC_CONTRL-DOCNUM.
CASE T_IDOC_DATA-SEGNAM.
WHEN 'E1XHEAD'.
PERFORM E1XHEAD_PROCESS TABLES T_IDOC_STATUS
USING T_IDOC_DATA
CHANGING F_XHEAD
SUBRC.
WHEN 'E1XITEM'.
PERFORM E1XITEM_PROCESS TABLES T_XITEM
T_IDOC_STATUS
USING F_XHEAD-CURRENCY
T_IDOC_DATA
CHANGING SUBRC.
ENDCASE.
IF SY-SUBRC <> 0.
SUBRC = 1.
PERFORM STATUS_FILL_SY_ERROR TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
' '
'customer-function 001'.
ENDIF.
* >>>>>>>>>>>>> Customer exit 2 (End)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ENDLOOP.
ENDFORM.
Massenverarbeitung
Die gleichzeitige Verarbeitung von mehreren IDocs aus folgenden Gründen den Durchsatz
verbessern:
· es werden mehr als ein IDoc pro Commit Work verarbeitet.
· die Funktion kann so kodiert werden, daß mit einem Aktualisierungsbefehl ("array insert")
mehrere Einträge in einer Tabelle hinzugefügt werden.
Siehe auch:
Import-Parameter [Seite 135]
Export-Parameter [Seite 136]
Beispielprogram für die IDoc-Massenverarbeitung [Seite 141]
Import-Parameter
Die Import-Parameter haben die gleiche Bedeutung wie bei der Verarbeitung eines einzelnen
IDocs. Die Tabelle Idoc_Contrl kann jedoch Steuersätze von mehr als einem IDoc und Idoc_Data
die Datensätze von mehr als einem IDoc enthalten.
Export-Parameter
Die Export-Parameter müssen mit fast den gleichen Werten wie bei der Verarbeitung eines
einzelnen IDoc versorgt werden. Einige der IDocs können erfolgreich verarbeitet werden, andere
hingegen können mit Fehlern behaftet sein.
Das folgende Beispiel verdeutlicht, wie Sie die Export-Parameter füllen müssen. In jedem Fall
werden drei IDocs mit den Nummern 4711, 4712 und 4713 an den Funktionsbaustein im Eingang
übergeben. Im ersten Fall werden alle IDocs erfolgreich verarbeitet und die
Anwendungsbelegnummer 1234, 1235 und 1236 angelegt. Im zweiten Fall werden das erste und
dritte IDoc erfolgreich verarbeitet, während das zweite IDoc einen Fehler verursacht.
Werte für Export-Parameter, wenn IDocs im Paket erfolgreich verarbeitet werden. IDoc-
Nummern 4711 - 4713 haben Anwendungsobjektnummern 1234 - 1236 angelegt.
Parameter Wert
In_Update_Task " " Verbuchungstask nicht
verwendet
"X" Verbuchungstask verwendet
Call_Transactio " "
n_Done
Workflow_Resul "0"
t
Application_Vari " " (z.B. Initialwert)
able
Idoc_Status Die Tabelle muß drei Sätze
enthalten, deren Felder wie folgt
gefüllt sind:
Docnum Status
4711 53
4712 53
4713 53
Optional können die Felder Msgid
etc. die Erfolgsmeldung der
Anwendung enthalten.
Return_Variable Die Tabelle muß die folgenden
s sechs Einträge enthalten:
Wf_param Doc_Number
"Processed_IDOCs" 4711
"Appl_Objects" 1234
"Processed_IDOCs" 4712
"Appl_Objects" 1235
"Processed_IDOCs" 4713
"Appl_Objects" 1236
Werte für die Export-Parameter, wenn IDocs im Paket verarbeitet werden, wobei lediglich
IDoc-Nr. 4712 fehlerhaft ist. IDoc-Nummern 4711 und 4713 legen
Anwendungsobjektnummern 1234 und 1235 an.
Parameter Wert
In_Update_Task " " (z.B. Initialwert) -
Verbuchungstask nicht verwendet
Call_Transactio " " (z.B. Initialwert)
n_Done
Workflow_Resul "99999"
t
Application_Vari " " (z.B. Initialwert)
able
Idoc_Status Die Tabelle muß drei Sätze
enthalten, deren Felder folgende
Werte haben:
Docnum Status
4711 53
4712 51
4713 53
Die Felder Msgid etc. des
Statussatzes für IDoc 4712 müssen
die Fehlermeldung enthalten.
Return_Variable Die Tabelle muß die folgenden fünf
s Einträge enthalten:
Wf_param Doc_Number
"Processed_IDOCs" 4711
"Appl_Objects" 1234
"Error_IDOCs" 4712
"Processed_IDOCs" 4713
"Appl_Objects" 1235
FUNCTION IDOC_INPUT_XAMPLE4.
*"---------------------------------------------------------------------
-
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" VALUE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"---------------------------------------------------------------------
-
* ---------------------------------------------------------------------
-
* ---------------------- 05 July 1996 ---------------------------------
-
* ---------------------------------------------------------------------
-
* Example function module for processing inbound IDocs for ALE or EDI.
* This example applies for processing
*
* with - mass processing (more than one IDoc at a time)
*
* without - serialization
* - customer-exits
* - calling an ALE-enabled transaction
* >> The following line must appear in the global part of your
* >> function group:
* Initialize variables
SUBRC = 0.
WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
APPEND RETURN_VARIABLES.
ENDIF.
* Once all IDocs have been processed, insert the application data to
* the database (as long as there is some data to insert).
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM IDOC_PROCESS_XAMPLE4 *
*---------------------------------------------------------------------*
* This routine adds an application document to tables t_xhead and *
* t_xitem based on the IDoc'S contents. *
* Object_Number contains the new document's number. *
* If an error occurs, subrc is non-zero, t_idoc_status is filled. *
* Note: if more than one error is detected, t_idoc_status contains *
* more than one status record. *
*---------------------------------------------------------------------*
* --> F_IDOC_CONTRL IDoc control record *
* --> T_IDOC_DATA IDoc data records *
* <-- T_XHEAD Application document's header records *
* <-- T_XITEM Application document's line item records *
* <-- T_IDOC_STATUS IDoc status records *
* <-- OBJECT_NUMBER Created document's number *
* <-- SUBRC Return code *
*---------------------------------------------------------------------*
FORM IDOC_PROCESS_XAMPLE4
TABLES T_IDOC_DATA STRUCTURE EDIDD
T_IDOC_STATUS STRUCTURE BDIDOCSTAT
T_XHEAD STRUCTURE XHEAD
T_XITEM STRUCTURE XITEM
USING F_IDOC_CONTRL STRUCTURE EDIDC
CHANGING OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO
SUBRC LIKE SY-SUBRC.
IF SY-SUBRC <> 0.
SUBRC = 1.
* Put the error message into 't_idoc_status'
PERFORM STATUS_FILL_SY_ERROR
TABLES T_IDOC_STATUS
USING T_IDOC_DATA
SY
'' "Field name
'idoc_process_xample'. "Form routine
ELSE.
* Fill the remaining export parameters
OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number
append f_xhead to t_xhead.
APPEND LINES OF T_ONE_XITEM TO T_XITEM.
t_idoc_status-docnum = f_idoc_contrl-docnum.
t_idoc_status-status = c_idoc_status_ok.
t_idoc_status-msgty = 'S'.
t_idoc_status-msgid = your_msgid. "Global variable.
t_idoc_status-msgno = msgno_success."Global variable.
t_idoc_status-msgv1 = object_number.
APPEND T_IDOC_STATUS.
ENDIF. "if sy-subrc <> 0.
ENDIF. "if subrc = 0.
ENDFORM.
ALE-fähige Transaktionen
Eine Transaktion ist “ALE-fähig”, wenn sie die folgenden Kriterien erfüllt:
· Am Anfang des PBO-Modules des ersten Bildes muß sie die IDoc-Nummer aus einer
Memory-Variablen lesen und den ALE-Funktionsbaustein Idoc_Input_Open aufrufen und
ihm die IDoc-Nummer übergeben (Parameter Document_Number).
· Bevor die Daten in der Datenbank aktualisiert werden, muß die Transaktion den ALE-
Funktionsbaustein Idoc_Input_Close aufrufen. Dieser Funktionsbaustein darf nicht aus
einem Funktionsbaustein aufgerufen werden, der in der Verbuchungstask verarbeitet wird,
z.B. "Call Function "xxx" In Update Task". Stattdessen sollte er direkt vor oder nach den
anderen Verbuchungsfunktionsbausteine "xxx". Das liegt daran, daß er auf globale Daten
zurückgreift, die von Idoc_Input_Open geschrieben wurden.
Idoc_Input_Close schreibt den IDoc Status in dem gleichen Verbuchungstask wenn der
Schnittstellenparameter In_Update_Task auf "X" gesetzt wird.
Beispiel Datanbankupdatecoding:
- call function ""UPDATE_APPL_TABLES " in update task tables...
- call function "IDOC_INPUT_CLOSE" exporting...
- commit work.
Die Parameter des Funktionbausteins Idoc_Input_Close muß mit folgenden Werten versorgt
sein:
Parameter Wert
Workflow_Res "0"
ult
Application_Va " " (z.B. Initialwert)
riable
In_Update_Tas " " Die Transaktion verwendet nicht
k die
Verbuchungstask
"X" Die Transaktion verwendet die
Verbuchungstask
Idoc_Control Inhalt des Export-Parameters
Idoc_Control von Idoc_Input_Open
Idoc_Status Die Tabelle muß einen Satz enthalten,
dessen Felder folgende Werte hat:
Docnum: 4711
Status:53
Optional können die Felder Msgid etc.
die Erfolgsmeldung der Anwendung
enthalten.
Kontext 1 Kontext 2
IDoc(s) lesen
IDoc-Daten
Call Transaction-Tabelle
IDoc-Nr. in Memory
IDoc sperren
Optional:
Anwendungsobjekte
Transaktionsdaten
Anwendungsdaten in DB
IDoc-Status schreiben
Links schreiben
Optional:
Serialisierungsdaten
Ereignis(se)
Commit Work
IDoc und
automatisch entsperrt
· Der Code der Transaktion wird separat von der ALE-Schicht und dem
Funktionsbaustein im Eingang in einem eigenen Kontext verarbeitet.
Kontext 1 Kontext 2
IDoc(s) lesen
IDoc-Daten verarbeiten
Call Transaction-Tabelle
IDoc-Nr. in Memory
IDoc sperren
Optional:
Anwendungsobjekte
Fehlermeldung
IDoc und
automatisch
IDoc(s) sperren
IDoc-Status schreiben
Links schreiben
Optional:
Ereignis(se)
Commit Work
IDoc(s) entsperren
Eingang erfolgreich
War die Call Transaction erfolgreich, müssen die Export-Parameter des Funktionsbausteins im
Eingang wie folgt mit Werten versehen werden:
Werte für die Export-Parameter bei der Verarbeitung eines einzelnen IDoc über eine ALE-
fähige Call Transaction, wobei das IDoc erfolgreich verarbeitet wurde.
Parameter Wert
In_Update_Task " " (z.B. Initialwert)
Call_Transaction_Done "X"
Workflow_Result "0"
Application_Variable " " (z.B. Initialwert)
Idoc_Status Leer
Return_Variables Leer
Serialization_Info Leer
Eingang fehlerhaft
Ist die Call Transaction gescheitert, müssen die Export-Parameter wie bei der Verarbeitung eines
einzelnen IDocs versorgt werden:
Werte für die Export-Parameter bei der Verarbeitung eines einzelnen IDoc über eine ALE-
fähige Call Transaction, wobei die IDoc-Verarbeitung scheiterte.
Parameter Wert
In_Update_Task " " (z.B. Initialwert) -
Verbuchungstask nicht verwendet
Call_Transaction " " (z.B. Initialwert)
_Done
Workflow_Result "99999"
Application_Vari " "(z.B. Initialwert)
able
Idoc_Status Die Tabelle muß einen Satz
enthalten, dessen Felder wie folgt
versorgt sein müssen:
Docnum: 4711
Status:51
Msgid, Msgno etc. müssen die
Kennung der Fehlermeldung,
Nummer etc. enthalten.
Return_Variable Die Tabelle muß den folgenden
s Eintrag enthalten:
Wf_param Doc_Number
"Error_IDOCs" 4711
Serialization_Inf Leer
o
ALE-Einstellungen
Um zu gewährleisten, daß der Funktionsbaustein im Eingang über ALE aufgerufen wird, müssen
Sie eine Reihe von Einstellungen (Tabelleneinträge) vornehmen, die im folgenden erläutert
werden. Wählen Sie dazu Werkzeuge ® Business Framework ® ALE ® Entwicklung.
Die folgende Tabelle gibt einen Überblick über die Beziehungen der Einstellungen. Jede Zeile
steht für ein Feld; die Zeile "Fehlerereignis" steht für fünf Felder. Es werden nur die wichtigen
Felder einer Tabelle aufgeführt. Die Spalten stehen für folgende Objekte (fett gedruckte Einträge
stehen für Primärschlüsselfelder):
· die Felder, die von dem Steuersatz eines eingegangenen IDocs gelesen werden
· die sechs IDoc-Felder, die den zu verwendenden Vorgangscode bestimmen
· Attribute für den Vorgangscode
· Attribute für den Funktionsbaustein im Eingang
· die Felder, mit denen geprüft wird, ob der Funktionsbaustein in ALE registriert ist.
Die Beziehungen zwischen den Feldern in einem IDoc-Steuersatz und den Tabellen, die
die ALE-Eingangseinstellungen enthalten
IDoc-Typ IDoc-Typ
Sendepartn.-Typ Sender-Typ
Sendepartn. Nr. Sender-Nr.
Nachrichten-Typ Nachr.-Typ Nachr.-Typ
Nachr.-Variante Nachr.-Var. Nachr.-Var.
Nachr.-Funktion Nachr.-Funkt. Nachr.-Funkt.
Testflag Fest flag
Vorgangscode Vorgangscode
Vorgangstyp
Fehlerereignis
Anw. Obj.-Typ Anw. Obj. Typ
Eingangsfunkt. Eingangsfunkt. Eingangsfunkt.
Eingangs-Typ
Dialog?
Siehe auch:
· Attribute des Funktionsbausteins deklarieren [Seite 157]
· Registrieren des Funktionsbausteins im Eingang [Seite 158]
· Eingangs-Vorgangscode anlegen [Seite 159]
Dialog möglich?
Unterstützt der Funktionsbaustein eine Call Transaction, kann er so programmiert werden, daß
er den Benutzern die Eingangsbilder wie oben beschrieben anzeigt. Dies muß hier bekannt
gemacht werden, da der Benutzer ansonsten nicht die Möglichkeit hat, die Bilder anzuzeigen.
Eingangstyp
Es gibt drei Typen von Funktionsbausteinen im Eingang:
1. Funktionsbausteine, die Massenverarbeitung unterstützen.
2. Funktionsbausteine, die nur die Verarbeitung eines einzelnen IDocs zulassen und keine
ALE-fähigen Transaktionen verwenden.
3. Funktionsbausteine, die nur die Verarbeitung eines einzelnen IDocs zulassen und eine ALE-
fähige Transaktion verwenden.
Für die beiden zuletzt genannten Typen teilt die ALE-Schicht ein eingehendes Paket von IDocs
und ruft den Funktionsbaustein einmal für jedes IDoc auf. Diese beiden Typen müssen von
einander unterschieden werden, da sich die ALE-Verarbeitung vor dem Aufruf in jedem der
beiden Fälle unterscheidet.
Eingangs-Vorgangscode anlegen
Den Eingangs-Vorgangscode können Sie sich als den Namen denken, der die
Verarbeitungsverfahren eines eingehenden IDocs bezeichnet, z.B. die Attribute des
Vorgangscodes. Ein Vorgangscode hat folgende Attribute:
· Verarbeitungstyp (z.B. soll der Funktionsbaustein im Eingang sofort aufgerufen werden
oder sollte ein Workflow oder Workitem gestartet werden?)
- Standard: "ALE, function module called directly"
· Name des Funktionsbausteins im Eingang
· Attribute für die Fehlerverarbeitung (Objekte und Ereignisse; siehe Abschnitt über
Objekte etc. für die Fehlerbehandlung)
· der für ALE-Links verwendete Anwendungsobjektyp
- der vom Funktionsbaustein im Eingang erstellte oder geänderte Objekttyp. Beispiel:
Ein eingehender ORDERS IDoc, der eine Kundenbestellung enthält, erstellt einen
Kundenauftrag im empfangenden R/3-System. Der Anwendungsobjekttyp ist
BUS2032, der Objekttyp für Kundenaufträge im BOR (Business Object Repository).
· das auszulösende Anwendungsereignis (wird im Abschnitt über fortgeschrittene
Techniken erklärt)
- wird normalerweise nicht verwendet.
Als Beispiel sehen Sie sich den Vorgangscode MATM an, der für
Materialstammdaten verwendet wird.
Namenskonvention
Die Namenskonvention für Vorgangscodes besagt, daß die ersten vier Buchstaben des
Nachrichtentyps, auf den er sich bezieht, verwendet werden sollen. Beispiel: MATM für
Nachrichtentyp MATMAS; sollte es zu Überschneidungen kommen, verwenden Sie die ersten
drei Buchstaben und eine Zahl, z.B. MAT1.
In unserem Fall würde der Vorgangscode XAMP heißen.
Workitem
Um einen bestimmten Workitem zu starten, können Sie anstatt eines direkten Funktionsaufrufes
Ihren Eingangsvorgangscode definieren. Das an den Workitem-Container übergebene Objekt ist
das IDoc-Objekt (z.B. ein Objekt des Typs IDOCMATMAS).
Hinweis: Soll ein IDoc-Paket mit mehr als einem IDoc verarbeitet werden, wird nur das erste IDoc
an den Workitem übergeben. Die restlichen IDocs werden nicht verarbeitet.
Workflow
Um einen bestimmten Workflow zu starten, können Sie anstatt eines direkten Funktionsaufrufes
Ihren Eingangsvorgangscode definieren. Der Workflow-Container muß die folgenden beiden
Parameter als Import-Parameter enthalten:
IDOC_PACKET wird mit einem Objekt des im Workflow-Container definierten Typs gefüllt (d.h.,
ALE liest die Workflow-Container-Definition, um den Typ festzustellen); die Objektkennung ist die
Nummer des ersten IDocs im Paket.
Unprocessed_IDOCs besteht aus einer Liste der IDoc-Nummern im Paket.
Siehe auch:
IDOCXAMPLE als Referenz für IDOC_PACKET [Seite 163]
IDPKXAMPLE als Referenz für IDOC_PACKET [Seite 164]
Erweiterte Workflow-Programmierung
Siehe auch:
Setzen des Parameters "Result" im Ereignis Container [Seite 166]
Auslösen des Anwendungsereignisses nach erfolgreicher IDoc-Verarbeitung [Seite 170]
Einsetzen des Parameters No_of_retries [Seite 172]
Werte für den Parameter Result, wenn Mass_Processing = "X". Beachten Sie, daß Sie für
eine gegebene IDoc-Nummer (im Feld Doc_Number) nur einen der oben genannten Namen
verwenden. Achten Sie auf Groß- und Kleinschreibung
Man könnte diese drei Werte wie folgt verwenden: inputErrorOccurred könnte einen Workflow
auslösen, der je nach Wert des Result-Parameters verzweigt:
Werte für die Export-Parameter für die Verarbeitung von IDoc-Paketen, wenn IDoc 4711
erfolgreich verarbeitet und Anwendungsobjekt mit der Nummer 1234 angelegt wurde; IDoc
4712 hat einen Fehler verursacht, für den der Ereignisparameter Result = 99999 ist; IDoc
4713 hat einen Fehler verursacht, für den Result = 2 ist; IDoc 4714 hat einen Fehler
verursacht, für den Result = 1 ist.
Parameter Wert
In_Update_Task " " (z.B. Initialwert) -
Verbuchungstask nicht verwendet
Result Bedeutung
0 IDoc erfolgreich verarbeitet
1 IDoc nicht erfolgreich verarbeitet; später erneut versuchen
2 IDoc nicht erfolgreich verarbeitet; anwendungsspezifische Workflow-Aktion sollte
als nächster Schritt gestartet werden.
99997 Set by ALE: IDoc wurde bereits verarbeitet; Workitem als erledigt kennzeichnen
99998 Set by ALE: IDoc zum Löschen gekennzeichnet
99999 IDoc nicht erfolgreich verarbeitet
"Continue_Objects1" 1234 1
"Continue_Objects2" 1234 2
"Continue_Objects3" 1234 3
"Continue_Objects4" 1234 4
"Continue_Objects5" 1234 5
Werte für Export-Parameter für die Verarbeitung von IDoc-Paketen, wobei alle IDocs
erfolgreich verarbeitet worden sind und für jedes erfolgreich verarbeitete IDoc ein
Anwendungsobjektereignis ausgelöst wird. IDoc-Nummern 4711 und 4712 haben die
Anwendungsobjekte 1234 und 1235 angelegt. In beiden Fällen wird der Parameter Result
im Ereignis-Container auf 1 gesetzt.
Parameter Wert
In_Update_Task " " Verbuchungstask nicht
verwendet
"X" Verbuchungstask verwendet
Call_Transactio " "
n_Done
Workflow_Resul "3"
t
Application_Vari " " (z.B. Initialwert)
able
Idoc_Status Die Tabelle muß drei Sätze
enthalten, deren Felder folgende
Werte haben:
Docnum Status
4711 53
4712 53
Optional können die Felder Msgid
etc. die Erfolgsmeldung der
Anwendung enthalten.
Return_Variable Die Tabelle muß die folgenden
s sechs Einträge enthalten:
Wf_param Doc_Number
"Processed_IDOCs" 4711
"Appl_Objects" 1234
"Continue_Objects1" 1234
"Processed_IDOCs" 4712
"Continue_Objects1" 1235
Serialization_Inf Leer, falls keine Serialiserung
o verwendet wird.
Stammdatenverteilung
Die Implementierung der Stammdatenverteilung über die asynchrone IDoc-Schnittstelle erfolgt in
drei Schritten:
1. Definition der Nachricht [Seite 174] durch Festlegen des Nachrichtentyps und des IDoc-Typs.
2. Entwicklung des Programms bzw. Funktionsbausteins für die Erstellung des IDocs aus dem
Anwendungsobjekt und Versand des IDocs über die ALE-Schnittstelle
(Ausgangsverarbeitung [Seite 175])
3. Entwicklung des Funktionsbausteins für die IDoc-Verarbeitung auf der Empfangsseite
(Eingangsverarbeitung [Seite 182])
Der Materialstamm besteht aus den Tabellen MARA, MAKT, MARC und MARD. Die
IDoc-Segmente E1MARAM, E1MAKTM, E1MARCM, E1MARDM im IDoc-Typ
MATMAS02 für den Materialstamm entsprechen inhaltlich weitgehend diesen
Tabellen. Die Hierarchie dieser Segmente im IDoc-Typ MATMAS02 entspricht der
Hierarchie der Datenbanktabellen:
E1MARAM: Master Material allgemeine Daten (MARA)
E1MAKTM: Master Material Kurztexte (MAKT)
E1MARCM: Master Material C-Segment (MARC)
E1MARDM: Master Material Lager/Chargen-Segment (MARD)
· Definieren Sie in jedem IDoc-Segment als erstes Feld das Feld MSGFN mit dem
Datenelement MSGFN. Im Feld MSGFN wird die Information übertragen, ob die Segment-
Daten im Zielsystem anzulegen, zu ändern, zu löschen oder zu aktualisieren sind.
Als Beispiel dient der Aufbau der Segmente E1MARAM, E1MAKTM, E1MARCM und
E1MARDM des Materialstamm IDoc-Typs MATMAS02.
Es wird empfohlen, die IDoc-Segmente in der Form E1xxxxx zu benennen, wobei xxxxx der
Name der entsprechenden Datenbanktabelle ist. Falls der Tabellenname weniger als fünf Stellen
hat, füllen Sie die restlichen Stellen mit dem Buchstaben M auf, beispielsweise E1MARAM für die
Tabelle MARA.
SMD
Customizing
Stammdaten
SMD-Tool
anlegen/ändern
Änderungsbeleg Standard-ALE-
erzeugen ALE-Felder ? Ausgang
Zeiger schreiben
Hintergrund-Job / manuell
IDocs erzeugen M CC
C
Daher müssen Sie in die Tabelle TBD62 alle Felder aufnehmen, deren Änderung das Versenden
einer Nachricht (IDoc) bewirken soll.
Vorgehensweise
Damit das Schreiben der Änderungszeiger über das SMD-Tool für Ihr Stammdatenobjekt aktiviert
werden kann, müssen Sie folgende Schritte ausführen:
· Änderungszeiger pro Nachrichtenyp aktivieren
· Änderungsrelevante Felder für Nachrichtentypen pflegen
· Änderungszeiger generell aktivieren
Darüber hinaus müssen Sie folgende Schritte ausführen:
· Funktionsbaustein für Auswertung der Änderungszeiger implementieren
· ALE-Objekttyp MSGFN definieren und als Filterobjekttyp pflegen
Wenn Sie die Stammdaten über ein asynchrones BAPI verteilen, dann gelten
alle nachfolgend beschriebenen Einstellungen für den generierten Nachrichtentyp
der BAPI-ALE-Schnittstelle.
Sehen Sie sich als Beispiel den TBDA2-Eintrag für den Nachrichtentyp MATMAS
des Materialstamms an.
Zur Pflege der Tabelle TBD62 wählen Sie in der ALE-Entwicklung BAPI-Schnittstelle
® Änderungswesen ® Änderungsrelevante Felder pflegen (Transaktion BD52).
Definieren Sie in der Tabelle TBD62 für Ihren Nachrichtentyp alle Änderungsbelegfelder, für die
die Änderungszeiger geschrieben werden sollen, damit Sie die entsprechenden Änderungen an
Ihrem Stammdatenobjekt an andere Systeme verteilen können.
Beim Hinzufügen eines Eintrages in eine Tabelle zu Ihrem Stammdatenobjekt wird zur
Protokollierung solcher Änderung das Änderungsbelegfeld mit dem imaginären Feldnamen KEY
benutzt (z.B. MATERIAL MARA KEY bei der Neuanlage eines Materials oder MATERIAL MARC
KEY beim Hinzufügen der Werksdaten zu einem Werk). Solche Einträge müssen Sie auch in die
Tabelle TBD62 aufnehmen, und zwar für alle Tabellen aus dem Änderungsbelegobjekt für Ihr
Stammdatenobjekt.
Das Hinzufügen bzw. Ändern eines Langtextes wird in der Änderungsbelegposition mit einem
Eintrag protokolliert. Dieser besitzt als Tabellenname das Textobjekt und als Feldname einen
Wert, der sich aus der Text-ID und dem Sprachenschlüssel zusammensetzt. Falls Änderungen
an Langtexten zu einem Stammdatenobjekt verteilt werden sollen, müssen solche Einträge in die
Tabelle TBD62 aufgenommen werden. Es ist aber nicht notwendig, dies für jeden möglichen
Sprachenschlüssel zu tun. Es genügt, für die betroffene Text-ID einen Eintrag in die Tabelle
TBD62 aufzunehmen, der als Feldname einen Wert hat, der aus der Text-ID und dem Zeichen *
zusammengesetzt ist (z.B. MATERIAL MATERIAL BEST* für den Einkaufsbestelltext im
Materialstamm).
Sehen Sie sich die TBD62-Einträge für den Nachrichtentyp MATMAS für den
Materialstamm im R/3-System an.
Die Pflege der Tabelle TBDME erreichen Sie im Bildschirm der ALE-Entwicklung
über Stammdaten ® Zusatzdaten zum Nachrichtentyp.
In Ihrem Funktionsbaustein für die Änderungszeigerauswertung mit dem anschließenden Aufbau
und Versand der IDocs müssen Sie folgende Schritte implementieren:
1. Lesen Sie alle noch nicht abgearbeiteten Änderungszeiger für Ihren Nachrichtentyp mittels
des Funktionsbausteins CHANGE_POINTERS_READ.
2. Für jedes geänderte Stammdatenobjekt bauen Sie ein IDoc auf. Füllen Sie im IDoc nur die
Segmente, die laut der Änderungszeiger geändert wurden. Das erste Feld MSGFN in jedem
Segment ist folgendermaßen zu füllen:
009, wenn das Segment hinzugefügt wurde
004, falls Segmentfelder geändert wurden
003, wenn das Segment gelöscht wurde
018, falls Segmentfelder nicht geändert wurden, das Segment aber im IDoc stehen muß,
da hierarchisch untergeordnete Segmente im IDoc versendet werden.
3. Übergeben Sie das IDoc an die ALE-Schicht durch den Aufruf des Funktionsbausteins
MASTER_IDOC_DISTRIBUTE.
4. Die Änderungszeiger für das gerade abgearbeitete Stammdatenobjekt auf "Erledigt" setzen.
Dies geschieht über den Aufruf des Funktionsbausteins
CHANGE_POINTERS_STATUS_WRITE.
5. Setzen Sie den Befehl COMMIT WORK ab und rufen Sie den Funktionsbaustein
DEQUEUE_ALL auf. Aus Performance-Gründen sollte man diesen Schritt nicht nach jedem
IDoc durchführen, sondern z.B. erst nach 50 aufgebaute IDocs.
Bei der Verteilung von Änderungen mit asynchronen BAPIs sollten Sie aus
Gründen der Kompatibilität das Feld FUNCTION mit dem Datenelement BAPIFN und
den Festwerten INS, DEL, UPD, REF und IGN verwenden. Dadurch kennzeichnen
Sie die Art der Änderung, die mit dem BAPI verteilt wird.
Nehmen Sie das Feld FUNCTION in jeden strukturierten Parameter auf. So ist es
z.B. auch möglich, das Löschen eines Datensatzes zu verteilen.
Vorgehensweise
Legen Sie also für Ihr Stammdatenobjekt ein Programm an. Definieren Sie im Programm
Parameter für die Auswahl der zu sendenden Objekte und ein Parameter für das zu versorgende
logische System.
In Ihrem Programm müssen Sie dann folgende Schritte implementieren:
1. Bauen Sie für jedes zu versendende Stammdatenobjekt ein IDoc auf. Füllen Sie im IDoc alle
Daten zum Stammdatenobjekt. Das erste Feld MSGFN in jedem Segment ist mit dem Wert
005 zu versorgen.
2. Übergeben Sie das IDoc an die ALE-Schicht durch den Aufruf des Funktionsbausteins
MASTER_IDOC_DISTRIBUTE.
3. Setzen Sie den Befehl COMMIT WORK ab und rufen Sie den Funktionsbaustein
DEQUEUE_ALL auf. Um eine bessere Performance zu erreichen, sollte dieser Schritt erst
nach mehreren aufgebauten IDocs ausgeführt werden.
ALE-Schnittstelle
CALL FUNCTION ‘IDOC_INBOUND_ASYNCHRONOUS’
IN BACKGROUND TASK DESTINATION ...
TABLES IDOC_CONTROL_REC_40=...
IDOC_DATA_REC_40=...
tRFC
Implementierung
RFC
Fremdsystem Bibliothek
Daten Komm-
IDoc
Daten
Übersetzungsprogramm
Fremdsystem
Daten Komm.-
IDoc
Daten
Übersetzungs-
programm
tRFC
Implementierung RFC-Bibliothek
Anwendungsfunktionen
Anwendungs-
Anwendungs-
Filterung Komm.-
daten Umsetzung IDoc
Verwendung
Übersetzungsprogramme führen typischerweise folgende Funktionen aus:
· Umsetzen der IDocs in beliebige Strukturen von Fremdsystemen/Kundensystemen
· Steuerung der Kommunikation, wie z.B. den Verbindungsaufbau und den -neustart.
Struktur
Zusammenspiel R/3-Translator-Fremdsystem
Kommunikation
Doc IDoc
IDoc
Translator Nicht-
SAP-
System
ALE/
Workflow EDI
Inter-
Anwendungs face
funktion
Komm
Anwendungs- IDoc
daten
Integration
Übersetzungsprogramme werden von Fremdanbietern angeboten. SAP zertifiziert diese
Programme, um zu gewährleisten, daß die Kommunikation mit dem Fremdsystem über die ALE-
Schnittstelle und den Translator korrekt verläuft.
Die Zertifizierung prüft folgende Kriterien:
· Kann der Translator automatisch Strukturbeschreibungen von IDocs in sein eigenes
Repository übernehmen?
· Kann der Translator ein IDoc vom R/3 übernehmen und die Informationen entsprechend
seiner Repository-Daten interpretieren?
· Ist die Mapping-Funktionalität des Translators hinreichend mächtig?
· Ist der Translator in der Lage, das so erzeugte IDoc an das R/3 zurückzugeben?
Die Zertifizierung selbst nimmt keine Bewertung oder Kontrolle der im Programm angebotenen
Funktionalität vor.
Programmtechnische Realisierung
In diesem Abschnitt erhalten Sie einen Überblick über die technische Realisierung einer
Anbindung.
Die Kommunikation basiert auf der SAP-Schnittstelle Remote Function Call (RFC).
Ab dem Release 3.0 können Daten zwischen R/3-Systemen und externen Programmen sicher
und zuverlässig über den transaktionalen Remote Function Call (tRFC) übertragen werden.
Der gerufene Funktionsbaustein wird im RFC-Server-System genau einmal ausgeführt. Das
entfernte System muß zu dem Zeitpunkt, in dem das RFC-Client-Programm einen tRFC ausführt,
nicht verfügbar sein. Die tRFC-Komponente speichert die gerufene RFC-Funktion zusammen mit
den zugehörigen Daten in der R/3-Datenbank unter einer eindeutigen Transaktionskennung
(TID).
Eine ausführliche Beschreibung zur RFC-Schnittstelle finden Sie in der Dokumentation, Remote
Communications [Extern].
Einzelheiten zu TCP/IP-Einstellungen finden Sie in BC - SAP-Kommunikation: Konfiguration
[Extern].
Der vorliegende Abschnitt gibt Ihnen einen Einblick in die Programmtechnik. Er erhebt keinen
Anspruch auf Vollständigkeit.
Wenn Sie selbst eine Anbindung realisieren möchten, sollten Sie unbedingt die weiterfürhrende
Dokumentation lesen.
TCP/IP-Einstellungen
Als Voraussetzung für die Kommunikation müssen Sie folgende TCP/IP-Einstellungen
vornehmen:
· Damit das R/3-System den Zielrechner findet, müssen die TCP/IP Voraussetzungen
geschaffen sein, insbesondere die IP-Adressen in der jeweiligen Datei hosts bekannt sein.
· Der Name des Gateways und des Dispatchers in die Datei services eingetragen werden, z.B.
sapgw00 und sapdp00.
· Im R/3-System werden standardmäßig IDocs aus der Verbuchung heraus versendet. Daher
muß der TCP/IP-Link auch für die Verbuchungsmaschine erzeugt werden.
· Das SAP-Gateway muß das Recht haben, das externe Programm (RFC-Server) über
Remote Shell zu starten.
Ab Release 3.0C kann im Registriermodus gearbeitet werden. Dabei bleibt die Verbindung
zwischen Fremdsystemprogramm und Gateway offen (siehe Registering Server Programs
with the SAP Gateway [Extern] in The RFC API).
Einzelheiten zu den TCP/IP-Einstellungen finden Sie in der Dokumentation BC - SAP-
Kommunikation: Konfiguration [Extern].
ABAP-Programm
ABAP-Programm
ABAP-Programm
…
…
call
callfunction
function‘IDOC_INBOUND_ASYNCHRONOUS‘
‘IDOC_INBOUND_ASYNCHRONOUS‘ TCP/IP-Verbindungen
TCP/IP-Verbindungen
TCP/IP-Verbindungen
ininbackground (Transaktion SM59)
backgroundtask
task (Transaktion SM59)
destination
destinationSubsystem
Subsystem
tables
tables RFC-Destination
RFC-Destination Subsystem
Subsystem
idoc_control_rec_40
idoc_control_rec_40==header
header
idoc_data
idoc_data_rec_40
_rec_40 ==segment
segment
…… Zielmaschine
Zielmaschine hs1022.wdf.sap-ag.de
hs1022.wdf.sap-ag.de
Programm
Programm /users/d11adm/tmp/wmtestl
/users/d11adm/tmp/wmtestl
Fremdprogramm
Fremdprogramm
wmtestl
wmtestl
rfc_handle
rfc_handle==RfcAccept(...);
RfcAccept(...);
… …
rfc_rc
rfc_rc==RfcInstallFunction(...);
RfcInstallFunction(...);
… … RFC-Library
/ /** RFC-Library
**function IDOC_INBOUND_ASYNCHRONOUS
function IDOC_INBOUND_ASYNCHRONOUS saprfc.h
saprfc.h
**/ / sapitab.h
sapitab.h
static
staticRFC_RC
RFC_RCidoc_
idoc_inbound_
inbound_asynchronous
asynchronous(RFC_HANDLE
(RFC_HANDLErfc_handle
rfc_handle) ) librfc.a
librfc.a/ /librfc.dll
librfc.dll/ /ntlibrfc.lib
ntlibrfc.lib…
…
char
char filenam1
filenam1 == “/users/d11adm/tmp/output1”;
“/users/d11adm/tmp/output1”;
……
…
…
Aus dem R/3 werden IDocs über den Aufruf eines der beiden folgenden Funktionsbausteine mit
einer Destination versendet:
· IDOC_INBOUND_ASYNCHRONOUS
Diesen Funktionsbaustein müssen Sie ab Release 4.0 verwenden. Er verarbeitet IDocs
in Satzarten, die zu 4.x gültig sind. Längere IDoc-Segmentnamen werden damit
unterstützt.
· INBOUND_IDOC_PROCESS
Diesen Funktionsbaustein müssen Sie in Releases vor 4.0 verwenden. Er verarbeitet
IDocs in Satzarten, die zu 3.x gültig waren. Aus Gründen der Abwärtskompatibiltät muss
er auch in 4.x verwendet werden können. Auch externe Programme müssen diesen
Funktionsbaustein unterstützen.
Externes
Externes Programm
Programm
(( Client
Client ))
……
/ /**
**Transaktionsverwaltung
TransaktionsverwaltungTIDTID) )
**/ / RFC
RFC -- Library
Library
rfc_rc
rfc_rc==RfcCreateTransID(...)
RfcCreateTransID(...)
… saprfc.h
saprfc.h
… sapitab.h
/ /** sapitab.h
**Aufruf librfc.a
librfc.a/ /librfc.dll
librfc.dll/ /ntlibrfc.lib
ntlibrfc.lib…
Aufrufdes
desFunktionsbausteins
FunktionsbausteinsIDOC_INBOUND_ASYNCHRONOUS
IDOC_INBOUND_ASYNCHRONOUS …
**/ /
rfc_rc
rfc_rc==RfcIndirectCall
RfcIndirectCall(handle,
(handle,
“IDOC_INBOUND_ASYNCHRONOUS”
“IDOC_INBOUND_ASYNCHRONOUS”
Exporting;
Exporting;Tables;TransID);
Tables;TransID);
…
…
SAP
SAP -- Funktionsbaustein
Funktionsbaustein
IDOC_
IDOC_ INBOUND_
INBOUND_ ASYNCHRONOUS
ASYNCHRONOUS::
(( Server
Server ))
Lokale
LokaleSchnittstelle:
Schnittstelle:
TABLES
TABLES
IDOC_CONTROL_REC_40
IDOC_CONTROL_REC_40 STRUCTURE
STRUCTUREEDI_DC40
EDI_DC40
IDOC_DATA _REC_40
IDOC_DATA _REC_40 STRUCTURE
STRUCTUREEDI_DD40
EDI_DD40
Remote
RemoteFunction
FunctionCall
Callunterstützt
unterstützt
Aufgabe:
Aufgabe:
IDOCs
IDOCsverbuchen
verbuchen
Verarbeitung
Verarbeitunganstoßen
anstoßen
Das aufrufende, externe Programm verwendet die folgenden Funktionen des RFC Software
Development Kit (RFC-SDK):
· RfcOpen
Mit diesem Aufruf wird eine RFC-Verbindung zum Server-System aufgebaut. Die
Anmeldung am SAP-System inklusive Servername des SAP-Zielrechners, SAP-Logon,
Benutzer, Kennwort, etc. können Sie im C-Programm oder in der Datei saprfc.ini
definieren.
Nach dem Verbindungsaufbau zum Server-System müssen im Client-Programm die beiden
folgenden Funktionen für den tRFC aufgerufen werden:
· RfcCreateTransID
Mit diesem Aufruf wird die Transaktionskennung (TID) ermittelt, die im Server-System
angelegt wurde.
· RfcIndirectCall
Mit diesem Aufruf werden die RFC-Daten zusammen mit der TID an das Server-System
übermittelt.
Im Fehlerfall wiederholt das Client-Programm diesen Aufruf.
Dabei muss es mit dem Aufruf RfcCreateTransID die alte TID verwenden. Andernfalls ist
nicht sichergestellt, dass die RFC-Funktion nur ein einziges Mal im R/3-System ausgeführt
wird.
Nach der erfolgreichen Ausführung dieses Aufrufs wird die Transaktion beendet. Das
aufrufende Programm kann dann seine eigene TID-Verwaltung aktualisieren (z.B. den TID-
Eintrag löschen).
Weitere Informationen finden Sie in der Dokumentation The RFC API [Extern] oder in der
Dokumentation des RFC-SDK..
Die Nutzdaten sind in IDoc-Form aufzubereiten und in eine interne Tabelle der Struktur
EDI_DD40 (EDI_DD vor 4.0) zu stellen. Pro IDoc muß auch der Kontrollsatz aufgebaut und in
eine interne Tabelle der Struktur EDI_DC40 (EDI_DC vor 4.0) gestellt werden. Auch die Form
der Datenübergabe ist in der Dokumentation beschrieben.
Beispielsweise könnte bei der mobilen Erfassung von Wareneingängen während des
Versendens der Daten die Kommunikation zusammenbrechen. Der Bearbeiter würde
nochmals die Daten versenden, um ihre Verbuchung im SAP-System
sicherzustellen. Wenn aber die Daten bereits beim erstmaligen Senden im SAP-
System empfangen und verarbeitet wurden, muß das System dies erkennen können.
Es darf die Daten nicht nochmals verarbeiten.
Aus diesem Beispiel ergibt sich zwangsläufig folgender schematischer Ablauf zwischen Sende-
und Empfangssystem.
Sender
Sender Empfänger
Empfänger
( (Client
Client) ) ( (Server
Server) )
TID
TIDerzeugen
erzeugen//holen
holen
(weltweit
(weltweiteindeutige
eindeutigeNummer)
Nummer)
TID
TIDmit
mitzu
zuübertragenden
übertragenden
Datensätzen
Datensätzensichern
sichern
Call
Callauf
aufden
denServer:
Server: Sichern
Sichernvon
vonDaten
Daten
Übertragen
Übertragenvon
von und
undTID
TID
Daten
Datenund
undTID
TID
Bestätigung
Bestätigung Bestätigung:
Alles
Alleso.k.
o.k. Bestätigung:
nicht
nichto.k. Daten
o.k. Status
Status DatenEmpfangen
Empfangen
fortschreiben
fortschreiben
Nochmals
Nochmals TID
TIDund
undDaten
Daten Prüfung:
Prüfung:TID
TIDschon
schon
versenden
versenden sofort
sofortoder
oder vorhanden
vorhanden//bearbeitet?
bearbeitet?
mit
mitgleicher
gleicher später
späterlöschen
löschen
TID
TID
Ja
Ja Nein
Nein
nichts
nichtstun
tun Daten
Datenverarbeiten
verarbeiten
Status
StatusTID
TID
fortschreiben
fortschreiben
Vorgehensweise
Der Remote-Aufruf von Dialogfunktionalität erfolgt über den RFC. Per RFC können Bilder
übertragen werden.
Eine Dialogmethode wird durch einen RFC-fähigen Funktionsbaustein implementiert. In diesem
Funktionsbaustein wird dann der Dialog aufgerufen.
Dieser Funktionsbaustein muß die gleichen Qualitätsanforderungen erfüllen wie der
Funktionsbaustein für ein BAPI:
· englische Feld- und Parameternamen
· keine Ausnahmen, sondern einen Rückgabeparameter,
· Dokumentation ist vorhanden
· Die Schnittstelle ist eingefroren.
Der Funktionsbaustein wird im BOR modelliert. Dabei gelten die gleichen Regeln wie für BAPIs
bis auf zwei Ausnahmen:
· Der Funktionsbaustein wird nur intern freigegeben
Die Beispiele erheben nicht den Anspruch, für alle denkbaren Aufrufsituationen
geeignet zu sein. Gerade für die Fehlerbehandlung kann kein generelles Vorgehen
empfohlen werden, da sie von der jeweiligen Anwendung und der Aufrufsituation
abhängen kann. Bevor Sie einen Aufruf einer Dialogmethode in Ihr Coding einbauen,
sollten Sie sich die Fehlerbehandlung gründlich überlegen.
Wenn z. B. für ein Server-System keine Destination für Dialogaufrufe ermittelt
werden kann, kann dies auch daran liegen, daß dieser Server aus technischen
Gründen oder wegen Sicherheitsbedenken keine Dialogfunktionalität zur Verfügung
stellt. Diese Situation kann durchaus auch in produktiven Systemen auftreten. Man
kann dies nicht als inkonsistent konfiguriertes System interpretieren.
Weiterhin sollten Sie beachten, daß der RFC-Aufruf implizit einen Datenbank-
Commit absetzt, d. h., die LUW wird beendet. Wenn Sie keine Erfahrung mit RFC-
Aufrufen haben, sollten Sie die Online-Hilfe zum ABAP-Sprachelement call
function mit dem Zusatz destination lesen.
...
DATA:
HEAD LIKE BKPF,
RETURN LIKE BAPIRET2,
SERVER_DEST LIKE TBLSYSDEST-RFCDEST,
MSG_TXT(80) TYPE C.
...
IF SY-SUBRC <> 0.
IF SY-SUBRC = 1.
* application specific message saying document can't be displayed
...
ELSE.
* hard error
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
DOCUMENT_ID = HEAD-AWREF
IMPORTING
RETURN = RETURN
EXCEPTIONS
COMMUNICATION_FAILURE = 1 MESSAGE MSG_TXT
SYSTEM_FAILURE = 2 MESSAGE MSG_TXT.
IF SY-SUBRC <> 0.
* handle remote exceptions
MESSAGE E777(B1) WITH
'HRDoc.Display' HEAD-AWSYS HEADER-AWSYS
MSG_TXT(50) MSG_TXT+50(30).
ELSEIF NOT RETURN-TYPE IS INITIAL.
* handle return parameter
...
ENDIF.
Die Nachricht B1 777 ist eine generische Nachricht. Statt dessen kann auch eine
applikationsspezifische Nachrichten verwendet werden.
...
DATA:
HEAD LIKE HRKPF,
SERVER LIKE BDBAPIDEST,
RETURN LIKE BAPIRET2,
MSG_TXT(80) TYPE C,
FILTER_VALUES LIKE BDI_FOBJ OCCURS 0 WITH HEADER LINE.
...
IF SY-SUBRC <> 0.
IF SY-SUBRC = 4.
* application specific message saying document can't be displayed
...
ELSE.
* hard error
IF SY-SUBRC <> 0.
* handle remote exceptions
MESSAGE E777(B1) WITH
'HRDoc.Display' HEADER-AWSYS MSG_TXT(50) MSG_TXT+50(30).
ELSEIF NOT RETURN-TYPE IS INITIAL.
* handle return parameter
...
ENDIF.
Dieses Beispiel verwendet keine Filterobjekte. Wenn Filterobjekte für die zu rufende
Objektmethode vorhanden sind, muß die Abfrage des Verteilungsmodells
dementsprechend geändert werden.
Funktionsumfang
Für eine serialisierte Verteilung voneinander abhängiger Nachrichten stehen Ihnen folgende
Möglichkeiten zu Verfügung:
· Serialisierung über Objekttypen [Extern]
· Serialisierung über Nachrichtentypen [Seite 119]
· Serialisierung auf IDoc-Ebene [Seite 206]
(nicht für IDocs von generierten BAPI-ALE-Schnittstellen)
Voraussetzungen
Die serialisierte Verteilung müssen Sie in beiden Systemen per Customizing aktivieren:
Werkzeuge ® AcceleratedSAP ® Customizing ® Projektbearbeitung
SAP Referenz-IMG
Basis
Application Link Enabling (ALE)
Geschäftsprozesse modellieren und implementieren
Verteilung von Stammdaten konfigurieren
Serialisierung der Daten beim Senden und Empfangen einstellen
Serialisierung über Objekttypen
Funktionsumfang
Der zu übertragenden Nachricht (IDoc) wird eine fortlaufende Nummer zugewiesen. Diese wird
im Sender- und im Empfängersystem pro Objekttyp und Objektkanal verwaltet. Ein Objektkanal
enthält eine logische Menge reihenfolgesortierter IDocs und definiert sich über einen Objekttypen
(BOR) und genau eine Kanalnummer, die ein Attribut zu Nachrichten ist. In einem Objektkanal
werden alle Nachrichten im Zielsystem in der gleichen Reihenfolge bearbeitet, wie sie im
Quellsystem entstanden sind. Eine Kanalnummer ist ein Attribut zu Nachrichten. Sie wird über
den Funktionsbaustein ALE_SERIAL_KEY2CHANNEL generiert oder im Anwendungsprogramm
vergeben.
Anhand dieser Nummer werden folgende Situationen erkannt:
· RFC-Übertragungsfehler
· Der Anwendungsbeleg zu einer Nachricht ist noch nicht gebucht (Statuscode 53), obwohl die
nachfolgende Nachricht bereits eingetroffen ist
In beiden Fällen wartet das IDoc im Eingang auf sein Vorgänger-IDoc und erhält zu diesem
Zweck den Statuscode 66. Nachdem das Vorgänger-IDoc gebucht wurde, müssen Sie das IDoc
im Status 66 mit dem Programm RBDAPP01 nachträglich buchen.
Alle Nachrichten, deren Kanalnummer und Objekttyp identisch sind, werden bei der Aktivierung
serialisiert.
Zu jedem Objektkanal wird der aktuelle Nummernstand vermerkt. Dieser Vorgang wird als
Registratur bezeichnet. Es gibt je eine Registratur im Ausgang und im Eingang. Dort muß die
Serialisierung jeweils aktiviert werden (siehe Voraussetzungen).
Ein Beispiel ist der Einkaufsinfosatz mit Lieferant und Material. Auf dem
Empfängersystem müssen der Lieferant und das Material vor dem Einkaufsinfosatz
angelegt werden, um einen Verbuchungsfehler zu vermeiden.
Voraussetzungen
Die serialisierte Verteilung der Nachrichtentypen müssen Sie in beiden Systemen per
Customizing aktivieren.
Basis
Verteilung (ALE)
Geschäftsprozesse modellieren und implementieren
Verteilung von Stammdaten konfigurieren
Serialisierung der Daten beim Senden und Empfangen einstellen
Serialisierung über Nachrichtentypen
Funktionsumfang
Die serialisierte Verteilung wird nur für die Übertragung von Änderungen der Stammdaten
unterstützt. Die Nachrichtentypen der IDocs werden in der vorgesehenen
Übertragungsreihenfolge in einer Serialisierungsgruppe zusammengefaßt. In genau dieser
festgelegten Reihenfolge erfolgt auch die Verteilung der Stammdaten. Sind alle IDocs der
Serialisierungsgruppe erfolgreich versendet worden, so wird vom Sendesystem eine spezielle
Steuernachricht an die Empfängersysteme versendet. Diese Steuernachricht enthält die
Verbuchungsreihenfolge der IDocs und startet die Eingangsverarbeitung der IDocs auf den
Empfängersystemen.
Die serialisierte Verteilung von Nachrichtentypen stellt keine vollkommen neue Art der
Stammdatenverteilung dar, sondern nutzt bereits vorhandene ALE-Mechanismen der Verteilung
unter Beachtung einer bestimmten Reihenfolge der Nachrichtentypen. Diese Verteilung könnte
auch manuell durch die Ausführung vorhandener ALE-Reports durchgeführt werden. Mittels der
serialisierten Verteilung werden diese Einzelschritte jedoch automatisiert und über Batch-Jobs
einplanbar.
Die Menüoberfläche der Serialisierung gestattet die Auswahl von Selektionskriterien, die den
Ablauf der serialisierten Verteilung bestimmen. Dazu gehören z.B. das Versenden der
Steuernachricht und die Eingangsverarbeitung der IDocs.
Voraussetzungen
Die Serialisierung auf IDoc-Ebene ist nicht möglich für IDocs von generierten BAPI-IDoc-
Schnittstellen, da der Funktionsbaustein zur Eingangsverarbeitung das ALE-Serialisierungs-API
nicht nutzt.
Funktionsumfang
ALE stellt zwei Funktionsbausteine zur Serialisierung von IDocs bereit, die vom verbuchenden
Funktionsbaustein aufgerufen werden müssen:
· IDOC_SERIALIZATION_CHECK
Zum Prüfen von Zeitstempeln im Serialisierungsfeld des IDoc-Kopfes
· IDOC_SERIAL_POST
Zum Aktualisieren der Serialisierungtabelle.
Automatische Tests
Die Qualität der ALE-Schicht und der ALE-Geschäftsprozesse können Sie durch automatische
Tests verifizieren.
Obwohl manuelle Tests dadurch nicht ersetzt werden können, können Sie zumindest die
grundlegende Funktionalität der ALE-Geschäftsprozesse überprüfen. Dies ist insbesondere für
Upgrade-Tests sinnvoll, die regelmäßig ohne manuellen Aufwand durchgeführt werden sollen.
Auch das notwendige Customizing der logischen Systeme kann automatisiert werden, so daß die
anschließenden manuellen Tests vereinfacht und beschleunigt werden.
Die automatischen Tests werden komplett im R/3 mit Hilfe der CATT-Umgebung entwickelt. Sie
bestehen im wesentlichen aus Testabläufen und Testbausteinen. Einzelheiten dazu finden Sie in
der Dokumentation CA - Computer Aided Test Tool [Extern].
Diese Anleitung betrifft alle Anwendungen, die für ein oder mehrere ALE-Geschäftsprozesse
verantwortlich sind. Grundkentnisse über die Entwicklung von CATT-Bausteinen werden
vorausgesetzt.
Die Testbausteine und Abläufe sollten auf IDES-Daten aufbauen, so daß sie in einem frisch
aufgebautem Testsystem ohne manuelle Eingriffe regelmäßig gestartet werden können.
Test vorbereiten
Bevor durch einen Testablauf ein ALE-Szenario überprüft werden kann, muß das Customizing
der ALE-Schicht durchgeführt werden. Dies sollte durch einen Vorspann-CATT-Ablauf
geschehen, der auf das bestehende IDES-Customizing aufbaut. Dafür steht der Testbaustein
P3013119 zur Verfügung. Dieser Baustein erweitert das Verteilungsmodell und legt
Partnervereinbarungen für die Nachrichtentypen an.
Zusätzlich müssen Sie aus dem System, in dem der Testablauf gestartet wird, RFC-
Verbindungen zum zentralen und dezentralen System anlegen, da beide Systeme während des
Ablaufs angesprungen werden.
Testbaustein P3017940
Der Testbaustein P3017940 besteht selbst wieder aus einer Reihe von Test- und
Funktionsbausteinen:
Beispiele
Der Testablauf P3013121 ist ein Beispiel für einen Stammdatenverteilungsprozeß, P3017156 für
einen komplexen Prozeß mit Bewegungsdaten.
In beiden Prozessen wird der Baustein P3017940 eingesetzt.
Testablauf entwickeln
Ein Testablauf besteht aus 3 Abschnitten.
1. Stammdatum anlegen/ändern und IDoc erzeugen
2. Testbaustein P3017940 ausführen
(IDoc versenden, einbuchen und jeweiligen Status prüfen)
3. Stammdatum prüfen, das aus dem IDoc entstandenen ist
Ablaufschema
Der Testablauf eines ALE-Szenarios zur Stammdatenverteilung besteht aus den folgenden
Testbausteinen:
Sendendes System
Testablauf ALE-Szenario
Versenden des IDocs
Testbaustein Anwendung Prüfen des IDocstatus
IDoc
Testbaustein P3017940
Empfangendes System
Testbaustein Anwendung
Einbuchen des IDocs
Prüfen des IDocstatus
Für die Schritte der ALE-Schicht steht der Testbaustein P3017940 zur Verfügung, der für alle
Szenarien benutzt werden kann, in denen von der Anwendung Objektverknüpfungen erstellt
werden.
Dieser Testbaustein kann von jedem Testablauf aus lokal gerufen werden. Dabei sollten alle
Fehlerbehandlung
Die ALE-Fehlerbehandlung bedient sich der SAP Business Workflow-Technologie des R/3-
Systems.Der SAP Business Workflow organisiert und steuert einen Arbeitsprozess, indem
Aufgaben (Workitems) einzelnen Bearbeitern zugeordnet werden. Nach der Erledigung einer
Aufgabe wird der Bearbeiter einer nachfolgenden Aufgabe automatisch über den Eingang eines
Workitems informiert.
SAP Business Workflow ist objektorientiert, die Objekte der ALE-Fehlerbehandlung sind IDocs
und die auf ihnen definierten Methoden und Ereignisse.
Im Fehlerfall wird nur die erste Meldung aus dem Return-Parameter in den Text des
zugehörigen Workitems übernommen.
Fehler im Eingangsfunktionsbaust.
inputErrorOccurred
Workitem erscheint im Eingang
Workitem ausführen
input Finished
Workitem erledigt
Objektyp IDOCMATMAS:
Attribute, Methoden und Ereignisse, die für den Funktionsbaustein im Eingang relevant sind.
Standardaufgabe
00007946:
1 'MATMAS_Error'
Start-Ereignis Ende-Ereignis
Objektmethode
Bevor Sie weiterlesen, sehen Sie sich den Objekttyp IDOCMATMAS im Business
Object Builder und die Standardaufgabe 7947 an.
Sowohl den Business Object Builder als auch die Standardaufgabe erreichen Sie
über den Menüpfad Werkzeuge ® Business Workflow ® Entwicklung und das Menü
Definitionswerkzeuge:
® Business Object Builder
® Aufgaben/Aufgabengruppen
Siehe auch:
IDoc-Objekttyp IDOCXAMPLE anlegen [Seite 218]
IDoc-Paketobjekttyp IDPKXAMPLE anlegen [Seite 220]
· Wählen Sie Zurück und sichern Sie den Objekttyp (Objekttyp ® Sichern o. Prüfen).
Standardaufgabe anlegen
Zum Anlegen einer neuen Standardaufgabe kopiert man eine bereits bestehende Aufgabe. Als
Beispiel dient hier die Standardaufgabe 7947 "MATMAS_Error".
Vom R/3-Einstiegsbildschirm aus navigieren Sie über die Menüpunkte Werkzeuge ® Business
Workflow ® Entwicklung zum Business Workflow-Entwicklungsbildschirm.
1. Um eine Standardaufgabe anzulegen, wählen Sie Definitionswerkzeuge ® Aufgaben/
Aufgabengruppen ® Kopieren.
2. Geben Sie für den Aufgabentyp TS und für die Aufgabe 7947 ein und wählen Sie dann
Aufgabe ® Kopieren.
3. Tragen Sie im folgenden Dialogfenster Standardaufgabe im Gruppenrahmen
Beschreibung Ihr Objektkürzel (XAMPLE_Error) und Ihre Objektbezeichnung (XAMPLE
input error) ein und klicken Sie auf das Kopiersymbol.
4. Tragen Sie im folgenden Dialogfenster Objektkatalogeintrag anlegen Ihre
Entwicklungsklasse ein und wählen Sie dann Sichern.
5. Merken Sie sich die Nummer der Aufgabe, die Sie erstellt haben (99900000)
Bearbeiten Sie die neue Aufgabe wie folgt:
1. Wählen Sie Definitionswerkzeuge ® Aufgaben/ Aufgabengruppen ® Ändern.
2. Löschen Sie die auslösenden Ereignisse:
– Wählen Sie Auslösende Ereignisse.
– Klicken Sie auf das Ereignis inputErrorOccurred und löschen Sie es über Bearbeiten
® Ereignis löschen.
– Wählen Sie Zurück.
3. Löschen Sie die beendenden Ereignisse:
– Wählen Sie Beendende Ereignisse.
– Klicken Sie auf das Ereignis inputFinished und löschen Sie es über Bearbeiten ®
Ereignis löschen.
– Wählen Sie Zurück.
4. Ersetzen Sie die Anwendungskomponente HLA0006031 mit der
Anwendungskomponente Ihrer Eingangsverarbeitung.
Dies dient der Dokumentation und zum Suchen von Aufgaben, die für eine gegebene
Anwendungskomponente geeignet sind
5. Ersetzen Sie den Objekttyp IDOCMATMAS mit Ihrem neu angelegten Objekttyp
(IDOCXAMPLE).
6. Fügen Sie das für Ihren Objekttyp gültige auslösenden Ereignisse hinzu:
– Wählen Sie Auslösende Ereignisse.
– Wählen Sie Ereignis einfügen.
Eingangsmethode pflegen
Die im Abschnitt ALE-Einstellungen unter "Vorgangcodes" erwähnten Ereignisfelder Ihrer
Eingangsmethode können nun gepflegt werden. Wählen Sie dazu IDoc ® Eingang ®
Vorgangscode - Art der Vereinbarung im ALE-Entwicklungsmenü.
Vorgangscodes sind mandentenabhängig. Stellen Sie sicher, daß Sie den richtigen
Mandanten pflegen.
1. Wählen Sie Ihren Vorgangscode XAMP.
2. Tragen Sie in den IDoc-Paketfeldern Ihren Paketobjekttyp IDPKXAMPLE und das Ende-
Ereignis massInputFinished ein.
3. Tragen Sie in den IDoc-Feldern Ihren IDoc-Objekttyp IDOCXAMPLE, das Start-Ereignis
inputErrorOccurred und das Ende-Ereignis inputFinished ein.
4. Tragen Sie im Feld für den Anwendungsobjekttyp den entsprechenden Objekttyp ein, z.B.
BUS1001 für Material.
5. Sichern Sie Ihren Eintrag.