Mails aus Inbox verschieben Lotus Script

  • Hallo zusammen,


    ich habe mir einen Agent geschrieben der alle Dokumente in der View $Inbox durchlaufen soll und nach abarbeiten des Dokumentes, diese in einen Ordner verschieben soll.


    Das durchlaufen der View bzw. der Dokumente funktioniert.


    Jetzt wollte ich in die Schleife vor dem Befehl "Getnextdocument"
    das gerade bearbeitete Dokument in den Order verschieben und danach das Dokument aus dem Order $Inbox entfernen.


    Und hier geschieht was ich nicht verstehe. Der Agent verarbeitet plötzlich nurnoch jedes zweite Dokument.


    Bei 5 Mails in der Inbox wird nur das erste, dritte und fünfte Dokument verabeitet und verschoben.


    Es scheint so als ob durch das verschiebn der Mail der Pointer auf das nächste Dokument gesetzt wird.


    Hier mal der Codeauszug.


    While Not doc Is Nothing
    'Mail wird ausgewertet
    ...
    'verschieben in Order Ablage und aus Inbox entfernen
    Call doc.PutInFolder( "Ablage" )
    Call doc.RemoveFromFolder("$Inbox")
    'nächstes Dokument holen
    Set doc=view.GetNextDocument(doc)
    Wend


    Jemand ne Idee?


    Vielen Dank im Voraus.


    Gruß


    Marco

  • Ist doch klar. Das erste Dokument wird verschoben, damit ist das zweite das erste und das nächste vom zweiten ist nun halt mal das dritte. Daraus ergibt sich dann auch, wie es richtig geht.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    Weil es sich hierbei nicht um eine Ansicht handelt, sondern um einen Ordner.


    Dieser aktualisiert sich automatisch.


    Bei Deinem Code


    set doc ...
    doc.PutInFolder(...)
    doc.RemoveFromFolder(...)


    und hier aktualisiert sich die Inbox


    somit funktioniert Dein


    GetNextDocument(...)


    nicht mehr so wie Du es erwartest.


    Baue nach dem Set doc... noch folgende Zeile ein
    Set nextdoc = doc.GetNextDocument(doc)


    Andreas

  • Hallo,


    also jetzt steh ich auf dem Schlauch.


    Mein set doc muß ich doch nach dem verschieben ausführen, damit doc noch auf das im Moment in bearbeitung befindliche Dokument schaut.


    Ich hab einfach mal anstatt GetNextDocument wieder auf das erste Dokument verwiesen.


    While Not doc Is Nothing
    'Mail wird ausgewertet
    ...
    'verschieben in Order Ablage und aus Inbox entfernen
    Call doc.PutInFolder( "Ablage" )
    Call doc.RemoveFromFolder("$Inbox")
    'nächstes Dokument holen
    Set doc=view.GetFirstDocument
    Wend


    Damit funktioniert es.


    Ist die Frage ob es eine elegantere Lösung gibt.


    Gruß


    Marco

    • Offizieller Beitrag

    Deine Lösung funktioniert so lange, biss Du eine Unterscheidung einbaust und Dokumente in der Inbox lässt.
    Mach es doch so wie es Andreas beschrieben hat.


    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,


    so funktioniert es auch nicht.


    Ich muß doch vor der Schleife einmal doc auf view.getdocument setzen oder?


    Das hier wird vor der Schleife ausgeführt.


    Set db = session.CurrentDatabase
    Set view=db.GetView("$Inbox")
    Set doc=view.GetFirstDocument


    While Not doc Is Nothing
    Set nextdoc=view.GetNextDocument(doc)
    'verschieben in Order Ablage und aus Inbox entfernen
    Call doc.PutInFolder( "Ablage" )
    Call doc.RemoveFromFolder("($Inbox)")
    set doc=nextdoc
    Wend


    Jetzt wird das erste, zweite und vierte Dokument verschoben.
    Muß doc oder next doch auf nothing gesetzt werden?


    Gruß


    Marco

    • Offizieller Beitrag

    machst Du doch mit
    set doc = view.GetFirstDocument


    Schalte mal den Debugger ein. Teile uns mit in welcher Zeile welcher Fehler auftritt.


    Gruß
    Dirk

  • Was sollte der Debugger auch anderes sagen? Im Code steht doch ganz eindeutig drin, dass er nicht jedes Dokument nehmen soll.
    Die Logik ist falsch (es sei denn, man wollte genau das erreichen).


    Bernhard

  • Geh doch einfach mal gedanklich durch Deinen Code und ziehe gedanklich genau nach, was dieser macht, Marco. Da *musst* Du selber darauf kommen - das Denken kann man nicht vorkauen. Und wenn Du's hast, wirst Du Dir vor die Stirn klatschen und sagen: "Ich Vollpfosten!".


    Bernhard

  • Was ich an dem gesamten Konstrukt nicht verstehe: wenn ohnehin jedes einzelne Dokument verschoben werden soll, warum nicht einfach die gesamte NotesDocumentCollection verschieben? Über jedes einzelne Dokument drüberrutschen ist im besten Falle suboptimal.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Eventuell moechte er ja noch Werte aus dem Mail lesen und anhand dessen entscheiden, in welchen Ordner/Ansicht er das betreffende Dokument verschieben moechte.


    Anderenfalls ist col.PutAllInfolder natuerlich eine eine Alternative.


    Andreas

  • Lese ich hier nicht raus

    Zitat


    ich habe mir einen Agent geschrieben der alle Dokumente in der View $Inbox durchlaufen soll und nach abarbeiten des Dokumentes, diese in einen Ordner verschieben soll.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hallo,


    wenn ich selbst drauf kommen würde, hätte ich hier nicht nach einer Lösung gefragt.


    Kann es sein das GetNextDocument immer das Dokument nach dem ersten Dokument ist.


    Im Ansatz mit dem zwischengespeicherten nextdoc geht das ganze für die ersten beiden Dokumente gut, danach ist nextdoc nothing.


    Gruß


    Marco

  • Also ich verwende Schleifen in der Form seit Ewigkeiten genau so und die tun immer genau das Beschriebene.
    Wenn sie es bei dir nicht tut, dann musst du dir eben die Mühe machen das ganze per Script durchzugehen und immer genau zu schauen welche Werte die einzelnen Objekte annehmen.

    • Offizieller Beitrag

    poste mal Deinen Code. So wie Du es beschreibst ist da bestimmt ein GetNextDocument zu viel drin.


    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,


    hier nochmal der Code mit dem GetNextDocument



    Gruß


    Marco

  • Hallo


    also, wenn sowieso alle verschoben werden sollen,
    warum dann nicht wie folgt?


    Set doc=view.GetFirstDocument


    While Not doc Is Nothing
    'Mail verarbeiten
    ...


    'verschieben in Order Ablage und aus Inbox entfernen
    Call doc.PutInFolder( "Ablage" )
    Call doc.RemoveFromFolder("$Inbox")


    Set doc=view.GetFirstDocument
    wend


    Gruß
    MeinerEiner