Domino 9 und frühere Versionen > ND8: Entwicklung

Zeitplan von Agenten per Aktion setzen

<< < (3/4) > >>

koehlerbv:
Hallo Peter,

ich verstehe Deine "Angst" vor der API (wer hatte die nicht beim ersten Mal?). Aber wenn man sich allgemein mit Programmierung auskennt und mal den Anfang gemacht hat und systematisch an die Sache heran geht, wundert sich dann bald, warum man vorher so einen Bammel hatte ...

Die für das Anpassen von $AssistInfo brauchst Du genau eine Lib der Notes-API. Und die Deklarationen kann man mit einer einzigen Abfrage OS-genau machen: nnotes.dll oder (aus dem Bauch) libnotes oder NotesLib. Also eine SELECT CASE-Abfrage (die jederzeit ergänzt werden kann).

Wenn ich mich jetzt recht erinnere, gibt es derzeit Clients für Windows, Linux und MacOS. Exotischer isses nich.

Weiterer Vorteil: Du kannst Deinen Kunden dann auch die Wahl überlassen, wann genau sie den Agent starten wollen. Allein für den Tag ergeben sich ja schon 1.440 Möglichkeiten. Wenn die aber nur am Wochenende wollen? Oder am Wochenende gerade nicht? And so on ...

Ich denke, passende Hilfestellung können wir (wenn auch stark ausgedünnt, was die "Mannschaftsstärke" angeht) hier bei AtNotes leisten  :)

Bernhard

eknori:
@Bernhard: Vorsicht, diese Funktionen sind reine WINDOOF Funktionen. Das muss man dann schon ein wenig umstricken.


--- Code: ---Declare Private Sub Peek Lib "MSVCRT" Alias "memcpy" _
(  D As Any, Byval P As Long, Byval N As Long)

Declare Private Sub Poke Lib "MSVCRT" Alias "memcpy" _
(  Byval D As Long, D As Any, Byval N As Long)

Declare Private Sub PokeString Lib "MSVCRT" Alias "memcpy" _
(  Byval D As Long, Byval S As String, Byval N As Long)
--- Ende Code ---

Peter Klett:
Danke Euch allen!

Habe es nun doch mit der API gemacht (auch wenn ich es hasse, Code nur zu kopieren). Um das Windows-Client-Problem zu umgehen, habe ich etwas umorganisiert. Geplant hatte ich, während des Aktivierens der Agenten (es werden dabei mehrere Agenten unterzeichnet, deshalb eine eigene Schaltfläche) die Uhrzeit mit abzufragen und zu setzen. Bei Nicht-Windows-Clients oder anderen Fehlern, die ich mangels Erfahrung mit der API nicht absehen kann, würde der Aktivierungsprozess nicht funktionieren.

Also habe ich nun eine separate Aktion gebaut, die die Uhrzeit abfragt, aus einer Liste zwischen 1:00 und 4:55 eine neue Startzeit auswählen lässt und die neue Zeit in den Agenten schreibt. Funktioniert einwandfrei. Vorteil ist nun, dass ich sogar vorgeben kann, welche Startzeit verwendet werden darf (ein Agentenlauf z.B. um 12:00 Uhr wäre in dem System unsinnig).

Funktioniert die Zeitauswahl nicht (Client- oder API-Problem o.ä.), stört das nicht so sehr, da das Aktivieren davon nicht betroffen ist. Dann bleibt es halt bei 1:00 Uhr. Ist zwar ein Klick mehr (ich bin da schon pingelig), aber sicherer.

Sinngemäß läuft es so:

GetAssistInfo db, "MeinAgent", info
info.Time1 = Cdat (neuerWert)
SetAssistInfo db, "MeinAgent", info
Msgbox "Bitte aktivieren Sie die Agenten erneut ...

Das Ermitteln des neuerWert hier zu posten wäre sinnfrei, da dort eigene Routinen verwendet werden, die niemand sonst hat.

Also vielen Dank noch einmal.

Peter Klett:
Bin doch noch nicht fertig.

Mit der beschriebenen Aktion kann ich die Uhrzeit setzen. Beim nächsten Aufruf der Aktion wird mir auch die zuletzt eingetragene Uhrzeit angezeigt, ebenso im Zeitplan des geöffneten Agenten.

Jetzt aktiviere oder deaktiviere ich mit der nächsten Aktion den Agenten. Bei

agent.IsEnabled = True (oder False)

Kommt unter Notes 7.03 und 8.51 die Fehlermeldung:

Dokument wurde seit der Signierung geändert oder beschädigt! (Daten)

5.10 hat damit keine Probleme, das hilft mir aber nicht weiter. Öffne ich den Agenten und speichere ihn, ist der Fehler behoben. Damit bin ich genau so weit, wie vorher, dass der Agent geöffnet und gespeichert werden muss (und damit ab 8 bei geschlossenem Design zerstört wird).

Peter Klett:
So, nun läufts doch. Habe das Setzen der Zeit wie folgt geändert:

GetAssistInfo db, "MeinAgent", info
info.Time1 = Cdat (neuerWert)
SetAssistInfo db, "MeinAgent", info
Call db.Sign
Msgbox "Die Startzeit wurde festgelegt und die Datenbank signiert ...

Jetzt wird die Datenbank danach noch signiert.
Ist so sogar noch besser, da dann ein aktivierter Agent nicht nochmal aktiviert werden muss.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln