Hallo ABAP Community,
ich stehe vor einem Problem, das ich zwar erkannt habe, aber ich habe keine Lösung dazu. Ich hoffe, es gibt hier einen ABAP Spezi, der mir dabei helfen kann
Wir benutzen eine externe Software, um unsere Fertigungsaufträge umzuterminieren. Nachts läuft dann ein Job, der die neuen Termin-Daten zu den Fertigungsaufträgen von einer Datenbank liest und ins SAP zurückschreibt. Daher haben wir ein Programm geschrieben, das dies für uns erledigen soll. Dafür benutze ich den FuBa CLOI_CHANGES_UPL_31, der Fertigungsaufträge umterminieren kann.
Problematik ist: Ich rufe den FuBa CLOI_CHANGES_UPL_31 mit dem Zusatz STARTING NEW TASK lv_task in einem LOOP mehrmals auf. Wenn ich dies ohne den Zusatz STARTING NEW TASK mache, bringt er mir beim zweiten Aufruf den Fehler "Bitte Interface nach Commit neu starten", da man den FuBa in einem Modus nur einmal mit Commit-Flag aufrufen kann. Daher der Zusatz für den neuen externen Modus. Kann man alles im Hinweis 545860
https://launchpad.support.sap.com/#/notes/545860 nachlesen.
Besonders dieser Punkt ist hier wichtig:
4. Kann ich den Funktionsbaustein CLOI_CHANGES_UPL_31 mehrfach mit COMMIT (d.h. COMMITFLG = 'C') aufrufen?
Antwort:
Das hängt davon ab, wie der Funktionabaustein aufgerufen wird. Wie in 2.) beschrieben ist, kann CLOI_CHANGES_UPL_31 innerhalb eines Modus nur einmal mit COMMITFLG = 'C' aufgerufen werden. Deshalb ist es notwendig für einen erneuten Aufruf mit COMMITFLG = 'C' einen neuen externen Modus zu eröffnen.
Wird CLOI_CHANGES_UPL_31 mittels RFC von einem externen System aufgerufen, kann ein neuer Modus dadurch eröffnet werden, indem der aktuelle Modus beendet wird (Verbindungsabbau der RFC Verbindung) und die RFC-Verbindung dann neu geöffnet wird (Verbindungsaufbau).
CLOI_CHANGES_UPL_31 wurde für den Aufruf als RFC konzipiert. Deshalb ist ein mehrfacher Aufruf von ABAP aus nicht, oder nur mit höherem ABAP Programmieraufwand und guten ABAP-Kenntnissen möglich.
In ABAP muß ebenfalls ein neuer (externer) Modus eröffnet werden, bevor CLOI_CHANGES_UPL_31 erneut mit COMMITFLG = 'C' (z.B. innerhalb einer LOOP-Schleife) aufgerufen werden kann.
In ABAP kann ein neuer (externer) Modus z.B. durch das Kommando CALL FUNCTION ... STARTING NEW TASK eröffnet werden. Beachten Sie, daß z.B. durch die Kommandos SUBMIT <report> oder CALL TRANSACTION nur ein neuer interner Modus eröffnet wird und dies deshalb nicht geeignet ist.
Nun zum eigentlichen Problem: Wenn ich den FuBa in einem neuen externen Modus öffne, gehen mir die Rückgabetabellen flöten. Der FuBa füllt Tabellen mit Message-Log und Methoden-Log, den ich nach Ausführen des Bausteins auswerten möchte. Nun liefert er mir nur leere Tabellen. Wenn ich im Debugger im FuBa an das Ende springe, sind die Tabellen gefüllt. Da sich der neue externe Modus aber mit Beenden des FuBas wieder schließt, bekomme ich auch keine Tabellen zurück.
Ich hoffe wirklich, dass jemand hier eine Idee dazu hat! Damit wäre mir wirklich sehr geholfen.
Vielleicht gibt es auch eine andere Alternative zu STARTING NEW TASK, mit der sich das Problem umgehen lässt. Hab schon daran gedacht einen eigenen FuBa zu entwickeln, den ich mit STARTING NEW TASK aufrufe, der wiederum den anderen FuBa aufruft und die Rückgabewerte wegschreibt, bevor der externe Modus sich schließt. Aber vielleicht geht es auch einfacher und ich denke einfach nur viiiiiel zu kompliziert
VG,
Mareike