Wie kann ich für lang laufende Prozesse einen Timeout abfangen?
Frage
In einer BSP-Applikation kann es aufgrund von großen Datensammlungen im OnInitialization-Eventhandler auf der folgenden Seite zu einem Timeout kommen. Dieser Timeout soll abgefangen werden und eine passende Fehlermeldung soll ausgegeben werden, ohne dass der Session-Kontext verloren geht.
Antwort
Das Problem der lang laufenden Prozesse können Sie durch das Starten der langen Prozesse in einem zweiten Thread lösen, so dass der Frontend-Thread schnell die nächste HTML-Seite im Browser ausgeben kann. In ABAP entspricht dies dem Aufruf
call function … in background task.Auf dieser Folgeseite können Sie den HTML-Refresh-Mechanismus einsetzen, d.h. diese Seite wird automatisch z.B. nach 20 Sekunden aktualisiert. Zusätzlich wird eine Fortschrittsanzeige eingeblendet und eine freundliche Meldung, die besagt, dass das System noch beschäftigt ist.
Die Synchronisation des Frontend-Task mit dem Prozess-Task geschieht durch die Datenbank.