Autor Thema: Wann läuft der Agent?  (Gelesen 3085 mal)

botschi

  • Gast
Wann läuft der Agent?
« am: 17.08.06 - 16:43:59 »
Hallo!

Kann man Agenten, die periodisch sind und mehrmals am Tag laufen, abfragen wann sie das nächste mal laufen?

Meine Idee dahinter:
Es soll Usern ermöglicht werden Dokumente zu berechnen, auf die sie normalerweise kein Schreibrecht haben. Deswegen wird ein Antrag gestellt, der von einem Agenten (mit der Server-ID signiert) abgearbeitet wird. Der Agent läuft alle 30 Minuten.

Nachdem der User einen Antrag erstellt hat, würde ich ihm gerne mitteilen "in xx Minuten ist das Dokument berechnet" oder "die nächste Berechnung erfolgt um xx.xx Uhr, wollen die wirklich einen Antrag stellen" oder was auch immer.
Geht das? Man kann im Adminclient ja sehen, wann der nächste Lauf ansteht.

Danke für Hilfe!
Gruss, Matthias

Driri

  • Gast
Re: Wann läuft der Agent?
« Antwort #1 am: 17.08.06 - 17:31:58 »
Ruf doch einfach den Agenten direkt auf. Du kannst dem Agenten per

Call agent.Run(doc.NoteID)

die NoteID des Dokumentes mitgeben, das verarbeitet werden soll und im Agenten selber dieses dann per

Set doc = db.GetDocumentByID(agent.ParameterDocID)

zuweisen.

botschi

  • Gast
Re: Wann läuft der Agent?
« Antwort #2 am: 17.08.06 - 17:49:40 »
Denn muss der User aber warten, bis der Agent fertig ist. Das möchte ich vermeiden.
Wenn der Server den Agenten per Antrag ausführt, dann arbeitet der User weiter und bekommt irgendwann ne Mail "Berechnung fertig"

Driri

  • Gast
Re: Wann läuft der Agent?
« Antwort #3 am: 17.08.06 - 18:20:32 »
Oki, dann könntest Du höchstens mit NotesAgent.LastRun den letzten Lauf auslesen und dann daraus den nächsten Lauf berechnen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wann läuft der Agent?
« Antwort #4 am: 17.08.06 - 18:29:03 »
Man könnte auch ein Konsolenkommando absetzen (ACHTUNG - dafür sind aber entsprechende Berechtigungen erforderlich!) und dessen Replik auswerten.

Abgesehen davon: GENAU kann man es dem User sowieso nicht sagen, da der Agent-Manager seinen Stolz hat und je nach Server-Auslastung selber entscheidet, wann er den nächsten Agent lossemmeln lässt. Und zwischen Agent.LastRun + 30 Minuten und dem tatsächlichen nächsten Agentstart können durchaus einige Minuten Differenz liegen.

Alternative: Du triggerst den Agenten so, dass er auf neue / modifizierte Dokumente reagiert. Dann kannst Du dem User mit Fug und Recht sagen: "Ihre Anfrage wird schnellstmöglich beantwortet" (nämlich dann, wenn dem Agent-Manager danach ist  ;D)

HTH,
Bernhard

Glombi

  • Gast
Re: Wann läuft der Agent?
« Antwort #5 am: 17.08.06 - 19:31:08 »
Für so was macht man eigentlich keine periodischen Agenten sondern ein

msgbox "Ihr Antrag wird nun bearbeitet!",0+64,"Hinweis"
Call agent.RunOnServer(doc.NoteID)

die NoteID des Dokumentes mitgeben, das verarbeitet werden soll und im Agenten selber dieses dann per

Set doc = db.GetDocumentByID(agent.ParameterDocID)


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wann läuft der Agent?
« Antwort #6 am: 17.08.06 - 20:24:43 »
Kommt darauf an, Andreas. Matthias möchte ja (minimale oder auch mal längere) Responsezeiten vom Server vermeiden. Wenn man derartige Aktionen auch offline durchführen bzw. anbieten möchte, fällt RunOnServer ebenfalls aus.
Matthias muss nun entscheiden, welche Möglichkeit für ihn die optimale ist.

Vielleicht haben wir noch eine Variante vergessen: Die Einlieferung eines Requests per eMail. Auch das KANN vorteilhaft sein (und wird auch relativ (!) schnell beantwortet) und erfordert ggf. nicht die Überwachung der Datenbank selber (oder "eMail bekommen und dann dem Link folgen" oder wie auch immer).
Viele Wege führen nach Rom.

Bernhard

botschi

  • Gast
Re: Wann läuft der Agent?
« Antwort #7 am: 18.08.06 - 09:27:39 »
Danke für die Hilfe erstmal!

Ich versuche es erstmal mit einem RunOnServer, ohne periodischem Agenten. An sich ist das ja auch nicht schlecht. Ich befürchte nur, dass der Agent den Arbeitsplatz zu lange sperrt- wobei "lange" natürlich relativ ist und auch ansichtssache.
Wenn das Ergebnis passabel ist, dann lasse ich es auch so.

Wir haben in der DB eh einen Agenten, der alle 30 Minuten andere Anträge verarbeitet und ich dachte es sei schlau, diesen gleich zu nutzen.
Die Nachricht für die Anwender, wann der Agent läuft, sollte auch nur ein goodie sein. Auf die Minute muss das nicht stimmen.

Sehr attraktiv finde ich auch die Lösung mit der Mail. Ist es so gemeint:
Mails werden in DB_A erzeugt und gehen an ein Postfach (DB_B), Agent rennt los bei Eingang neuer Mail und macht was in DB_A.
So hätte man gleich eine Art Protokollierung über die Anträge in der MailIn-DB...

Glombi

  • Gast
Re: Wann läuft der Agent?
« Antwort #8 am: 18.08.06 - 09:38:17 »
Falls die Db lokal ist, gilt für RunOnServer:
On a local database, the RunOnServer method works like the Run method, that is, runs the agent on the local computer.

Was ich nun nicht genau weiß: Ist der Client wirklich die ganze Zeit gesperrt, während der Agent auf dem Server läuft? Eigentlich habe ich da andere Erfahrungen, aber da der Agent ja auch den status zurückliefert, müsste der Client warten.

Der Vorteil für RunOnServer ist, dass der Agent mit den Rechten des Agentunterzeichners ausgeführt wird.

Wenn Du bereits einen periodischen Agenten hast, der alle 30 Min läuft, kannst Du diesen auch mittels RunOnServer aufrufen.

Andreas

botschi

  • Gast
Re: Wann läuft der Agent?
« Antwort #9 am: 18.08.06 - 09:43:27 »
Stimmt ja, den kann ich ja auch aufrufen....
MUSS ich dem Agenten denn ein Dok übergeben? Ich glaube nicht. Denn werde ich das wohl mal als erstes probieren, wäre der geringste Aufwand für mich jetzt 8)

Man MUSS ja nicht immer den komplizierten Weg gehen...

Glombi

  • Gast
Re: Wann läuft der Agent?
« Antwort #10 am: 18.08.06 - 09:51:47 »
Zitat
MUSS ich dem Agenten denn ein Dok übergeben?
Nein, geht wohl auch nicht, es sei denn das ist im Agenten bereits drin, was ich nicht glaube. Ich gehe mal davon aus, dass sich der Agent dann auch das gewünscht Dokument herauspickt.

Andreas

botschi

  • Gast
Re: Wann läuft der Agent?
« Antwort #11 am: 18.08.06 - 10:32:27 »
Genau so ist es. Der Agent guckt in eine View und nimmt sich die Anträge nacheinander vor.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz