Mail per Lotus Script versenden!

  • Hallo Leute,


    ich hätte dazu auch mal eine Frage.


    Ich habe eine Datenbank, wo man Autos ausleihen kann. Beim Ausleihen bzw. bei der Rückgabe wird der Status in der Maske "Auto" von 0 bzw. 1 auf 1 bzw.0 geändert.
    Bei der Ausgabe gibt man einen Datum ein "anwisierendes Rückgabedatum".
    Meine Frage wäre wie könnte ich es am besten machen, damit wenn das "anwisierendes Rückgabedatum" fällig ist, eine Mail an den Ausleiher rausgeht?


    Agent, der jeden Abend das Rückgabedatum überprüft und dann eine mail rausschickt ???


    Vielen Dank im Voraus

  • Hallo taurec vielen Dank für deine schnelle Antwort.


    Ich habe zuerst ein Button in der Maske "Resource" erstellt und das ist der Code den Button.


    Function postSaveMAEintritt(uidoc As NotesUIDocument)

    Dim db As NotesDatabase
    Dim profile As NotesDocument
    Dim ws As New NotesUIWorkspace
    Set uidoc = ws.CurrentDocument
    Dim session As New NotesSession
    Dim doc As NotesDocument
    Dim maildoc As NotesDocument
    Dim rtitem As NotesRichTextItem
    Dim MailGesendet As NotesItem

    Set doc = uidoc.Document

    If doc.Getitemvalue("Status")(0) = "0" Then

    MsgBox("Hall")
    Set db = doc.Parentdatabase
    Set profile = db.Getprofiledocument("DBProfile", "Main")
    Set maildoc = New NotesDocument(db)
    Set rtitem = New NotesRichTextItem( maildoc, "Body" )
    maildoc.form = "Memo"
    maildoc.Subject = "Test"
    maildoc.sendto = doc.AusgeliehenVon

    Call rtitem.AppendText( "Bitte geben Sie die folgende Resource zurück." )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Name: " + doc.Name(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Typ: " + doc.Typ(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Nummer: " + doc.DocNumber(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Link zum Vorgang:" )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( doc.Notesurl )

    maildoc.Send(False)
    MsgBox("Test")
    Call doc.Save(True,True)
    Call uidoc.Close(True)
    Print("Ihr Antrag wurde erfolgreich gesendet")
    End If

    End Function



    Klappt super alles bestens. Mail kommt an wenn Status = 0 und bei 1 kommt nichts. Alles wunderbar.


    Nur ich habe jetzt einen Agenten erstellt und diesen Code eingefügt und den versucht manuell zu starten.
    Ich habe die Meldung bekommen. Der Agent ist durch ... Dokumente durchgelaufen ...
    aber keine Mail bekommen.


    Wüsstest du was der Fehler sein könnte?

  • Das kann nicht funktionieren wie von dir beschrieben: es gibt kein UI-Dokument, wenn der Agent scheduled läuft oder per Rechtsklick gestartet wird. Zweitens: was steht im Item "AusgeliehenVon"? In Abhängigkeit deiner Serverkonfiguration kann es möglich sein, dass eine Mail an "Lieschen Müller/Org" nicht zugestellt werden kann. Dann müsste "CN=Lieschen Müller/O=Org" im Item stehen, damit die Mail korrekt zugestellt werden kann. Steht bspw. nur "Lieschen Müller" drin, ist es sehr wahrscheinlich, dass das nicht funktionieren wird...

    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 Rockwilder


    da steht der Benutzername und dass funktioniert auch wenn zum Beispiel drinnsteht Hans Gustav/Test.


    Wie müsste ich das Code ändern, damit es funktioniert? oder was genau?

  • Na dann scheu mal.


    Code
    Dim ws As New NotesUIWorkspace
     Set uidoc = ws.CurrentDocument
    ....
    Set doc = uidoc.Document
    ...


    Und wenn du allein schon diese wenigen Zeilen aenderst, dann schon auch noch gleich genau hin,
    welche weiteren Objekte sich aus den vorherigen ableiten bzw. diese benoetigen.



    Andreas

  • Hi,


    Nicht ganz.


    In "periodischen" Agenten duerfen keinerlei Front-End-Klassen verwendet werden.
    (also alle Klassen die ein UI beinhalten, z.B. NotesUIWorkspace, NotesUIDocument, NotesUIView, ...)


    Ansonsten schau einmal in die Hilfe und hier bei NotesDocument und hier bei der Methode Send.


    Da findest du auch Beispiele.



    Andreas

  • Dann schau doch bitte etwas genauer hin!
    Die Search-, bzw. die FtSearch-Methoden der NotesDatabase-Klasse liefern genau das, was du brauchst.
    Alternativ wären natürlich auch die entsprechenden Methoden der NotesView-Klasse tauglich, sofern deine View(s) entsprechend tauglich sind.

    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 ich bin über die Ansicht gegangen und es funktioniert jetzt. :)
    Ich habe nur noch ein Problem. Wenn ich 2 Dokumente habe mit dem Status = "0" schickt es auch 2 Dokumente ab,
    aber das zweite Dokument enthält im maildoc auch den Inhalt des ersten Dokumentes bzw. des Mails mit dem Status = "0".
    Wie könnte ich das maildoc nach dem Senden leeren bzw. den inhalt löschen ohne speichern.



    Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim view As NotesView
    Dim rtitem As NotesRichTextItem
    Dim maildoc As NotesDocument

    Set db = session.CurrentDatabase
    Set view = db.GetView("(Lookup Nummer)")
    Set doc = view.GetFirstDocument
    Set maildoc = New NotesDocument( db )
    Set rtitem = New NotesRichTextItem( maildoc, "Body" )

    While Not ( doc Is Nothing )

    If(doc.Status(0) = "0") Then

    'MsgBox(doc.Status(0))


    maildoc.Form = "Memo"
    maildoc.SendTo = doc.AusgeliehenVon
    maildoc.Subject = "Here's the document you wanted"

    Call rtitem.AppendText( "Bitte geben Sie die folgende Resource wieder zurück" )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Typ: " + doc.Typ(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Name: " + doc.Name(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Nummer: " + doc.DocNumber(0) )
    Call rtitem.AddNewLine( 2 )
    Call rtitem.AppendText( "Link zum Dokument: " )
    Call rtitem.AppendDocLink(doc, "link zum Dokument")

    Call maildoc.Send( False )

    Set doc = view.GetNextDocument( doc )

    Else

    Set doc = view.GetNextDocument( doc )

    End If
    Wend
    End Sub


    Vielen Dank im Voraus

  • Dazu reicht es grundsätzlich 2 Zeilen deines Codes an eine andere Stelle zu verschieben, die Lösung dieser 'Logikherausforderung' überlasse ich dir. ;)


    Wenn du es wiederverwertbar machen willst, löst du das Mailing über eine eigene Funktion, die du dann z.B. mit anderen Standards in eine Scriptlibrary packen kannst.