CALL FUNCTION 'MACHS_IM_HINTERGRUND'
STARTING NEW TASK lv_task DESTINATION 'NONE'
PERFORMING bin_fertig ON END OF TASK
EXPORTING
(...).
Wenn im Funktionsbaustein und in der Form-Routine bin_fertig WRITE-Ausgaben stehen (als Testausgabe zu Debuggingzwecken), wo landen die? Landen die überhaupt irgendwo?
Ich habe alle mir bekannten Logs und Spools durchsucht, ohne Erfolg.
Wenn testausgaben tatsächlich spurlos verschwinden, welche Möglichkeiten gibt es dann noch, so etwas vernünftig zu debuggen (außer Trace-informationen in die Datenbank schreiben zu müssen)?
Das Write innerhalb des Funktionsbausteins landet im Listprozessor des neuen Modus. Damit der angezeigt wird, muss zuerst natürlich eine Ausgabe auf einem Dynpro erfolgen.
Beim nach der Rückkehr des Funktionsbausteins aufgerufenen "bin_fertig" bin ich mir nicht so ganz sicher. Vor Allem weil der Aufruf da ja asyncron erfolgt. Ich hatte da schon schlechte Erfahrungen mit Controls. Die lassen sich nämlich damit nicht ansprechen (Kurzdump). Man kann aber Variablen des ursprünglichen Aufrufers problemlos verändern. Wie sich der Listprozessor in dem Fall verhält hab ich leider bislang noch nicht ausprobiert. Aber im Zweifelsfall würde ich sagen, dass die Ausgabe auch dort landen wird. Auch hier gilt, dass der Listprozessor NACH der Rükkehr des Funktionsbausteins erst aufgerufen werden muss.
(LEAVE TO LIST-PROCESSING)
Wie sich das ganze im Hintergrundprozess (SUBMIT mit Job) verhält kann ich jetzt nicht sagen, aber ich schätze mal, dass die Ausgabe vom Funktionsbaustein fehlen wird. Die vom Aufrufer/Rückkehrpunkt aber sehrwohl im Ausdruck (Spool) aufscheinen sollte.
lg ADT
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.
Wenn Du das etwas größer aufziehen möchtest und die Ausgaben evtl. als ein Protokoll doch brauchst, kannst Du
- zum einen eine Logging-Klasse bauen mit einer simplen Methode, die Du statt des Write aufrufst. Damit hast Du aber noch nicht "new task" umschifft
- generell Daten ins Applikationslog schreiben und sie Dir dort per SLG1 anschauen. (Setzt entsprechende (Sub)Objekte in der SLG0 voraus, kann man sich ja anlegen. FuBas APPL_LOG* bzw. BAL_LOG*)