Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Basti* am 02.10.12 - 11:55:02

Titel: Lotus Script blockiert alles
Beitrag von: Basti* am 02.10.12 - 11:55:02
Hallo,

ich habe hier ein paar Scripte, die brauchen etwas Zeit bei der Ausführung. Gestartet werden sie per Button in den Ansichten. Dabei wird der Notes Client komplegtt eingefroren. Arbeiten geht für diese Zeit nicht mehr. Ist die Routine mit allem durch, geht auch Notes wieder.

Kann man die Ausführung der Scripte irgendwie in den Hintergrund schieben? Oder gibt es irgend ein Kommando, dass man in Schleifen aufrufen kann, um die Steuerung des Notes Client zu ermöglichen?

Grüße
Basti
Titel: Re: Lotus Script blockiert alles
Beitrag von: ascabg am 02.10.12 - 11:56:15
Hallo,

Nein.


Andreas
Titel: Re: Lotus Script blockiert alles
Beitrag von: Basti* am 02.10.12 - 12:18:40
Mist!

Danke ;)
Titel: Re: Lotus Script blockiert alles
Beitrag von: Demian am 02.10.12 - 12:28:25
Moin,

je nachdem was die Scripte machen käme vielleicht eine Auslagerung in Agenten mit der Option "Im Hintergrund-Client-Thread ausführen" in Frage?

Gruß
Demian
Titel: Re: Lotus Script blockiert alles
Beitrag von: ascabg am 02.10.12 - 12:58:08
@Demian
Wen ich es aber noch richtig in Erinnerung habe, dann duerfen bei dieser Option des Agenten aber keine Front-End-Klassen referenziert werden.


Andreas
Titel: Re: Lotus Script blockiert alles
Beitrag von: Basti* am 02.10.12 - 14:49:40
Wann spricht man denn von Front-End-Klassen? Sind alle meine eigenen LIBs Front-End-Klassen?

Basti
Titel: Re: Lotus Script blockiert alles
Beitrag von: ascabg am 02.10.12 - 14:51:09
Nein.

FrontEnd-Klassen sidn alle die, die ein UI im Klassennamen tragen.

NotesUIWorkspace
NotesUIDocument

usw.


Andreas
Titel: Re: Lotus Script blockiert alles
Beitrag von: ascabg am 02.10.12 - 14:58:21
@Demian,

Was mir auch noch gerade einfaellt.

Basti* hat auch davon gesprochen, dass die Scripte ueber einen Button in einer Ansicht gestartet werden.
Was machst Du aber dann, wenn es sich bei diesen Scripten NICHT um einen Agenten handelt?


Andreas
Titel: Re: Lotus Script blockiert alles
Beitrag von: Basti* am 02.10.12 - 15:41:12
Nein.

FrontEnd-Klassen sidn alle die, die ein UI im Klassennamen tragen.
AH .. OK! Danke!

D.h. wenn ich in meinen Libs keine UI-Klassen verwende, könnte ich einen Agenten in den Hintergrund schicken? Das klingt doch nach einem Hauch von Hoffnung! :)

Basti
Titel: Re: Lotus Script blockiert alles
Beitrag von: Basti* am 02.10.12 - 15:44:34
@Demian,
[...]
Was machst Du aber dann, wenn es sich bei diesen Scripten NICHT um einen Agenten handelt?

Na, man könnte den Agenten per Formula starten: @Command([RunAgent];"Name d. Agenten"]). Wäre das eine Lösung? Oder greifen dann wieder Spezialdinge?

Basti
Titel: Re: Lotus Script blockiert alles
Beitrag von: ascabg am 02.10.12 - 15:58:27
Ich meinte es aber eher in der Richtung, dass der Code der ausgefuehrt werden soll sich entweder im Button selbst bzw. nur in Routinen aus Bibliotheken zusammensetzt.

Somit hast Du keinen Agenten mehr.
(taucht ja nicht im Designer unter Agenten auf)


Andreas
Titel: Re: Lotus Script blockiert alles
Beitrag von: Tode am 02.10.12 - 16:39:30
Jeder Code, der direkt in einem Button steht kann auch in einen Agenten mit Ziel "Keines" ausgelagert werden. Insofern ist das nicht wirklich ne Einschränkung (auch wenn es ein wenig zusätzlichen Aufwand bedeutet).
Titel: Re: Lotus Script blockiert alles
Beitrag von: Axel am 02.10.12 - 17:03:45

D.h. wenn ich in meinen Libs keine UI-Klassen verwende, könnte ich einen Agenten in den Hintergrund schicken? Das klingt doch nach einem Hauch von Hoffnung! :)


Im Prinzip ja, aber es dürfen auch sonst keine Interaktionen mit dem Benutzer stattfinden, also z.B. Eingaben über eine Inputbox gemacht werden oder Ausgaben über eine Messagebox usw.

Axel
Titel: Re: Lotus Script blockiert alles
Beitrag von: Demian am 05.10.12 - 09:50:28
@Andreas: deswegen habe ich geschrieben "je nachdem was die Scripte machen, käme vielleicht eine Auslagerung....."
Das mit dem Starten über den Button geht dann aber nicht. Dann wird trotzdem blockiert. Nur wenn die Dinger über "Aktionen" gestartet werden laufen se wirklich im Hintergrund. Code aus Script-Libs stellen hierbei aber kein Problem dar?

Beispiel:
Zitat
   Dim i As Integer
   Dim s As New NotesSession
   Dim db As NotesDatabase
   
   Set db = s.CurrentDatabase
   
   Call ReportInitialize(db,"Ini",s.CommonUserName)
   
   
   For i = 1 To 5000
      Call ReportWrite("Zähler: " & i)
   Next

ReportInitialize und ReportWrite sind Funktionen aus ner Script-Lib. Sofern über "Aktionen" gestartet rennt der Agent wie er es soll im Hintergrund und erzeugt die Report-Einträge.
Titel: Re: Lotus Script blockiert alles
Beitrag von: Tode am 05.10.12 - 10:03:35
Also das mit dem "Start über Buitton geht nicht" ist nur halb richtig: Ich kann natürlich in den Button ein "@Command( [RunAgent] ; "MeinAgent" ) reinschreiben, und der Agent läuft dann im Backend- Client- Thread... Und das einbinden von Script- Libs ist überhaupt kein Problem.
Titel: Re: Lotus Script blockiert alles
Beitrag von: Demian am 05.10.12 - 10:30:26
Also ich hatte das den Tag getestet. Starte ich den Agent mit dem Code von oben über nen Button auf folgende Weise:

Sub Click(Source As Button)
   Dim s As New notessession
   Dim db As NotesDatabase
   Dim agent As NotesAgent
   
   Set db = s.CurrentDatabase
   Set agent = db.GetAgent("Test")
   Call agent.RunOnServer
End Sub

blockiert er mir Notes. Habs jetzt aber grad mal mit dem Formelaufruf getestet, da blockiert er nicht. Gut zu wissen  ;D
Titel: Re: Lotus Script blockiert alles
Beitrag von: Tode am 05.10.12 - 10:42:33
Das hätte ich Dir auch sagen können... RunOnServer wartet auf den Rückgabewert des Agenten...