Warum habe ich DATA_BUFFER_EXCEED beim Aufruf RFC_READ_TABLE zu CDPOS in java
Die Anforderung in meine java - /groovy-Programm ist wie folgt: Benutzer dürfen-input-Tabelle Namen und Tabelle-Felder als query Eingabe-Parameter und erwarten einige das Ergebnis der Abfrage aus SAP.
Aus der Eingabe des Benutzers, bekomme ich den Namen der Tabelle [CDPOS] und [CDHDR]. Nach dem Lesen der SAP-Dokumentationen und googeln fand ich diese Tabellen speichern änderungsbeleg protokolliert. Aber ich fand keine remote aufrufen von Funktionen, die verwendet werden können, die in java zum ausführen dieser Art von Abfragen. Dann habe ich die veralteten RFC "RFC_READ_TABLE" und versucht aufzubauen, individuelle Abfragen nur abhängig von diesem RFC. Allerdings fand ich, wenn die Anzahl der gewünschten Felder, auf die ich bestanden zu diesem RFC sind mehr als 2, ich habe immer das DATA_BUFFER_EXCEED Fehler auch wenn ich die Grenze der max rows.
Ich bin nicht autorisiert, eine ABAP-Entwickler im sap-system und können nicht fügen Sie einen beliebigen UKW zu bestehenden Systemen, so kann ich nur den code schreiben, erfüllen diese Anforderung in JAVA.
Mache ich etwas falsch? Könnten Sie mir einige Hinweise auf das Problem?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
DATA_BUFFER_EXCEEDED passiert nur, wenn die Gesamtbreite der Felder, die Sie Lesen möchten, übersteigt die Breite der DATA-parameter, die variieren können abhängig von der SAP release - 512 Zeichen für die aktuellen Systeme. Es hat nichts zu tun mit der Anzahl der Zeilen, aber die Größe eines einzelnen Datensatzes. Die Frage ist also: Was sind die Inhalte der FELDER parameter? Wenn es leer ist, bedeutet dies, "Lesen Sie alle Felder aus." CDHDR ist 192 Zeichen in der Breite, also würde ich davon ausgehen, dass das problem ist, CDPOS, die 774 Zeichen breit. Die wichtigste Frage wäre die Felder VALUE_OLD und VALUE_NEW, beide 245 Zeichen. Auch wenn Sie nicht bekommen Entwickler Zugriff haben, sollten Sie prod jemand zu Lesen bekommen-nur Wörterbuch zugreifen zu können, untersuchen die Strukturen im detail.
Shameless plug: RCER enthält eine wrapper-Klasse für RFC_READ_TABLE, der kümmert sich um Feld der Handhabung und sorgt dafür, dass die gesamte Breite der ausgewählten Felder unterhalb der Grenzwerte liegt, die von der Funktion Modul.
Sich auch bewusst sein, dass diese Tabellen können RIESIG sein in Produktionsumgebungen - denke, dass Milliarden von Einträgen. Sie können ganz einfach bringen Sie Ihre Datenbank zu erliegen, die von der Durchführung übermäßige lese-Operationen auf diese Tabellen.
Es ist ein Weg, um die DATA_BUFFER_EXCEED Fehler. Obwohl diese Funktion ist nicht freigegeben für Kunden wie pro SAP-OSS-Hinweis 382318, die Sie bekommen können, um dieses Problem mit änderungen an der Art und Weise übergeben Sie Parameter zu dieser Funktion. Es ist nicht ein einzelnes Feld, wodurch Sie Ihre Fehler, aber wenn die Zeile der Daten übersteigt 512 bytes dieser Fehler wird ausgelöst. CDPOS haben dieses Problem sicher!!!
Umgehen, wenn Sie wissen, wie rufen Sie die Funktion mittels Jco-und pass-Tabelle Parameter ist die Angabe der genauen Felder, die Sie wollen zurück. Sie können dann halten Sie Ihre Ergebnisse unter dem 512-byte-Grenze.
Mit Ihrem Beispiel der Tabelle CDPOS, angeben, so etwas wie dies, und Sie sollten gut zu gehen...(Vorsicht, CDPOS kann Holen Sie sich massive! Sie sollten angeben, und geben Sie eine where-Klausel!)
FELDER = 'OBJECTCLAS'....
FELDER = 'OBJECTID'
In Java ausgedrückt werden kann, als..
listParams.setValue(dies.getpObjectclas(), "OBJECTCLAS");
Durch die Begrenzung der Felder, die Sie zurücksenden, Sie können diesen Fehler vermeiden.