Aufruf FuBa in neuem externen Modus

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Aufruf FuBa in neuem externen Modus

Beitrag von mareikemei92 (ForumUser / 49 / 18 / 0 ) »
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

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Aufruf FuBa in neuem externen Modus

Beitrag von kybernetes (ForumUser / 1 / 0 / 1 ) »
Hallo

von Deinem Fertigungs-Fuba hab ich keine Ahnung aber grundsätzlich werden die Werte bei STARTING NEW TASK über eine Callback-Routine ausgelesen.
Also beim Aufruf des Fubas folgenden Zusatz verwenden um die Callback Routine bekannt zu geben: PERFORMING f_my_subr ON END OF TASK.
Und dann die f_my_subr implementieren mit dem Keyword RECEIVE RESULTS FROM FUNCTION.... Hier könnte CLOI_CHANGES_UPL_31 stehen, habe aber keine Ahnung von dem Ding.

Hier ein Beispiel:
https://blogs.sap.com/2012/08/20/parall ... mple-code/

hope this helps.

Folgende Benutzer bedankten sich beim Autor kybernetes für den Beitrag:
mareikemei92


Re: Aufruf FuBa in neuem externen Modus

Beitrag von mareikemei92 (ForumUser / 49 / 18 / 0 ) »
kybernetes hat geschrieben:Hallo

von Deinem Fertigungs-Fuba hab ich keine Ahnung aber grundsätzlich werden die Werte bei STARTING NEW TASK über eine Callback-Routine ausgelesen.
Also beim Aufruf des Fubas folgenden Zusatz verwenden um die Callback Routine bekannt zu geben: PERFORMING f_my_subr ON END OF TASK.
Und dann die f_my_subr implementieren mit dem Keyword RECEIVE RESULTS FROM FUNCTION.... Hier könnte CLOI_CHANGES_UPL_31 stehen, habe aber keine Ahnung von dem Ding.

Hier ein Beispiel:
https://blogs.sap.com/2012/08/20/parall ... mple-code/

hope this helps.
Guten Morgen,
danke für die fixe Antwort! Das hört sich nach dem an, was ich hier brauche.

Re: Aufruf FuBa in neuem externen Modus

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Aus der Doku:
•Destination "NONE"" causes the function module to start on the same application server as the calling program, though using the RFC interface and in its own context and in a separate user session. This destination is possible for all execution modes.

Ich glaube, es genügt den Funtionsbaustein mit Detination 'NONE' aufzurufen und nach jedem Aufruf mit dem Funktionsbaustein RFC_CONNECTION_CLOSE die RFC -Verbindung zu schliessen.

call function 'RFC_CONNECTION_CLOSE'
exporting
destination = 'NONE'
* taskname =
exceptions
destination_not_open = 0.

Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
mareikemei92


Re: Aufruf FuBa in neuem externen Modus

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Soweit ich weis, kann man das RFC_CONNECTION_CLOSE bei NONE auch weglassen, weil ja keine "echte" Verbindung aufgebaut wird.
(Ich glaub es wird sogar destination_not_open zurück geliefert).

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
mareikemei92

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Aufruf FuBa in neuem externen Modus

Beitrag von mareikemei92 (ForumUser / 49 / 18 / 0 ) »
Dele hat geschrieben:Aus der Doku:
•Destination "NONE"" causes the function module to start on the same application server as the calling program, though using the RFC interface and in its own context and in a separate user session. This destination is possible for all execution modes.

Ich glaube, es genügt den Funtionsbaustein mit Detination 'NONE' aufzurufen und nach jedem Aufruf mit dem Funktionsbaustein RFC_CONNECTION_CLOSE die RFC -Verbindung zu schliessen.

call function 'RFC_CONNECTION_CLOSE'
exporting
destination = 'NONE'
* taskname =
exceptions
destination_not_open = 0.
Genau das war es! Vielen Dank!
So bekomme ich meine gefüllten Rückgabetabellen :-)
Wieder was gelernt, für die Zukunft.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2431
Views
Aufruf einer Exe Datei auf einem Externen Server
von SAPSILEA » 23.09.2004 13:16 • Verfasst in Basis
0
Antw.
2626
Views
RFC Fähiger FuBa inkl. neuer Modus mit Batch Input?
von Colton » 28.01.2011 15:15 • Verfasst in ABAP® Core
2
Antw.
1482
Views
FuBa-Aufruf per Webservice
von Roddy » 10.09.2012 08:44 • Verfasst in ABAP® Core
0
Antw.
653
Views
Fuba Aufruf CCAP_ECN_MAINTAIN
von charlie01 » 04.03.2020 19:38 • Verfasst in ABAP® für Anfänger
1
Antw.
1918
Views
FuBa -> Aufruf Dynpro
von Nova » 17.01.2005 11:29 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.