SAP kann auch Google Protobuf sprechen!

SAP kann auch Google Protobuf sprechen!

Wer sich im SAP Schnittstellenkosmos bewegt, der beschäftigt sich meistens mit IDocs, RFCs, CSVs und XML basierten Schnittstellen wie ABAP Proxys oder SOAP Webservices. Seit einigen Jahren gibt es im SAP PO System mit dem REST Adapter auch eine komfortable Lösung, um REST Aufrufe im Format JSON zu unterstützen, so dass man sich für die alltäglichen Schnittstellenanforderungen bestens gerüstet sieht.

Doch wie lässt sich die nicht ganz so alltägliche Anforderungen realisieren, eine Anwendung mit SAP per Schnittstellen zu integrieren, die ihre Daten im Format „Protocol Buffers“ (Protobuf) bereitstellt und verarbeitet?

Ganz einfach: Man nutzt die Möglichkeiten der CPI Suite und übersetzt Protobuf in XML.

Was ist Protobuf?

Protobuf (Protocol Buffers) wurde von Google entwickelt und ist ein strukturiertes Datenformat zum Austausch von Daten. Im Gegensatz zu XML und JSON werden Protobuf Daten im Binärformat übertragen anstatt in einem textuellen Format. Dadurch können Daten im Protobuf Format effizienter übertragen werden. Laut Angaben von Google ist die Strukturierung von Daten mittels Protobuf zwischen drei bis zehn Mal kleiner und die Übertragung 10 bis 20 Mal schneller als die einer XML Struktur.

Protobuf Konvertierung in der SAP Cloud Platform Integration Suite

Die SAP Cloud Platform Integration Suite ist anders als z.B. das SAP PI System auch für die Verarbeitung von Daten, die nicht als XML, JSON oder CSV daherkommen bestens geeignet: Verschiedene, frei programmierbare Verarbeitungsschritte lassen sich in den Integration Flows beliebig miteinander verketten.

Bildmodul

Um eine Protobuf Nachricht in XML zu überführen, müssen drei Schritte durchgeführt werden:

  1. Dekodierung der Base64 codierten Protobuf Nachricht
  2. Überführung der dekodierten Nachricht in eine JSON Nachricht
  3. Konvertierung der JSON Nachricht in eine XML Nachricht

Eingehende, Base64 codierte Protobuf Nachrichten können in der Cloud Platform Integration mittels Standardfunktionalitäten (Base64 Decoder) in das Protobuf Binär-Format konvertiert werden.

Die Überführung der dekodierten Protobuf Nachricht in eine JSON Nachricht erfolgt mit Hilfe des von Google zur Verfügung gestellten Protocol Compilers und zusätzlicher Protobuf Utilities. Mit dem Compiler generieren wir uns aus der in Protocol Buffers definierten Nachricht Java Klassen, welche als Java Archive in der SAP Cloud Platform Integration verwendet können. Damit können wir mit Hilfe eines einfachen Groovy Scripts die Binär-Daten in Java-Objekte überführen, welche wir anschließend mit Hilfe der Protobuf Utilities nach JSON konvertieren.

Die anschließende Konvertierung der JSON Daten in XML Daten erfolgt wiederum mit Standardfunktionalitäten der Cloud Platform Integration Suite. Damit haben wir die ursprünglich im Binär Fomat vorliegende Protobuf Nachricht für die weitere Verwendung in einem Mapping oder zur direkten Weiterleitung an einen ABAP Proxy aufbereitet und bewegen uns wieder auf gewohntem Terrain.

PS: Auch in einem SAP PI System ließe sich die Protobuf Konvertierung realisieren, allerdings etwas versteckt innerhalb des Mapping Schrittes.

Sollten Leser dieses Blogs Fragen zum Thema haben oder vielleicht eine Realisierung solch einer Schnittstellen anstreben – kontaktieren Sie uns gerne.

Kontakt

Michael Neuenstadt

Telefon: +49 (0)40 53302-0
E-Mail: info@cimt-ag.de
Twitter: twitter.com/cimtag

cimtAcademy

Jetzt registrieren und keine Veranstaltungen mehr verpassen.



    div#stuning-header .dfd-stuning-header-bg-container {background-image: url(https://www.cimt-ag.de/wp-content/uploads/2017/10/home-start2_low.jpg);background-color: #848484;background-size: cover;background-position: center center;background-attachment: fixed;background-repeat: no-repeat;}#stuning-header div.page-title-inner {min-height: 300px;}div#stuning-header .dfd-stuning-header-bg-container.dfd_stun_header_vertical_parallax {-webkit-transform: -webkit-translate3d(0,0,0) !important;-moz-transform: -moz-translate3d(0,0,0) !important;-ms-transform: -ms-translate3d(0,0,0) !important;-o-transform: -o-translate3d(0,0,0) !important;transform: translate3d(0,0,0) !important;}