RFC_READ_TABLE_to_XML_Preparser

Gruppe

Preparser

Funktion

Erlaubt Abfragen aus SAP-Datenbanktabellen durch Aufruf des RFC_READ_TABLE und liefert die Ergebnisse als XML-Daten.

Konfigurationsdatei

Keine.

Vorbemerkungen


Dieser Preparser ist nur für Kunden mit lizenziertem SapConnectionService relevant.


  • Abfragen auf SAP-Datenbanktabellen können in Phase 1 durch Aufruf des RFC_READ_TABLE erfolgen.

  • Die in der Response des RFC_READ_TABLE gelieferten Daten bestehen aus zwei Tabellen FIELDS und DATA, beide im Feste-Länge-Format.

  • Die Tabelle Data liefert dabei zwar zeilenweise die Datensätze aus dem Select, aber die Zuordnung der Werte zu einzelnen Tabellenspalten muss mit dem Ergebnis der Tabelle FIELDS interpretiert werden.

  • Der hier beschriebene Preparser erzeugt aus der Feste-Länge-Struktur der Response die interpretierten Datensätze als XML-Daten, wobei die tatsächlichen Feldnamen der SAP-Tabelle als XML-Tag auftreten.

  • Dadurch kann in der Quellstruktur des Profils die Response im Kontext der Datenbanktabelle geparst werden.

Beispiel


Der Select der Felder LAND1, SPRAS, LANDK, INTCA3, LNPLZ der Tabelle T005 mit der WHERE-Klausel INTCA3 LIKE 'D%' liefert folgende Response im Feste-Länge-Format.


images/download/attachments/177899698/1382-version-1-modificationdate-1717064035267-api-v2.png


Am Anfang steht mit 30 Zeichen Länge der Name des Schnittstellen-Parameters des RFCs, dahinter als Feste-Länge-Datensatz ohne Trennzeichen jeweils der entsprechende Datensatz. Die Tabelle FIELDS enthält jeweils den Namen, Offset-Position, Länge, Typ und Beschreibungstext der Spalten der SAP-Datenbanktabelle. Mit diesen Strukturinformationen muss jeder Datensatz des Select-Ergebnisses in der Tabelle DATA ausgewertet werden.


Der RFC_READ_TABLE_to_XML_Preparser wandelt die Daten in ein XML-Format um, das die Feldnamen der SAP-Datenbanktabelle als XML-Felder enthält.


images/download/attachments/177899698/1383-version-1-modificationdate-1717064035265-api-v2.png


Das Root-Element ITEMS enthält als Attribute die Anzahl der Datensätze, den SAP-Tabellen-Namen, den SAP-Alias, sowie die Request-Parameter ROWCOUNT und ROWSKIP, die mit 0 unberücksichtigt blieben.

Zusätzlich ist unter OPTIONS die angewendete Query enthalten. Die Datensätze ITEM mit laufender Nummer enthalten die entsprechenden Spaltenwerte der SAP-Tabelle. Diese Daten können als XML geparst werden.

Strukturimport


Die Klasse enthält die erforderliche Option zum Import der Quellstruktur nach Konfiguration des entsprechenden RFC-Aufrufs RFC_READ_TABLE in Phase 1. Dabei wird zusätzlich die Dokumentenart des Profils von Feste Länge zu XML geändert und der Name des Root-Tags zu ITEMS.

Voraussetzungen für den Strukturimport


  • In Phase 1 wird der SAP (Eingangsagent Cron) gewählt.

  • Die Dokumentenart des Profils ist Feste Länge.

  • Der Name des RFCs ist RFC_READ_TABLE.

  • Das Ausgabeformat ist FIXRECORD.

  • Nach Klicken auf RFC anfragen erscheint der Parameter QUERY_TABLE. Dort ist der Name der SAP-Datenbank-Tabelle einzutragen, z. B. T005.

  • Unter den Tabellen-Parametern FIELDS wurden die Namen der zu selektierenden Datenbank-Spalten eingetragen, oder es werden, wenn FIELDS leer bleibt, alle Spalten in natürlicher Reihenfolge verwendet.

  • Das Profil wurde vorübergehend gespeichert.


Nun kann mit der Schaltfläche Struktur erzeugen die Quellstruktur erzeugt werden. Wenn die oben genannten Voraussetzungen nicht erfüllt sind, wird die übliche Feste-Länge-Struktur des RFC_READ_TABLE erzeugt. Wenn alle Voraussetzungen erfüllt sind, wird stattdessen die Routine innerhalb der Preparser-Klasse die entsprechende "semantische" XML-Struktur erzeugen und die Dokumentenart des Profils zu XML ändern, sowie der XML-Root-Name ITEMS eingetragen.

Einschränkungen


Da die Strukturinformationen der FIELDS-Zeilen der RFC-Response immer am Ende stehen, müssen alle Daten der Response während der Umwandlung vom Preparser im Arbeitsspeicher gehalten werden. Der Preparser ist damit nicht für wirkliche Massendaten geeignet, die den Arbeitsspeicher sprengen würden. Eine entsprechende Einschränkung durch die WHERE-Bedingung in OPTIONS oder durch den Request-Parameter ROWCOUNT ist zwingend notwendig.