Frage

Ihr java / groovy Programm empfängt Tabellennamen und Tabellenfelder aus der Benutzereingabe, es wird die Tabellen in SAP-Abfragen und gibt seinen Inhalt.

Die Benutzereingabe kann die Tabellen CDPOS und CDHDR betreffen. Nachdem die SAP-Dokumentation zu lesen und googeln, fand ich diese Tabellen speichern Änderungsprotokolle Dokument sind. Aber ich habe keine Remote Call Funktionen, die in Java verwendet werden können, um diese Art von Abfragen auszuführen.

Dann habe ich die veraltete RFC-Funktionsbaustein RFC_READ_TABLE und versucht, maßgeschneiderte Abfragen aufzubauen nur auf dieser RFC abhängig. Allerdings fand ich, wenn die Anzahl der gewünschten Felder I diesen RFC vergangen ist mehr als 2, ich den DATA_BUFFER_EXCEEDED Fehler immer bekam, auch wenn ich die max Reihen begrenzen.

Ich bin nicht als ein ABAP-Entwickler im SAP-System autorisiert und kann jede FM an bestehende Systeme nicht hinzufügen, so kann ich nur Code schreiben diese Anforderung in JAVA zu erreichen.

Bin ich etwas falsch? Könnten Sie mir geben einige Hinweise zu diesem Thema?

War es hilfreich?

Lösung

DATA_BUFFER_EXCEEDED geschieht nur, wenn die Gesamtbreite der Felder, die Sie lesen möchten, überschreitet die Breite des DATA Parameter, die auf der SAP-Release variieren - 512 Zeichen für aktuelle Systeme. Es hat nichts mit der Anzahl der Reihen zu tun , aber die Größe eines einzelnen Datensatzes.

Die Frage ist also: Was sind die Inhalte des FIELDS Parameter? Wenn es leer ist, „lesen Sie bitte alle Felder aus.“ Das bedeutet, CDHDR ist 192 Zeichen in der Breite, so dass ich davon ausgehen würde, dass das Problem CDPOS ist die breite 774 Zeichen ist. Das Hauptproblem wäre die Felder VALUE_OLD und VALUE_NEW, beide 245 Zeichen.

Auch wenn Sie keinen Entwickler Zugang erhalten, sollten Sie jemand prod schreibgeschützt bekommen Wörterbuch zugreifen zu können, die Strukturen im Detail untersuchen.

Shameless Stecker: RCER enthält eine Wrapper-Klasse für RFC_READ_TABLE das, dass die Pflege von Feld Handhabung und sorgt nimmt Gesamtbreite der ausgewählten Felder unterhalb der Grenze wird durch das Funktionsmodul auferlegt.

Beachten Sie auch, dass diese Tabellen in Produktionsumgebungen können enorm sein - denken Milliarden von Einträgen. Sie können Ihre Datenbank zum Erliegen, indem zu viele Leseoperationen an diesen Tabellen leicht zu bringen.

PS: RFC_READ_TABLE ist nicht für den Kundeneinsatz gemäß SAP-Hinweis veröffentlicht 382.318 , und die Notiz 758.278 Ihre eigene Funktion zu erstellen, empfiehlt und Modul bietet eine Vorlage mit einer verbesserten Logik.

Andere Tipps

Es gibt einen Weg um den DATA_BUFFER_EXCEED Fehler. Obwohl diese Funktion nicht für Kunden nutzen laut SAP OSS-Hinweis 382318 freigegeben wird, können Sie dieses Problem mit Änderungen an der Art und Weise erhalten Sie die Parameter an diese Funktion übergeben. Es ist nicht ein einzelnes Feld, das Ihr Fehler verursacht, aber wenn die Reihe von Daten überschreitet 512 Bytes wird dieser Fehler ausgelöst werden. CDPOS wird sicher dieses Problem haben!

Die Arbeit um, wenn Sie wissen, wie die Funktion Jco anrufen und Tabelle Parameter übergeben, die genauen Felder angeben Sie zurückgegeben werden sollen. Sie dann Ihre zurückgegebenen Ergebnisse unter der 512-Byte-Grenze halten.

Arbeiten mit dem Beispiel von Tabelle CDPOS, so etwas wie dies angeben und Sie sollten gut zu gehen ... (Vorsicht, CDPOS massiv bekommen! Sie sollten einen where-Klausel angeben und übergeben!)

FIELDS = 'OBJECTCLAS' .... FIELDS = 'OBJECTID'

In Java kann wie folgt ausgedrückt werden ..

listParams.setValue (this.getpObjectclas () "OBJECTCLAS");

Durch die Felder zu begrenzen Sie kehren Sie diesen Fehler vermeiden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top