Erignisgesteuerten Agenten erstellen

  • Hallo zusammen!


    Ich hoffe ihr könnt mir weiterhelfen. Zur Zeit hänge ich an einem Agenten fest, der die Aufgabe haben soll, Emails zu verschicken, sobald Dokumente an einer von mir erstellten Datenbank erstellt wurden.


    Zur Datenbank:


    Diese Datenbank verwalte Informationen der User, die dort Fehler, Infos, etc,etc anhand einer vorgefertigten Maske in der Datenbank anlegen.


    Zum Agenten:

    Der Agent soll nun bei einem neuem Eintrag in die Datenbank Eine Kopie der MAske an den Admin schicken.
    (Ich hab das schon mit "einfachen AKtionen verwirklicht, aber Dokumente sind eben solange neu, bis der Admin die DB öffnet und das entsprechende Dokument gelesen hat. Solange schickt der "einfache" Agent immer wieder dieselbe mail, was unter Umständen sehr sehr Viele Mails werden könnten)


    Zu mir:


    Ich bin sehr neu was das Programmieren mit Lotus Script angeht.
    Ich hab noch massig Bücher vor mir liegen und Lese was das Zeug hält.


    Danke für jegliche Hilfe schon mal im voraus.

  • Hallo,


    du markierst einfach die Dokumente, die du schon verarbeitet hast, indem du ein neues Feld mit einem bestimmten Wert füllst.
    Darauf kannst du auch die Abfrage erstellen, wenn du neue Dokumente suchst.
    Damit schließt du alle Dokumente aus, die du schon verarbeitet hast.

    • Offizieller Beitrag

    Willkommen im Forum.


    Setze in dem Dokument ein Flag (Feld mit bestimmten Wert), welches DU beim Lauf dann auswerten kannst.


    Dafür brauchst Du nicht zwingend Script, dies liese sich auch mit @Funktionen lösen.


    Zum Script - Schau Dir in der Hilfe mal folgende Dinge an (besonders die Beispiele):
    - NotesDatabase.UnprocessedDocuments ... enthällt eine Liste der Dokument-Objekte
    - NotesDocument.HasItem ... prüfen ob ein Feld in einem Dokument existiert
    - NotesDocument.getFirstItem ... erstes Feld mit dem Namen ... als Objekt holen
    - NotesItem.Values ... Feldwert setzen / lesen
    - NotesDocument.Save ... Dokument speichern


    Solltest Du nicht weiterkommen, dann melde Dich noch einmal.


    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

  • hmm nagut


    Zu den @funktionen:
    also lege ich da ein reines neues (leeres?) Feld an, welches vom user nicht gesehen oder bearbeitet werden kann.
    Dieses Feld hat beim Öffnen einer neuen Maske einen von mir festgelegten Wert (Frage wie geb ich dem Feld einen Wert mit?)
    und dieser Wert verändert sich nach dem Speichern oder nach dem Ablauf des Agenten, der die mail gesendet hat?( Wert verändern durch ne einfach aktion? )

  • Zitat

    also lege ich da ein reines neues (leeres?) Feld an, welches vom user nicht gesehen oder bearbeitet werden kann.


    Genau, leg in der Maske über den Designer ein neues Feld an, welches verborgen ist. Mit dem Designer kannst Du dann auch gleich einen Vorgabewert einstellen (ist aber nicht unbedingt nötig, kann auch leer sein).
    Der Agent, der das Mail sendet, verändert eben jenes Feld mit einem von Dir bestimmten wert.
    Diesen Wert prüfst Du beim Start des Agenten ab, wenn vorhanden kann der Agent das Dokument überspringen, ansonsten eben die von Dir gewünschten Funktionen ausführen (Mail senden, Dokument kennzeichnen,...)

    • Offizieller Beitrag

    das Feld muss nicht in der Maske erzeugt werden. Eine Abfrage auf das Feld funktioniert trotzdem.


    Hat der Agent das Dokument bearbeitet, kannst Du das Feld beschreiben.


    Gruß
    Dirk

  • also wie gesagt ich bin Frischling in notes, wenn überhaupt hab ich was mit den einfachen Aktionen und den allereinfachsten Formeln was gemacht ( @Compose oder sowas) Da stellt sone if schleife schon was neues dar. Grundsätzlich glaub ich hab ich den Sinn verstanden. nur syntaktisch haperts. Auch auf die Gefahr hin mich bodenlos zu blamieren schlag ich hier mal eine miniLösung von mir mit @Funktionen vor.


    Code
    @if(FIELD [i]Feldname[/i] :="1";
    @Mailsend("[i]Mailadresse[/i]";Copy;Blindcopy;Subject;)
    @Setfield([i]Feldname[/i];"2")
    @Select all


    (Select @all ? bin mir nicht sicher ob das diese Art von Agent das überhaupt kann)


    So in etwa hätt ich mir das im ALLLEREINFACHSTEN Fall gedacht.
    wobei ich hier keine echten Werte eingesetzt hab. Mir ist klar sogar da noch Fehler drin sind, aber ich denke mal ihr könnt die fix beseitigen. Bin halt noch sehr Theorielastig.
    Könntet ihr da mal rüberschaun ?


    PS.: freut mich wenn ich euch ein wenig Freude mit dem Codebeispiel bereitet hab ;P

    • Offizieller Beitrag
    Code
    @if(Feldname = "1"; 
       @Do(
          @Mailsend("Mailadresse";Copy;Blindcopy;Subject;);
          FIELD Feldname := "2"
       );
       "Hier muss noch der Code für den Else-Zweig rein. Soll da überhaupt etwas gemacht werden?"
    )


    Gruß
    Dirk

  • Wenn du es noch einfacher haben willst, dann kannst du im Select gelich deine Bedingung angegeben.


    Code
    Select Feldname ="";
    @Mailsend("Mailadresse";Copy;Blindcopy;Subject);
    Field Feldname :="1";


    Feldname ="" bedeutet, dass das Feld nicht vorhanden sein muss, oder wenn du es in deiner Maske eingetragen hast leer ist.


    Die zwei folgenden Zeilen werden dann für jedes Dokument ausgeführt, was auf die Select-Formel passt.


    Speichern braucht man die Änderungen am Dokument nicht, dass passiert automatisch.

  • Also Respekt! Wie lange seit ihr schon dabei mit Notes zu arbeiten?


    Danke für die Antworten.


    Hab alle Möglichkeiten getestet und alle liefen, hab mich aber erstmal für die für mich einfacher aussehende Select "Feldname" ohne Do entschieden, da ich wirklich kein Else Aktionen brauche. das einzige was fehlt ist eine Kopie der Maske, die in der Mail mit drin sein soll.
    Immoment hab ich Hart die wichtigsten Felder eingetragen, die mit der Mail versendet werden. ( Ansonsten kommt ne leere mail nur mit Subjekt) Das mit dem [includedoclink]klappt auch nicht so wirklich. Wenn ich das einfüge, wird keine mail mehr versendet. Ich kämpf mich schon durch die Hilfe, wo steht, wenn ich keine Parameter in der Mailsend angebe, schickt der befehl mir das aktuelle Dokument zu, (muss ich davon ausgehen, dass sich dabei nur auf maildokumente bezogen wird?)
    oder gibts ne andere Möglichkeit eine Kopie der Maske des Dokuments, welches in der Datenbank steht mit der mail zu verschicken ?

  • Zitat

    Das mit dem [includedoclink]klappt auch nicht so wirklich. Wenn ich das einfüge, wird keine mail mehr versendet


    Dazu muss in der DB eine Vorgabeansicht definiert sein.
    Geht auch ganz einfach: Im Designer eine Ansicht öffnen (eine, in der das zu verlinkende Dokument auch wirklich angezeigt wird), Eigenschaften der Ansicht, zweiter Reiter, "Vorgabe beim ersten öffnen der Datenbank" anhaken, fertig.
    Danach klappt es auch mit dem versenden des DocLinks.

    • Offizieller Beitrag
    Zitat

    ... (eine, in der das zu verlinkende Dokument auch wirklich angezeigt wird) ...


    bin mir jetzt nicht 100% sicher, ging glaube ich auch, wenn das Dokument nicht in der Vorgabeansicht drin war.


    Gruß
    Dirk

  • Alles klar klappt alles wunderbar. Das mit dem Doclink bekomm ich auch noch hin. Den Grund Quelltext hab ich ja den Rest bau ich mir zusammen. ( hoff ich )



    Aber ein DocLink ist doch nur ein LInk auf das Dokument und keine Kopie der Maske die mit der Mail verschickt wird oder ?

    • Offizieller Beitrag

    funkt da eventuell eine ander DB (Kopie oder Replik) dazwischen?


    Gruß
    Dirk

  • Zitat

    Aber ein DocLink ist doch nur ein LInk auf das Dokument und keine Kopie der Maske die mit der Mail verschickt wird oder ?


    Das ist richtig. Das senden der gespeicherten Maske hat beispielsweise den Nachteil, das sich die Größe der Mail enorm vergrößert.
    Außerdem soll der Admin doch das eigentlich vom User eingestellte Dokument bearbeiten, oder habe ich das falsch verstanden? Wenn dem so ist, ist der DocLink die beste Methode, da der Admin hierüber direkt in das Dokument kommt.

  • japp seh ich jetzt auch so. so wie es ist ist es gut ;P


    hab nur noch eine Frage die hoff ich mla mit ja und nein beantwortet werden kann, wenn ich nun auf dieser DB eine zweite Maske erstellen würde, und vielleicht noch einen Agenten der eine andere Aufgabe hat als dieser hier besprochene, würden die Agenten dann beide Masken abklappern und solange suchen bis die was gefunden haben? oder gibts ne möglichkeit denen die Ansichten / Masken mitzugeben ?


    Eine Maske sollten dann für Fehler, die Andere für Termine oder soetwas sein.


    Oder ist das generell nicht möglich ?
    Besser 2 Datenbanken ?

  • Das ist überhaupt kein Problem. Du kannst bedenkenlos mehrere Masken und Agenten in ein und derselben DB haben.
    Wenn Du den Agenten analog der von beyerste vorgeschlagenen Formel aufgebaut hast

    Zitat

    Select Feldname ="";


    kannst Du die Formel erweitern mit:

    Code
    Select Feldname ="" & Form = "Deine Maske"


    Dann läuft er nur auf Dokumente, die mit dieser Maske erstellt wurden.