Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: RKuehle am 20.05.06 - 16:40:59

Titel: Warten auf das Ende
Beitrag von: RKuehle am 20.05.06 - 16:40:59
Hallo Forum !

Habe folgendes , eher allgemeingültiges, Problem:

Schreibe zur Zeit eine kleine HelpDesk-Anwendung. So nach dem Thema : Nutzer macht ein Ticket auf, Bearbeiter sehen neues Ticket , nehmen in Bearbeitung etc. Die DB liegt auf nem Server.
Als Hilfe für den Bearbeiter soll bei jedem Ticket eine Konfigurationsreport des Nutzer-PC erfolgen. Der Report wird per Shellaufruf von msinfo32 im Querysave-Event der Ticketmaske erstellt. Problem dabei: Das Programm läuft natürlich eine Weile (bis zu einer Minute) . Folge ist, dass ich irgendwie abfragen muss ob die Reportdatei schon existiert und fertig geschrieben ist. Im Moment sieht das bei mir so aus:

Do While isfile(fname) = False
If isFile(fname) Then
id=fname
End If
Loop
sleep 5

Function isFile(Byval sFileName As String) As Integer
On Error Resume Next
Dim lFileLength As Long
Const ATTR_NORMAL = 0

isFile = False
If Dir$(sFileName, ATTR_NORMAL) <> "" Then
lFileLength = Filelen(sFileName)
If (lFileLength > 0) Then isFile = True
End If
End Function

Das Do while macht den LoNo-Client für den Anwender dicht . Das akt. Dokument wird erst nach Erstellung der Datei gespeichert. Wie man sieht basiert das alles auch nicht wirklich auf sauber zu deklarierenden Eigenschaften der Datei , da nur geprüft wird ob sie existiert und die Dateilänge > 0 ist. Dann wird noch 5 Sekunden gewartet.

Meine Fragen dazu:

Wie sieht ein sinnvoll(erer) Ansatz aus um den Shellaufruf (also die Erstellung der Datei bzw. das Warten auf die fertige Datei) in den "Hintergrund" zu bringen, so dass der Client nicht blockiert wird? Gibt es eine sinnvollere Methode festzustellen, ob die Datei wirklich komplett geschrieben ist ? Evtl. Abfrage ob im Windows die msinfo32-Task noch läuft ?

Jeder Hinweis, Anregung, Mecker sind willkommen.

Danke !

Gruß RKuehle
Titel: Re: Warten auf das Ende
Beitrag von: koehlerbv am 20.05.06 - 16:48:00
Und schon wieder eines der beliebten Doppelpostings. Wo soll man das (nicht uninteressante) Problem denn nun verfolgen: Hier oder im Dominoforum (http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=12494&forum=46&post_id=68116#forumpost68116)?

Schade.

Bernhard
Titel: Re: Warten auf das Ende
Beitrag von: RKuehle am 20.05.06 - 16:58:17
@koehlerbv

Sorry !

Wusste nicht, dass beide Foren zusamenlaufen !

Wenn's stört, dann einfach das Teil abschießen.

Gruß

RKuehle
Titel: Re: Warten auf das Ende
Beitrag von: Thomas Schulte am 20.05.06 - 17:09:31
Bernhard meint du solltest dich für eine Forum entscheiden.

Man könnte sich das auch aus !!Help!! klauen. In der Helpdeskanfrage gibt es eine Funktion die genau das macht und ich bin mir ziemlich sicher das die keine Minute braucht.
Titel: Re: Warten auf das Ende
Beitrag von: diali am 21.05.06 - 10:02:08
nicht unbedingt für ein Forum entscheiden, aber wenigstens die Anfragen verlinken - ist nur fair denen gegenüber, die Dir versuchen zu helfen.
Titel: Re: Warten auf das Ende
Beitrag von: smoki am 21.05.06 - 10:55:31
Das mit dem Zusammenlinken hat auch etwas damit zu tun, dass andere Leute die Lösung finden... oder soll ich die dann doppelt Posten?!

Also wenn ich das richtig verstehe, willst du bis auf das ende eines Shell Aufrufs warten?

Dafür gibts die API-Funktion "WaitForSingleObject":

Beschreibung (die hoffentlich auch unter Lotus Script funktioniert) findest du hier: http://www.thescarms.com/vbasic/wait.asp



Titel: Re: Warten auf das Ende
Beitrag von: eknori am 21.05.06 - 11:19:06
Zitat
Dafür gibts die API-Funktion "WaitForSingleObject":

die aber den entscheidenden Nachteil hat, daß der Rechner u.U. komplett bis zur Beendigung des Programms blockiert ist.

Zudem ist msInfo32 auch von einem Dienst abhängig, die nich zwingend zum Betrieb von Windows erforderlich ist.
Ich habe auch mit der msInfo geliebäugelt, diese Lösung zur Abfrage der Systemkonfiguration aber wieder verworfen.
Titel: Re: Warten auf das Ende
Beitrag von: smoki am 21.05.06 - 11:38:17
Ja... ich hab dieses Problem verschwiegen, sorry. ;)

Das Problem ist in der Tat, dass solch ein Agent auf dem Server den Agenten-Manager blockieren können oder der Client für ewig hängt. Ggf. sollte man statt INFINIT einen anderen Wert nutzten und nach dem WaitForSingleObject nochmals prüfen, ob alles glatt gelaufen ist.

Hab mir gerade erst "msinfo32" kurz angelesen. Ggf. kann man die benötigte Information auch besser mittels jeweiliger API-Declaration ermitteln?! Da in diesem Fall aber wohl der ganze Report erzeugt werden soll?! Doch ein etwas aufwendigers Thema...

Wenn du eine bessere Lösung dafür im !!HELP!! schon hast, sollte ich mir die aus neugier vielleicht auch mal Ansehen oder mir das zumindest merken, falls ich das mal irgendwann benötigen sollten :)

Gruss
Chris
Titel: Re: Warten auf das Ende
Beitrag von: eknori am 21.05.06 - 11:53:21
Zitat
Wenn du eine bessere Lösung dafür im !!HELP!! schon hast, sollt

Nennen wir es eine Lösung, die zuverlässig bestimmte Informationen liefert. Aufgabe einer solchen Routine kann es nicht sein, den kompletten PC auszulesen.

Da kann in einem zweiten Step erfolgen. Zumeist gibt es im Unternehmen schon Lösungen dazu, die man anzapfen kann.

Ich habe die Routine damals in Help eingebaut, da sie mir in dem Moment wichtige Informationen liefern sollte. Es ging um die Einführung von SAP und da musste ermittelt werden welche Rechner noch mit schwachen CPU, zu wenig Speicher und einer Grafik ausgestattet waren, die allenfalls für KlötzchenDarstellung geeignet gewesen wäre.

Über API und WMI läßt sich die Grundfunktionaltität natürlich beliebig erweitern.