Domino 9 und frühere Versionen > ND8: Entwicklung

Agent RunOnServer Verständnisproblem

(1/2) > >>

skywook:
Hallo,
in einer DB starte ich (manuell) einen Agenten der mir eine Datei liest und daraus neue Dokumente in der DB generiert. Leider ist mein Client blockiert bis der Agent durchgelaufen ist. Der Agent darf nur manuell gestartet werden.

Kann ich das Problem über den RunOnServer lösen? Verstehe leider diese Methode nicht.

Für eine Erklärung wäre ich sehr dankbar. In der Forumsuche oder in der Hilfe steht leider nichts genaues.

Tode:
RunOnServer blockiert genauso, weil das Script auf den Rückgabewert des Agenten wartet.

Dir hilft die Eigenschaft "Im Hintergrundthread des Clients ausführen" (englisch: "run in background client thread") weiter... Ein Agent, der so gestartet ist, blockiert den Client nicht.
Du kannst auch hier zusätzlich noch ein RunOnServer und einen zweiten Agenten benutzen, damit der eigentliche AgentenCode lokal am Server läuft und keine Netzwerkaktivitäten das ganze ausbremsen...

EDIT: ACHTUNG !!! Ein Agent, der per "RunOnServer" gestartet wird, kann nicht mehr beendet werden. Der läuft im Server- Thread ausserhalb des AgentenManagers und auch ausserhalb dessen Beschränkungen. Produzierst Du eine Endlosschleife, dann läuft der Agent, bis es zu einem Overflow kommt oder Du alternativ den Server neu startest... Das gilt auch, wenn man den aufrufenden Agenten im Client per Strg + C abbricht..

skywook:
Vielen, vielen Dank !

Noch eine Kleinigkeit, kann ein Teil des Scripts auch in einer ScriptBibliothek ausgelagert sein oder darf sich das ganze nur innerhalb der Agenten abspielen?

Tode:
Klar, ich arbeite NUR mit Script- Bibliotheken

gstueb:
Hallo Tode,

ich möchte ebenfalls einen Agenten am Server laufen lassen, ohne dass mein Client blockiert wird.

Ich habe dazu diesen alten Threat gefunden:


--- Zitat von: Tode am 26.06.13 - 14:43:47 ---RunOnServer blockiert genauso, weil das Script auf den Rückgabewert des Agenten wartet.

Dir hilft die Eigenschaft "Im Hintergrundthread des Clients ausführen" (englisch: "run in background client thread") weiter... Ein Agent, der so gestartet ist, blockiert den Client nicht.
Du kannst auch hier zusätzlich noch ein RunOnServer und einen zweiten Agenten benutzen, damit der eigentliche AgentenCode lokal am Server läuft und keine Netzwerkaktivitäten das ganze ausbremsen...

--- Ende Zitat ---

Wenn ich dich richtig verstehe schlägst du ja einen Agenten vor, für den "Im Hintergrundthread des Clients ausführen" gewählt ist. In diesem Agenten erfolgt dann der eigentliche Aufruf "Agent.RunOnServer".

Ist das dann nicht doch ein wenig unsauber, wenn ich z.B. meinen Notes-Client neu starte während im Hintergrund noch ein Threat läuft, der auf die Rückmeldung des anderen Agenten wartet?

Wenn ich keine Rückmeldung benötige, wäre es doch "sauberer", über session.SendConsoleCommand einen "tell amgr run" am Server abzusetzen?

Grüße,
Gregor

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln