Integration von SAP mithilfe der SAP-IDoc-Snaps (Teil 3/4)

Porträtfoto von Ingo Sauerzapf
11 min gelesen
Fassen Sie dies mit AI zusammen

Im dritten Teil der Reihe zur Integration von SAP mithilfe der SAP IDoc Snaps werden wir uns mit dem IDoc Listener und dem IDoc Document Listener Snap befassen und auch kurz auf den SAP IDoc Read Snap eingehen. Wir werden die bereits in Teil 1 der Reihe behandelten Voraussetzungen noch einmal wiederholen, Ihnen zeigen, wo Sie die Verbindung innerhalb des SAP-Gateways konfigurieren und testen können, und Ihnen einen Einblick in die verschiedenen Transaktionen innerhalb von SAP geben, mit denen Sie IDocs versenden können. Zuletzt verwenden wir erneut den IDoc Write Snap, um ein Status-IDoc zurückzusenden, das vom SAP-System verwendet wird, um den Status eines IDocs zu ändern, das wir ursprünglich über die IDoc Listener Snaps empfangen haben. Das Status-IDoc ermöglicht uns die Integration mit den Überwachungssystemen für IDocs innerhalb des SAP-Systems und die Rückmeldung von Erfolgen oder Fehlern an SAP.

Überprüfung der Voraussetzungen für die Verwendung von IDoc Listener Snaps

Wir haben die Anforderungen bereits in Teil 1 der Serie besprochen, möchten sie hier jedoch noch einmal kurz in Erinnerung rufen. Beide Teile, das Hinzufügen von Servicenamen zur Datei /etc/services auf jedem Knoten Ihres Groundplex sowie die Sicherstellung, dass die Zugriffskontrolllisten auf dem SAP-Gateway die Verbindung des GroundPlex mit dem SAP-Gateway zulassen, sind unerlässlich, damit sowohl der IDoc-Listener-Snap als auch der IDoc-Dokument-Listener-Snap funktionieren. Bitte lesen Sie dazu denAbschnitt „Voraussetzungen für IDoc Listener und IDoc Document Listener Snaps“in Teil 1 der Serie.

Verständnis der IDoc-Listener- und Dokument-Listener-Snaps

Einer der SAP IDoc Listener Snaps wartet auf eingehende IDocs, indem er sich beim SAP Gateway registriert. Das bedeutet, dass mit den Snaps erstellte Pipelines nicht beendet werden, sondern kontinuierlich laufen, bis ein Benutzer sie stoppt. Um sich beim Gateway zu registrieren, müssen Sie den Gateway-Host, Gateway-Dienst (der den Port angibt, auf dem das Gateway läuft) und eine Programm-ID , die den Snap auf dem SAP-Gateway eindeutig identifiziert. Wenn sich Ihr SAP-System hinter einem SAP-Router befindet, müssen Sie auch die SAP-Router-Zeichenfolge angeben. Das Team, das Ihre SAP-Systeme betreibt, kann Ihnen den Host, den Gateway-Dienstnamen und die SAP-Router-Zeichenfolge mitteilen und einen eindeutigen Namen für den Snap definieren, der als Programm-ID verwendet wird.

Jedes SAP-System verfügt zwar über ein integriertes Gateway, Sie können jedoch auch ein eigenständiges Gateway in der Nähe Ihrer Groundplex-Knoten einrichten. Eigenständige SAP-Gateways werden in der Regel in Hochverfügbarkeitsumgebungen eingesetzt, in denen ein SAP-System mit einer Drittanbieteranwendung wie unseren Snaps verbunden ist.

Screenshot 2024-05-28 um 17:30:40 Uhr.png

Auf der SAP-Seite müssen Sie die Transaktion SM59 verwenden, um eine RFC-Destination zu erstellen, die von der SAP-ALE-Schicht zum Senden von Daten an das Snap in Ihrer Pipeline verwendet wird. Die RFC-Destination muss vom Typ T – TCP/IP-Verbindung sein und ein registriertes Serverprogramm mit derselben Programm-ID verwenden, die Sie in den Snap-Einstellungen angegeben haben.

Screenshot 2024-05-29 um 9:52:31 Uhr.png

Wenn Sie die Pipeline ausführen und zum Dashboard navigieren, sehen Sie, dass sie ausgeführt wird. Über den Status können Sie die Pipeline-Ausführungsstatistik öffnen und anhand der Anzahl der Dokumente überprüfen, ob IDocs vom SAP-System an die Pipeline gesendet werden.

Screenshot 2024-05-28 um 16:18:49 Uhr.png

Sobald die Pipeline läuft, können Sie die Schaltfläche „Verbindungstest“ in Transaktion SM59 verwenden, um die Verbindung zu testen und Ihre Verbindung in Transaktion SMGW anzuzeigen. Die Programm-ID kann über den Menüeintrag „Springen -> Angemeldete Clients“ in SMGW angezeigt werden. 

Screenshot 2024-05-29 um 13:43:39 Uhr.png
Screenshot 2024-05-29 um 13:43:49 Uhr.png

Ein Tipp zum Abrufen der IDoc-Struktur aus dem IDoc Listener Snap

Da der IDoc Listener Snap jedes IDoc aus dem SAP-System empfangen und im Binärformat weiterleiten kann, hängt der Aufbau nachgelagerter Pipelines von Ihrem Verständnis der IDoc-Struktur ab. Ein Trick, den wir häufig anwenden, um die Struktur der IDocs zu verstehen, besteht darin, einen HTTP Client Snap mit einer Binäreingabe direkt an den SAP IDoc Listener Snap-Ausgang anzuschließen und den Inhalt an einen API-Mock-Service weiterzuleiten, der die empfangene Anfrage anzeigt.

Screenshot 2024-05-28 um 16:19:50 Uhr.png

Dadurch erhalten Sie das unten stehende XML-Dokument für das Demo-IDoc, das wir in dieser Blogserie verwenden. Anhand dieser Informationen können Sie dann Ihre Pipeline erstellen. 

<?xml version="1.1"?>
<ZPERSON01>
	<IDOC BEGIN="1">
		<EDI_DC40 SEGMENT="1">
			<TABNAM>EDI_DC40</TABNAM>
			<MANDT>001</MANDT>
			<DOCNUM>0000000000007004</DOCNUM>
			<DOCREL>754</DOCREL>
			<STATUS>30</STATUS>
			<DIRECT>1</DIRECT>
			<OUTMOD>2</OUTMOD>
			<IDOCTYP>ZPERSON01</IDOCTYP>
			<MESTYP>ZPERSONDATA</MESTYP>
			<SNDPOR>SAPA4H</SNDPOR>
			<SNDPRT>LS</SNDPRT>
			<SNDPRN>A4HCLNT001</SNDPRN>
			<RCVPOR>A000000002</RCVPOR>
			<RCVPRT>LS</RCVPRT>
			<RCVPRN>SNPCLNT000</RCVPRN>
			<CREDAT>20240528</CREDAT>
			<CRETIM>231206</CRETIM>
			<SERIAL>20240528231206</SERIAL>
		</EDI_DC40>
		<ZPERSONDATA01 SEGMENT="1">
			<FIRSTNAME>Elmo</FIRSTNAME>
			<LASTNAME>Monster</LASTNAME>
			<TITLE>Monster</TITLE>
			<GENDER>male</GENDER>
			<STREET>123 Sesame Street</STREET>
			<CITY>New York City</CITY>
			<ZIP>10023</ZIP>
			<COUNTRY>United States</COUNTRY>
			<EMAIL>[email protected]</EMAIL>
			<PHONE>+12125953456</PHONE>
		</ZPERSONDATA01>
	</IDOC>
</ZPERSON01>

Der SAP-IDoc-Dokument-Listener-Snap

Im Gegensatz zum IDoc Listener Snap können Sie beim IDoc Document Listener Snap den IDoc-Basistyp auf der Registerkarte „Einstellungen“ des Snaps festlegen. Auf diese Weise kann der Snap die IDoc-Struktur während der Validierung aus dem SAP-System abrufen und Sie können sie in einem nachgelagerten Snap wie einem Mapper Snap verwenden. Wenn Sie nur einen IDoc-Basistyp in die Pipeline aufnehmen möchten, ist dies sehr hilfreich, da Standard-SAP-IDocs in der Regel sehr groß sind und viele Segmente enthalten. Die Möglichkeit, die Struktur weiterzugeben, vereinfacht die Konfiguration der Pipeline erheblich. Der IDoc Document Listener Snap akzeptiert und verarbeitet jedoch im Vergleich zum IDoc Listener Snap unterschiedliche IDoc-Basistypen nicht sehr gut.

Screenshot 2024-05-28 um 17:09:25 Uhr.png

Die beigefügte Pipeline „sap-idoc-document-listener-to-http” nutzt den IDoc Document Listener Snap und ordnet die Ausgabe einfach einem HTTP Client Snap zu, der so konfiguriert ist, dass er das IDoc an einen HTTP-Endpunkt sendet. 

Screenshot 2024-05-28 um 17:19:22 Uhr.png

Nach der Validierung der Pipeline wird die Downstream-Struktur des IDOC im Mapper Snap angezeigt, sodass Sie damit die erforderliche Zuordnung vornehmen können.

Screenshot 2024-05-28 um 16:33:45 Uhr.png

Der in diesem Snap verwendete HTTP-Endpunkt würde ein JSON-Dokument im Hauptteil der HTTP-POST-Anfrage empfangen, das wie die folgende JSON-Struktur aussehen würde.

{
   "IDOC":{
      "@BEGIN":"1",
      "EDI_DC40":{
         "@SEGMENT":"1",
         "TABNAM":"EDI_DC40",
         "MANDT":"001",
         "DOCNUM":"0000000000007020",
         "DOCREL":"754",
         "STATUS":"30",
         "DIRECT":"1",
         "OUTMOD":"2",
         "IDOCTYP":"ZPERSON01",
         "MESTYP":"ZPERSONDATA",
         "SNDPOR":"SAPA4H",
         "SNDPRT":"LS",
         "SNDPRN":"A4HCLNT001",
         "RCVPOR":"A000000002",
         "RCVPRT":"LS",
         "RCVPRN":"SNPCLNT000",
         "CREDAT":"20240529",
         "CRETIM":"002032",
         "SERIAL":"20240529002032"
      },
      "ZPERSONDATA01":{
         "@SEGMENT":"1",
         "FIRSTNAME":"Elmo",
         "LASTNAME":"Monster",
         "TITLE":"Monster",
         "GENDER":"male",
         "STREET":"123 Sesame Street",
         "CITY":"New York City",
         "ZIP":"10023",
         "COUNTRY":"United States",
         "EMAIL":"[email protected]",
         "PHONE":"+12125953456"
      }
   }
}

Trace-Dateien aktivieren

Bei allen SAP Snaps, die die SAP JCo-Bibliothek verwenden, können Sie die SAP JCo-Ablaufverfolgung aktivieren, indem Sie das Kontrollkästchen „Ablaufverfolgung aktivieren“ in der Konfiguration aktivieren. Dies ist im obigen Screenshot der Konfiguration des IDoc Listener Snaps zu sehen. Nach der Aktivierung schreibt SAP JCo eine Ablaufverfolgungsdatei für die Kommunikation zwischen dem SAP-System und GroundPlex in das Verzeichnis /opt/snaplogic auf dem Knoten, der die Verbindung ausführt. Die Dateien beginnen mit JCO und enden mit .trc. Sie können die Stufe in der Verbindung konfigurieren, indem Sie den Konfigurationsparameter jco.trace_level mit einem Wert zwischen 0 und 10 verwenden. 

Screenshot 2024-05-28 um 16:49:35 Uhr.png

Was kann ich mit dem IDoc Read Snap machen?

Mit demIDoc Read Snap können Sie ein vorhandenes IDoc in Snaplogic-Pipelines lesen. Dies kann nützlich sein, wenn Sie Pipelines erstellen, die in SAP konfigurierte IDocs erstellen, die nicht sofort, sondern über einen später ausgeführten geplanten Hintergrundjob verarbeitet werden sollen. In diesem Fall erhält das IDoc bei erfolgreicher Erstellung den Statuscode64 – IDoc bereit zur direktenWeitergabe an die Anwendung nach der Erstellung des IDocs. Sie können dann eine zweite Pipeline erstellen, die regelmäßig ausgeführt wird, um zu überprüfen, ob sich der Status in SAP geändert hat und ob die weitere Datenverarbeitung fortgesetzt wurde. Sie können auch den IDoc Read Snap verwenden, um alle Status abzurufen, die ein IDoc durchlaufen hat, sowie die Zeitstempel, zu denen die Änderungen stattgefunden haben. Diese sind im FeldSTATUSder Objekte im ArrayINT_EDIDSenthalten, wie unten gezeigt. Das ObjektIDOC_CONTROLenthält ebenfalls ein FeldSTATUSmit dem aktuellen Status zum Zeitpunkt der Erstellung, der mit dem letzten Objekt im ArrayINT_EDIDSidentisch ist.

Screenshot 2024-05-28 um 15:35:07 Uhr.png

Optimierung des Funktionsbausteins, der das IDOC in SAP liest

Durch die Optimierung des Standardfunktionsbausteins IDOC_READ_COMPLETELY, den wir in Teil 1 dieses Blogs als Grundlage für unsere RFC-fähige benutzerdefinierte Version verwendet haben, können Sie die Leistung erheblich verbessern. Dies kann erreicht werden, indem Sie den Funktionsbaustein so modifizieren, dass er nur den Kontrollsatz zurückgibt und die Daten- und/oder Statussätze ausschließt. Auf diese Weise können Sie drei verschiedene Funktionsbausteine erstellen, die je nach den spezifischen Informationen, die Sie aus dem SAP-System benötigen, in den IDoc-Read- und IDoc-Write-Snaps austauschbar verwendet werden können. Die drei Funktionsbausteine können denselben ABAP-Code verwenden, unterscheiden sich jedoch nur in ihrem Namen und ihrer Tabellenauswahl (siehe Beispiel unten).

* read data records - if requested
  IF INT_EDIDD IS REQUESTED.
  ...
  ENDIF.
* read status_records - if requested
  IF INT_EDIDS IS REQUESTED.
  ...
  ENDIF

Entfernen Sie dazu entweder eine oder beide der in der folgenden Abbildung gezeigten Tabellen aus Ihrem Funktionsbaustein und der Schnittstelle, die den Funktionsbaustein IDOC_READ_COMPLETELY innerhalb Ihres Moduls aufruft. Sie könnten beispielsweise diese drei Funktionsbausteine erstellen.

  1. ZIDOC_READ_COMPLETELY (enthält alles wie IDOC_READ_COMPLETELY)
  2. ZIDOC_READ_COMPLETELY_C (enthält keine Tabellen, nur die Kontrollstruktur wird zurückgegeben)
  3. ZIDOC_READ_COMPLETELY_CS (umfasst die Kontrollstruktur und die TabelleINT_EDIDS )
Screenshot 2024-05-29 um 14:33:30 Uhr.png

Rücksendung von Statusinformationen zu einem vorhandenen IDoc an SAP

Im letzten Teil des Blogs schließen wir den Kreis der IDoc-Verarbeitung, indem wir uns die Änderung des Status eines erstellten IDocs in SAP aus einer SnapLogic-Pipeline ansehen. Sobald ein IDoc erfolgreich an eine SnapLogic-Pipeline übergeben wurde, ändert das SAP-System den Status des IDocs von Status 30 – IDoc versandbereit in 03 – IDoc-Daten an Port OK übergeben. Aus Sicht von SAP bedeutet dies, dass das SAP-System das IDoc erfolgreich an den Partner übergeben hat, der für den Empfang des IDocs konfiguriert ist. Was danach mit dem IDoc passiert ist, ist dem SAP-System zu diesem Zeitpunkt nicht bekannt. Wenn Sie die IDoc-Überwachung verwenden, können die verwendeten Tools niemals sagen, was mit den über das IDoc gesendeten Daten geschehen ist. Das Belassen der IDocs im Status 03 ist daher in der Regel ein unbefriedigender Zustand, da Sie natürlich wissen möchten, ob die Daten ihr Ziel erfolgreich erreicht haben oder ob unterwegs etwas schiefgelaufen ist, um möglicherweise Warnmeldungen auszulösen oder andere Maßnahmen zur Behebung der fehlenden Informationen zu ergreifen.

Um den Status des IDocs in SAP zu ändern, müssen Sie ein neu erstelltesSYSTAT01-IDoc vom Nachrichtentyp STATUS an das SAP-System zurücksenden.

Screenshot 2024-05-28 um 14:35:14 Uhr.png

Wir haben unten eine Beispiel-Pipeline angehängt, die unser im gesamten Blog verwendetes IDoc ZPERSON01 empfängt, den Inhalt in einen MSSQL-Server schreibt und dann ein neues IDoc SYSSTAT01 mit dem Statuscode 12 – Versand OK, wenn das Schreiben in die Datenbank erfolgreich war, und 11 – Fehler beim Versand, wenn es fehlgeschlagen ist, erstellt.

Screenshot 2024-05-28 um 14:59:48 Uhr.png

Die folgende JSON-Datei enthält die Felder, die für die Änderung des Status des IDocs relevant sind, wie z. B. das Feld DOCNUM mit der IDoc-Nummer des IDocs, dessen STATUS geändert werden soll, Textinformationen im Feld STATXT sowie Datum und Uhrzeit der Änderung.

{
  "EDI_DC40": {
    "MESTYP" : "STATUS",
    "SNDPRT" : "LS",
    "SNDPRN" : "SNPCLNT000",
    "SNDPOR" : "A000000002",
    "RCVPRT" : "LS",
    "RCVPRN" : "A4HCLNT001"
  },
  "E1STATS": [
    {
      "DOCNUM": "1009",
      "STATUS": "12",
      "STATXT": "Message Processessed Successfully in Snaplogic",
      "STAPA4": "status",
      "LOGDAT": "20240307",
      "LOGTIM": "000000"
    }
  ]
}

Um den Nachrichtentyp erfolgreich empfangen zu können, muss Ihre ALE-Konfiguration in SAP den STATUS als eingehenden Nachrichtentyp enthalten, der vom Prozesscode STA1verarbeitet wird, wie in der Transaktion WE20 unten gezeigt .

Screenshot 2024-05-28 um 14:54:48 Uhr.png

Im letzten Teil unserer Blogserie zu SAP IDoc Snaps befassen wir uns mit der Sicherung der Kommunikation zwischen SAP und SnapLogic durch die Konfiguration von Secure Network Communication (SNC). Diese Konfiguration ist technisch gesehen nicht Teil der IDoc-Verarbeitung, wird jedoch von allen SAP Snaps verwendet, die über die SAP JCo-Bibliotheken mit dem SAP-System kommunizieren. Sie ist auch für SAP Snaps relevant, die RFC ausführen, wie beispielsweise der SAP Execute und SAP RFC Listener Snaps.

Porträtfoto von Ingo Sauerzapf
Senior Professional Services Architect bei SnapLogic
Kategorie: Technik