Hallo Jens,
der RFC User kann sich auf jeden Fall anmelden und den Baustein aufrufen. Es sind andere Felder (Datumsfelder, Betragsfelder, andere alphanumerische Felder), die problemlos aktualisiert werden können. Es wird dabei auch ein Änderugsbeleg geschrieben, dort ist auch erkennbar, dass der RFC-Benutzer die Änderung gemacht hat. Soweit ist also alles gut.
Probleme bereiten hier die folgenden Konstellationen:
1.
Wie im OP geschildert, kommt für ein CHAR3 Feld der Wert @@ oder @@@, wird der Baustein gar nicht gerufen, sondern es wird dem Aufrufer eine Meldung "Error: got invalid answer from server 'timeout'" gegeben. Mit @ (also nur EIN @) kommt dieser Fehler nicht. Der Fehler kommt bei einem Aufruf aus dem selben SAP-System heraus (SE37 Test) nicht, dort kann man alle Werte updaten.
2.
Um das Problem zu lösen, hat man für eine Konvertierung im FuBa entschieden: 2@ bzw. 3@ sollen auf @@ bzw. @@@ umgeschlüsselt werden. Obwohl das Coding zur Umschlüsselung offensichtlich OK ist, scheinen die mitgegebenen Werte (also 2@ und 3@ nicht umgeschlüsselt zu sein, stattdessen wird 2@ und 3@ auf die Datenbank geschrieben, mit Änderungsbeleg, etc. Nach dem Hinweis oben bin ich mir dann relaktiv sicher, dass der RFC.-Aufruf noch das alte Coding, ohne Umschlüsselung, liest, daher greift diese Änderung nicht. Teste ich in der SE37, wird natürlich umgeschlüsselt. Der Verdacht wird dadurch verstärkt, dass in der Zwischenzeit auch eine temporäre Abhilfe eingebaut wurde: sofort beim Anfang wird der Input-Wert für dieses CHAR3 Feld auf eine neue Z-Tabelle geschrieben, nur um zu sehen was wirklich drin ist. Bein RFC-Aufruf bleibt die Z-Tabelle leer, beim Test in der SE37 nicht. Dieses Coding wird immer ausgeführt, es ist also schwer zu erklären wieso die Z-Tabelle nicht aktualisiert wird (mit welchem Wert auch immer). Die Endlosschleife wird offensichtlich auch nicht prozessiert (obwohl sie ganz eindeutig durchlaufen werden müsste), wenn über RFC gerufen wird, in der SE37 kommt man sofort in die Schleife. Also daraus schliesse ich eindeuitg den Schluss, dass das aktuelle Coding beim RFC-Aufruf noch nicht ausgeführt wird.
Angenommen der RFC-Aufruf arbeitet mit dem aktuellen Coding (das soll am Montag passieren), dann wird ganz bestimmt die Z-Tabelle fortgeschrieben und das Programm kommt auch in die Endlosschleife. Hier verstehe ich immer noch nicht, ob es zum erfolgreichen Debuggen erforderlich ist, dass der RFC-Benutzer, under dessen Namen ja das ganze läuft, debuggen kann, oder es reicht auch aus, wenn ich mit meinem eigenen Benutzer rangehe. Warum der Benutzertyp nicht auf Dialog umgestellt werden kann (für den RFC-User), kann ich nicht sagen, der Kunde hat hier irgendwelche interne Regelung die automatisch auch den selben RFC-Benutzer im Produktivsystem auf Dialog umstellen würde (?), und das möchte man nicht. In diese Richtung kommen wir also nicht weiter, daher ist es für mich kritisch, ob mein eigener Benutzer in der SM50 ausreicht um debuggen zu können.
3.
Es gibt noch ein Thema das mir Kopfschmerzen macht: der Baustein hat auch einen Tabellenparameter der Texte (die zum Kreditlimit-Stammsatz KNKK abgelegt werden können) fortschreiben soll. Wird da eine Zeile (oder mehrere) in dieser Tabelle übergeben, sollen diese neue Zeilen ans Ende ggf. vorhandener Texte eingefügt werden. Gibt es keine bestehenden Texte, sollen sie angelegt werden. Funktioniert alles wunderbar wenn man in der SE37 testet. (Die Tabelle hat die Struktur TLINE). Nun wird beim RFC-Aufruf eine Zeile übergeben, wird diese gar nicht aktualisiert, als wäre nichts da. Wir haben einen ähnlichen FuBa, der von einem anderen externen System gerufen wird (über SAP Java Connector Version 3.0.6, beim anderen weiss ich nichts über das externe System). Hier werden gar keine Texte mitgegeben, und es ist auch OK wenn der Stammsatz auch noch keine Texte hat. Wenn jedoch bereits Texte im SAP vorhanden sind, werden diese irgendwie gelesen und dann doppelt zurückgeschrieben. Ruft man den Baustein für den selben (Test)kunden mehrmals auf, dann können in der Zwischenzeit so viele Texte gespeichert werden, dass die Verarbeitung mit dem Kurzdump EXPORT_TOO_MANY_DATA abgebrochen wird. Vorhandene Texte können dabei NUR dann gelesen werden, wenn in der Tabellenparameter nicht leer (T_TEXLINES[] NOT INITIAL) ist. Es wird aber ganz bestimmt gar nichts übergeben. Trotzdem kommt der baustein in den Zweig zum Update der Texte, die eindeutig obige Voraussetzung hat. Irgendwie habe ich den Eindruck, dass der Inhalt dieser Tabelle (TABLES-.Parameter) zwischen den einzelnen Aufrufen irgendwie nicht gelöscht wird (es gibt auch einen Baustein zum reinen Auslesen der Texte), sonst verstehe ich nicht wie man in den Zweig mit dem Texte fortschreiben kommt. Hier wäre die Möglichkeit zum Debuggen auch Gold wert....
Ich hoffe am Montag sind dann die Endlosschleifen endlich aktiv, und dann stellt sich schnell heraus ob ich (mit dem eigenen Benutzer) den RFC-Prozess auch debuggen kann... Der RFC-Benutzer verfügt schon über Berechtigung zum Debuggen, das konnte ich in der SU01 (nur Anzeigerechte) prüfen.
Vielen Dank nochmals für Eure Hinweise und Tipps. Ich denke am Montag werde ich mich wieder melden...
Gruß,
scsaba