Periodischer Agent

  • Notes 6.5


    Hallo zusammen,


    ich habe mir einen Agenten programmiert, der mittels "Auslösen durch Ereignis" problemlos funktioniert.
    Stelle ich nun auf "Auslösen durch Zeitplan", so wird der Agent zwar gestartet, findet alle Dokumente und ändert diese (laut Protokoll), aber er führt seinen programmierten Code nicht aus. Wenn ich im Designer den Agenten starte (Kontextmenü auf der Agentenübersicht), dann funktioniert er ebenfalls problemlos. Wo liegt das Problem?


    Hier mein Code:
    SELECT @All;


    _tag:= @If(tag="Montag";2;tag="Dienstag";3;tag="Mittwoch";4;tag="Donnerstag";5;tag="Freitag";6;"");


    _benachrichtigen :=@Adjust(termin;0;0;0;0;(- benachrichtigen + verschieben);0);


    @If((_tag = @Weekday(@Now)) & ((_benachrichtigen) < @Time(@Now)) & (status = "in Arbeit" );
    @Do(


    ergebnis :=@Prompt([OkCancelEdit];"Erinnerung"; "Termin fällig für: " + art +". Termin verschieben um Minuten:";zeitraum);
    @If(ergebnis="";
    @Do(ergebnis :=0;"";
    FIELD status:= "überfällig";
    FIELD verschieben := ergebnis
    );
    @Do(
    ergebnis := @TextToNumber (ergebnis);
    FIELD verschieben := ergebnis))
    );


    _tag = @Weekday(@Now) & (_benachrichtigen) > @Time(@Now) & status != "OK";
    @Do(FIELD status:= "in Arbeit");
    ""
    )

    • Offizieller Beitrag

    Du verwendest UI-Elemente (@Prompt). Diese funktionieren in Zeitgesteuerten Agenten nicht.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hallo nochmal,


    jetzt gehts um Prinzip:


    Ich möchte einen periodischen Agenten programmieren, der mir alle 5 Minuten die Meldung "msgbox("Guten Tag")" ausgibt. Wo bzw. wie ist dieser Code zu programmieren (denke mal in einer sub()).
    Wie man das Intervall einstellt ist mir bekannt.

  • Ok,


    wie ist dann folgende Funktion zu programmieren:
    Ein Agent soll im Rhythmus von 5 Minuten nachsehen, ob ein bestimmtes Merkmal vorhanden ist und dieses dann z.B auf dem Bildschirm ausgeben.
    Mir geht es nur ums Prinzip.

  • Leider nein,


    das ganze soll am Ende ein Workflow werden, d.h. der Agent sieht nach, ob ein Termin überschirtten ist oder nicht. Der User kann diesen Termin dann aktiv durch eine Minuteneingabe verschieben bzw. vom Agenten wird ein Merkmal gesetzt, dass dieser Termin überfällig ist (wenn keine Verschiebung vorgenommen wurde).


    Ein Agent kann das wohl nicht, wer/was dann?

  • Der Agent kann in der Mailbox des zu informierenden Benutzers einen Alarm erstellen - und der generiert bei dem Benutzer dann ein aufpoppendes Fenster, aber erst dann, wenn es einen Benutzer gibt.


    Du denkst im Moment noch in den falschen Kategorien. Immer wenn in einer Klasse die Buchstaben UI vorkommen, heißt das nichts anderes, als daß es dort jemand mit Augen, Ohren und Fingern - eben ein Userinterface - gibt.

  • d.h. ich kann das vergessen, das ein automatischer Task nachsieht, ob ein bestimmtes Ereignis eintritt oder nicht. Kann ich dann Felder in einem Dokument automatisch ändern lassen?


    Programmiertechnisch hab ich keinerlei Fragen, mir geht's immer nur ums Prinzip.


    Irgendwie kapier ich die Logik nicht. Wenn ich den ganzen Summs auf ein Ereignis lege dann funzt es und sonst nicht. D.h. jetzt übertrieben gesagt, ich brauche einen DAU, der alle 5 Minuten den "komischen" Knopf drückt. Das kanns nicht sein.
    Im Noteskalender poppt ja auch ein Termin auf, den man dann verschieben kann.
    Ich versteh die Welt nicht mehr...

  • Ok,
    das sehe ich jetzt ein.
    Jetzt stellt sich nur noch die Frage, ob eine Funktion dann automatisch einen Wert in einem Dokument ändern kann?



    PS: meine sexy Kollegin (die Frau Luz) hat sich bereit erklärt, denn "komischen" Button zu drücken.
    War ein Scherz!

    • Offizieller Beitrag

    stimmt.


    Im Backend kannst Du den AnsichtsIndex neu aufbauen. Entweder mit NotesView.Refresh oder falls Du den View noch nicht hast reicht es diesen als Objekt zuzuweisen.


    Willst Du eine Ansicht im FrontEnd alle x - Sekunden/Minuten aktualisieren, dann kannst Du einen NotesTimer im PostOpen der Ansicht verwenden.


    Gruß
    Dirk