Also mich wundert, dass bisher niemand die offensichtliche Lösung genannt hat: ich löse sowas immer mit üblicherweise 3 Agenten.
Der erste Agent hat nur 2 Zeilen Formelsprache:
@Command([RunAgent] ; "Agent2" );
@Command([RunAgent] ; "LongRunningBackgroundAgent" );
Im Agent2 werden die ganzen Vorbereitungen gemacht (reagieren auf Selektionen, User- Abfragen, z.B. Dateiname festlegen, etc). Die Informationen schreibt der Agent dann in ein "JobDokument".
LongRunningBackgroundAgent hat die Eigenschaft "im Client Hintergrundthread laufen" aktiviert und öffnet das JobDokument und arbeitet die ab. Der User muss nicht auf den Agenten warten, weil der aufrufende Agent 1 sofort terminiert, nachdem er die zweite Zeile Code abgearbeitet hat. Die Laufzeit des Hintergundagenten sieht man dann am Laufband unten Rechts im Client...
Die übergabe des JobDokuments kann man entweder über einen Notes.ini- Eintrag mit dessen UNID machen oder indem man ein Dokument pro User / Aktion erstellt, das dann in einer Ansicht gesucht werden kann...
Natürlich kann man hierbei dann nicht auf das Ende des Agenten reagieren, aber das könnte man mit einem LotusScript- Timer in einer offenen Maske machen, der z.B. prüft, ob die Ausgabedatei fertig ist.
Etwas komplizierter das Ganze, aber funktioniert zuverlässig.
ABER: Wenn das generieren einer Excel- Datei aus Notes- Daten so lange dauert, dass es dem User zu lange geht, dann ist was mit dem Code falsch. Ich habe hier Excel- Export- Code, der 20.000 Dokumente innerhalb weniger Sekunden verarbeitet...