Agent soll bei neuer Mail starten und @Formeln ausführen

  • Moin!


    Habe schon wieder ein Problem:


    Ich möchte einen Agenten basteln, der in der Mail-DB nach neu eingegangenen Mails prüfen soll, ob diese Mail bestimmte Textmuster enthält (das ist ja soweit kein Problem) und dann mehrere @-Formeln durchführt, um eine SMS über diese neue Mail an eine bestimmte Nummer zu senden. Die @-Formeln sehen so aus:


    Code
    @Set("text";Subject);
    @Command([ToolsRunMacro];"(MessageFormatRichtext)");
    @MailSend("0049xxxxxxxx@mail.any-sms.de";"";"";"xxxxxxxx (hier kommt noch ein Titel rein)";text+"@@@";"");
    @Command([ToolsRunMacro];"(MessageFormatMIME)");


    Das Doofe ist aber, dass der Agent nicht läuft, weil eben @Formeln bei solchen Agenten nicht erlaubt sind, nur bei Agenten, die als Laufzeitziel "Kein" angegeben haben. Hier der Ausschnitt aus dem Protokoll des Agenten:



    Wie kriege ich also nun einen Agenten, der irgendwie doch bei neu eingegangener Mail mit den entsprechenden Textpassagen diese Formeln ausführt? Vielleicht per Script? Wie bastele ich diese Formeln in ein Script (bin da nicht ganz so firm) oder gibt es eine andere Lösungsmöglichkeit?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Das Problem sind nicht @Formeln sondern (wie die Fehlermeldung auch besagt) die @Commands.


    Ein @Command ist in der Formelsprache die Entsprechung für einen Menüpunkt des Client-Menüs. Da Hintergrundagenten auf dem Server ja bekanntermaßen keine Menüpunkte eines Clients anklicken können wird folgerichtig der Agent nicht ausgeführt.


    Die @Commands rufen wieder andere Agenten auf. Ich weiß nicht, welcher Code hinter den anderen Agten steht, aber sofern es auch Formelsprache (ohne @Commands) ist läßt sicher der dortige Code in den ersten Agenten übernehmen statt über @Commands weitere Agenten aufzurufen.


    Wenn es nur um eine simple zu erzeugende Mail geht ist es übrigens unnötig, zwischen MIME und Richtext umzuschalten. Der Dominoserver handhabt das bei Bedarf transparent alleine.

  • Zitat

    Das Problem sind nicht @Formeln sondern (wie die Fehlermeldung auch besagt) die @Commands.


    Ja, schon klar.


    Zitat

    Die @Commands rufen wieder andere Agenten auf. Ich weiß nicht, welcher Code hinter den anderen Agten steht, aber sofern es auch Formelsprache (ohne @Commands) ist läßt sicher der dortige Code in den ersten Agenten übernehmen statt über @Commands weitere Agenten aufzurufen.


    In den anderen Agenten wird per LotusScript das Messageformat umgestellt. Dies ist zwingend notwendig, da ansonsten die Mail nicht sauber in eine SMS umgewandelt wird, sondern nur Müll auf'm Handy ankommt. Da es sich um LotusScript handelt, kann ich den Code leider nicht in den ersten Agenten übernehmen.. :(


    Mir würde auch sehr weiterhelfen, wenn mir jemand den LotusScript-Code nennen könnte, mit dem ich den @MailSend-Befehl abbilden kann. Dann könnte ich ja alles per Lotus Script erledigen lassen. Es müsste also ein Lotus-Script-Code sein, der den Subject der betreffenden Mail als Body in eine neue Mail schreibt, die entsprechenden Eintragungen bei Empfänger und Titel reinschreibt und absendet. Hier gibt's doch bestimmt 'nen LotusScript-Crack, der sowas aus'm Ärmel schüttelt, oder? *hoff*

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Wenn du mal nen Blick in die Designerhilfe geworfen hättest, hätte dir die auch verraten wie du Mails in Lotus Script erstellen kannst.


    Und wie man den Wert des einen Feldes einem anderen zuweist weisst du ja wohl

  • Danke für die tolle Hilfe.


    Also habe ich mal rumgebastelt (wie gesagt, mit LotusScript ist's nicht so dolle bei mir...).


    In der Designerhilfe steht ein Script für einen Button, welches Teile des gewählten Dokuments in ein neues kopiert und dieses versendet. Das habe ich mal in einen Agenten gebastelt, etwa so:



    Wenn ich den Agenten mal per Debugger anschmeisse, stoppt er immer bei "Set doc = uidoc.Document" mit der Meldung "Object Variable not set".


    Was is'n daran nun falsch? Ich habe in meiner Inbox ein Dokument ausgewählt und den Agenten gestartet.



    kann mir da jemand helfen?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    was sagt der Debugger zu dem Objekt uidoc?


    Wie startest Du den Agent in einem Dokument oder aus einer Ansicht?


    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

  • Ich starte den Agent testweise aus einer Ansicht, in der das betroffene Dokument ausgewählt ist (später soll der Agent durch einen andere Agenten gestartet werden.


    Der Debugger geht ohne zu meckern über den Befehl Set uidoc = workspace.CurrentDocument , in der Variable UIDOC steht aber nix drin. der Abbruch kommt dann direkt beim nächsten Befehl Set doc = uidoc.Document

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Da musst du dann über die Eigenschaft UnprocessedDocuments der NotesDatabase gehen. Und dort dir dann per GetFirstDocument das erste Dokument holen.


    Willst du für mehrere die Mails versenden musst du dann noch per Schleife über die UnprocessedDocuments mit GetNFirstDocument/GetNextDocument drübergehen.


    Die UI-Klassen und Definitionen kannst du dort komplett raushauen

    • Offizieller Beitrag

    wenn Du den Agenten aus einer Ansicht startest, dann ist uidoc Nothing, weil mit Du workspace.CurrentDocument ein Objekt des aktuell geöffnete Dokumentes bekommst.


    Du musst dann das Dokument übers Backend besorgen.


    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

  • Da ich jetzt langsam gar nicht mehr klarkomme, poste ich hier mal den ganzen kram, den ich mir bis jetzt zusammengefrickelt habe (mit meinem LotusScript-Viertelwissen ;) ).


    Also, der Agent soll laufen, wenn neue Mail kommt und diese ein bestimmtes textmuster enthält. Das ist kein Problem.


    Dann soll der Agent das Messageformat auf Richtext umstellen, eine Mail generieren mit einem bestimmten Empfänger, einem bestimmten Subject und dem Body der neuen Mail, die das entsprechende Textmuster enthält.


    Danach soll das Messageformat wieder auf MIME umgestellt werden.


    Das hin- und herschalten des Messageformats ist zwingend notwendig.


    hier der Code meines Agenten:




    Wahrscheinlich werden die Scriptprofis die Hände über dem Kopf zusammenschlagen, aber vielleicht erbarmt sich einer, der den Code mal auf die Reihe bringt.


    Ich habe den Agenten mal aktiviert. Er schreibt ins Log:


    'error message: Error creating product object'

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Passt ja fast schon.


    Nur muss die folgende Zeile raus:


    Code
    Dim workspace As New NotesUIWorkspace


    UI Objekte sind in periodischen oder servergetriggerten Agenten nicht erlaubt. Genausowenig wie vorher die @Commands

  • Habe die Zeile rausgeschmissen, nun erhalte ich nach Agentenlauf im Log die Meldung:


    error message: Variant does not contain an object



    Wat nu?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Verwende doch mal den Debugger.


    Dann hättest du gesehen daß der Fehler bei der folgenden Zeile zustande kommt:


    Code
    Set uidoc = workspace.CurrentDocument


    Und wie ich vorher sagte solltest du alle Verweise auf UI Objekte raushauen, also auch diesen

  • geht immer noch nicht... aber:



    Ich brech' das jetzt ab und schmeiss den Agenten in die Tonne, damit ich mich mal wieder mit was Produktivem beschäftigen kann... :(



    Trotzdem natürlich Danke für die Hilfestellungen!!

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Ergänzend, wenn auch schon als erledigt gekennzeichnet, noch folgender Hinweis:


    Selbst wenn die UI-Funktionen raus gewesen wären hätte hier noch ein prinzipielles (Denk-)Problem bestanden:


    Während deiner Tests läuft der Agent lokal auf deinem Client. Dort kannst du natürlich das Nachrichtenformat deiner Arbeitsumgebungen zwischen MIME und Notes-RTF hin- und herstellen so oft du möchtest.


    Wenn der Agent dann produktiv laufen soll und auf das Ereignis Neue Mail reagieren soll dann würde der Agent nicht mehr so wie von dir gedacht laufen, da ein Server in seinem Adreßbuch keine Arbeitsumgebungen verwendet und damit eine Umschaltung zwischen MIME und RichText nicht erfolgen würde. Ist genaugenommen sogar auch besser so, schließlich würde das ja für den gesamten Mailverkehr des Servers für alle Benutzer (!) gelten, der dann ja ständig zwischen 2 Formaten im laufenden Betrieb wechseln würde.


    Der Grund, warum du diese Umschaltung überhaupt glaubst zu brauchen, liegt m.E. eh nur an der Art, wie deine Benachrichtigungsmails während deiner Tests erzeugt werden => am Client.
    Die fehlerhafte Umsetzung, die du beschrieben hattest, würde gar nicht erst entstehen, wenn die Mails per Agent am Server erzeugt werden.