Code: Alles auswählen.
METHOD start_listener.
CALL FUNCTION 'Z_xyz_LISTENER'
STARTING NEW TASK 'LSTNR'
DESTINATION 'NONE'
CALLING receive_from_listener ON END OF TASK.
ENDMETHOD.
METHOD receive_from_listener.
DATA:
table TYPE TABLE OF ztable.
RECEIVE RESULTS FROM FUNCTION 'Z_xyz_LISTENER'
IMPORTING
e_table = table.
Code: Alles auswählen.
Laufzeitfehler RPERF_ILLEGAL_STATEMENT
Datum und Zeit 12.02.2019 09:32:46
Kurztext
Anweisung "CALL FUNCTION .. DESTINATION/STARTING NEW TASK/IN BACKGROUND TASK/IN
Was ist passiert?
Fehler im ABAP-Anwendungsprogramm.
Das laufende ABAP-Programm "Z..." mußte abgebrochen werden, da
es auf
eine Anweisung gestoßen ist, die leider nicht ausgeführt werden kann.
Was können Sie tun?
Notieren Sie bitte, welche Aktionen und Eingaben zu dem Fehler geführt
haben.
Wenden Sie sich bitte zur weiteren Bearbeitung des Problems an Ihren
SAP-Administrator.
Mit der Transaktion ST22 zur ABAP-Dumpanalyse können Sie
Abbruchmeldungen anschauen und verwalten, insbesondere längere Zeit
aufbewahren.
Fehleranalyse
There is probably an error in the program
"Z...".
Vermutlich wurde das Programm in einem Konvertierungs-Exit
oder in einem Feld-Exit aufgerufen. Diese werden durch
Funktionsbausteine mit Namen CONVERSION_EXIT_xxxxx_INPUT/OUTPUT bzw.
USER_EXIT_xxxxx_INPUT realisiert.
Konvertierungs-Exits werden beim Dynpro-Feldtransport oder bei
WRITE-Anweisungen angestoßen, Feld-Exits beim Feldtransport vom
Dynpro in das ABAP-Programm.
In diesem Zusammenhang sind folgende ABAP-Anweisungen nicht zulässig:
- CALL SCREEN
- CALL DIALOG
- CALL TRANSACTION
- SUBMIT
- MESSAGE W... und MESSAGE I...
- COMMIT WORK, ROLLBACK WORK
- COMMUNICATION RECEIVE
- STOP
- REJECT
- EXIT FROM STEP-LOOP
Darüber hinaus sind in Konvertierungs-Exits für die Ausgabekonvertierung
(realisiert durch Funktionsbausteine mit Namen
CONVERSION_EXIT_xxxxx_OUTPUT) keine
- MESSAGE E...
Anweisungen erlaubt.
Code: Alles auswählen.
METHOD start_listener.
do.
CALL FUNCTION 'Z_xyz_LISTENER'
STARTING NEW TASK 'LSTNR'
DESTINATION 'NONE'
CALLING receive_from_listener ON END OF TASK.
add 1 to gd_zähler.
WAIT FOR ASYNCHRONOUS TASKS UNTIL gd_zähler EQ 0.
enddo.
ENDMETHOD.
METHOD receive_from_listener.
DATA:
table TYPE TABLE OF ztable.
RECEIVE RESULTS FROM FUNCTION 'Z_xyz_LISTENER'
IMPORTING
e_table = table.
SUBTRACT 1 FROM gd_zähler.
ENDMETHOD.
Doch, ich denke schon.a-dead-trousers hat geschrieben:Ich glaub dein Problem ist, dass du das Konzept nicht ganz verstanden hast:
Japp, ich weiß. Will ich auch.a-dead-trousers hat geschrieben:Wenn deine RECEIVE Methode aufgerufen wird, gibt es nichts mehr auf sich zu "hören" lohnt, weil die Verarbeitung auf der Gegenseite per se abgeschlossen ist.
Was du mit dem Aufruf von START_LISTENER eigentlich machst, ist eine neue Verarbeitung zu starten.
Das ist in Ordnung, das braucht den Zustand nicht zu behalten.a-dead-trousers hat geschrieben:Beim RECEIVE RESULTS kannst du noch KEEPING TASK angeben, damit bleibt die Session auf der Gegenstelle erhalten.So kannst du, wenn du z.B. globale Datenfelder in deinem RFC-Baustein verwendest hast, auf die Daten in diesen Feldern noch zugreifen. Ohne den Zusatz KEEPING TASK wird die Session komplett abgebaut und wenn du erneut einen Task mit derselben Kennung startest, wird eine neue Session gestartet.
Siehe mein Coding.nickname8 hat geschrieben:Ich will, dass der Listener in einem bestimmten Fall die Receive-Methode aufruft und anschließend wieder weiterhören soll. Also dass das Lauschen wieder anfängt.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
nickname8