Mail per Lotus Script versenden!

  • Hallo Forum-Mitglieder,


    Ich bin relativ neu im Lotus Script und nun habe ich eines erstellt, welches mir beim Speichern eine Mail versenden sollte. Jedoch klappt es nicht ganz so wie ich es will. Ich bekomme die Fehlermeldung "Object Variable not set".


    Kurze Beschreibung:
    Ich habe eine Maske und beim Speichern dieser Maske sollte eine Mail an einem vordefinierten User gesendet werden.

    Dim session AsNew NotesSession
    Dim doc As NotesDocument
    Dim maildoc As NotesDocument
    Dim rtitem As NotesRichTextItem



    Set doc = uidoc.Document
    Set db = doc.Parendatabase

    Set profile = db.Getprofiledocument("DBProfile", "Main")
    Set maildoc = New NotesDocument(db)

    Set rtitem = New NotesRichTextItem( maildoc, "Body" )


    maildoc.form = "Memo"


    maildoc.Subject = "Neuer Eingang Mitarbeitereintrittsformular"
    maildoc.sendto = profile.prfl_mailaddress



    Call rtitem.AppendText( [i]"Grunddaten" )
    Call rtitem.AddNewLine( [i]1 )
    ... '(hier stehen dann die Feldwerte)



    newDoc.Send( False )




    Ich hoffe, dass Ihr mir helfen könnt...


    Danke im Voraus :)

  • Und wo ist Dein Code? Hellsehen können wir noch nicht.. und "Object Variable not set" heisst genau das, was da steht: Eine Variable wurde noch nicht gesetzt (Object = Variable ist vom Typ NotesSession, NotesDatabase, NotesView, NotesDocument, etc. etc) ... WELCHE Variable, das weiss man nur, wenn man Deinen Code sieht...

  • Dim session AsNew NotesSession
    Dim doc As[size=10] NotesDocument[size=10][size=10]Dim[size=10] maildoc [size=10][size=10]As[size=10][color=#000000] NotesDocument[size=10]
    [size=10][size=10][color=#000000]Dim
    [color=#000000][size=10] rtitem [size=10][size=10]As
    [color=#000000][size=10] NotesRichTextItem[size=10][size=10][size=10][color=#000000]Set[size=10][color=#000000] doc = uidoc.Document[size=10]
    [size=10][size=10][color=#000000]Set[size=10][color=#000000] db = doc.Parendatabase[size=10][size=10][color=#000000]Set[color=#000000][size=10] profile = db.Getprofiledocument([i][size=10][size=10]"DBProfile"[color=#000000][size=10], [i][size=10][size=10]"Main"[size=10][color=#000000])[size=10]
    [size=10][size=10][color=#000000]Set[color=#000000][size=10] maildoc = [size=10][size=10]New[size=10][color=#000000] NotesDocument(db)[size=10][size=10][color=#000000]Set[color=#000000][size=10] rtitem = [size=10][size=10]New[color=#000000][size=10] NotesRichTextItem( maildoc, [i][size=10][size=10]"Body"[size=10][color=#000000] )[size=10]
    [align=left][color=#000000]maildoc.form = [i][size=10][size=10][color=#000000]"Memo"[size=10]
    [align=left][color=#000000]maildoc.Subject = [i][size=10][size=10][color=#000000]"Neuer Eingang Mitarbeitereintrittsformular"[size=10]
    [color=#000000]maildoc.sendto = profile.prfl_mailaddress[size=10][size=10][color=#000000]Call[color=#000000][size=10] rtitem.AppendText( [i][size=10][size=10]"Grunddaten"[size=10][color=#000000] )[size=10]
    [size=10][size=10][color=#000000]Call[color=#000000][size=10] rtitem.AddNewLine( [i][size=10][size=10]1[color=#000000][size=10] )
    [color=#000000][size=10]... '(hier stehen dann die Feldwerte)[size=10][size=10]
    [color=#000000]newDoc.Send( [size=10][size=10][color=#000000]False[size=10][color=#000000] )

    • Offizieller Beitrag


    habe mal den Code in eine leserlichere Form gebracht.


    Vor newDoc.Send( False) muss noch ein Call.
    Was bedeutet das [ i ] in den einzelnen Zeilen?


    Gruß
    Dirk


    %edit
    [ i ] entfernt.

    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

    • Offizieller Beitrag

    in welcher Zeile erscheint denn der Fehler?


    Wahrscheinlich beim Set doc = uidoc.Document.


    Gruß
    Dirk

  • Hast Du mal versucht, den Code selbst zu lesen, den Du da gepostet hast?


    Bitte benutze die Code- Tags (das hash- Zeichen in der Menuleiste) und Prüfe mittels Vorschau, ob man das, was Du da postest auch lesen kann...
    In welcher Zeile kommt denn Dein "Object Variable not set"? Was sagt der Debugger?


    Gerade wenn man erst mit LotusScript anfängt: Ein gutgemeinter Rat: Es sollte keine Zeile Code geben, die nicht in einem Errorhandler gewrapped ist, damit man die Information über die Fehlerzeile gleich mitliefern kann...

    • Offizieller Beitrag

    dir fehlt das uidoc.


    kannst du z.B. so holen:

    Code
    dim ws as New NotesUIWorkSpace
    dim uidoc as NotesUiDocument
    set uidoc = ws.CurrentDocument


    Gruß
    Dirk

  • uidoc ist nicht gesetzt... da fehlt:


    Code
    Dim ws As New NotesUIWorkspace
    Dim uidoc as NotesUIDocument
    Set uidoc = ws.CurrentDocument


    PS: Danke Diali für die Arbeit, die eigentlich der Threadersteller machen sollte
    P.P.S.: Warum wird man hier eigentlich nicht darauf aufmerksam gemacht, dass jemand was geposted hat, während man am Tippen war... argh... *G*

  • Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim session As New NotesSession
    Dim doc As NotesDocument
    Dim maildoc As NotesDocument
    Dim rtitem As NotesRichTextItem

    Set uidoc = ws.CurrentDocument
    Set doc = uidoc.Document
    Set db = doc.Parendatabase
    Set profile = db.Getprofiledocument("DBProfile", "Main")
    Set maildoc = New NotesDocument(db)
    Set rtitem = New NotesRichTextItem( maildoc, "Body" )
    maildoc.form = "Memo"
    maildoc.Subject = "Neuer Eingang Mitarbeitereintrittsformular"
    maildoc.sendto = profile.prfl_mailaddress



    Habt Ihr das so gemeint. In der zweiten Zeile zeigt es mir jetzt ein Fehler an

    • Offizieller Beitrag

    die Syntax kannst du hervorheben, indem du ein [ code] davor und ein [ /code] dahinter einfügst (das Leerzeichen nach der [ muss natürlich raus).


    Fehler in der 2. Zeile?
    Du meinst wirklich die Zeile "dim uidoc as NotesUiDocument"?


    Welcher Fehler kommt denn? Nur das rote Kreuz am Anfang der Zeile im Designer? Dann halte mal die Maus über das Kreuz, dann kommt eine aussagekräftigere Fehlermeldung.


    Gruß
    Dirk


    @tode1
    Kommst Du zum EC?

    • Offizieller Beitrag

    dann nimm die Zeile raus, weil du irgendwo schon ein Dim uidoc ... drin stehen hast.


    Die FM bedeutet, dass du ein einer vorherigen Stelle im Code schon mal ein uidoc deklariert hast.


    Gruß
    Drik

    • Offizieller Beitrag

    in welcher Zeile?


    Schalte mal den Debugger an und schau, wo er mit der Fehlermeldung stehen bleibt.


    Gruß
    Dirk

  • Habe meinen Fehler gefunden. War ein sehr leichtsinniger Fehler.


    In der letzten Zeile hatte ich newdoc stehen anstatt maildoc.... :)


    Vielen Dank noch einamal für die schnellen Antworten..


    Noch eine Frage kann ich dass so programmieren, wenn die Feldwerte leer sind also z.B. wenn der Feld Name leer ist, dass es diesen Feld nicht sendet.

    • Offizieller Beitrag

    bevor du die Felder als Text in das RT-Feld schreibst, kannst du auf Inhalt prüfen.


    über eine Funktion (Achtung hat nur eine rudimentäre Fehlervermeidung und kein Fehlerhändling) kannst du dies abfackeln.
    Function

    Code
    Function AppendText2RTF(rtf as NotesRichtextitem, doc as NotesDocumet, Feldname as string, flag_nichtLeer as Boolean)' rtf ... RichTextItem, an welches der Feldinhalt angehängt werden soll' doc ... Dokument, in welchem sich das Feld, dessen Inhalt angehängt werden soll, befindet' flag_nichtLeer ... True nur Felder mit Inhalt werden exportiert   ift rtf is Nothing then exit Function ' rt-feld nicht übergeben   if doc is Nothing then exit Function  ' Dokument, welches die Felder beinhaltet nicht übergeben   if Feldname = "" Then exit Function   ' keinen Feldnamen übergeben   dim item as NotesItem   if Not doc.HasItem(Feldname) Then Exit Function   ' Dokument enthält dieses Feld nicht   set item = doc.GetFirstItem(Feldname)   If flag_nichtLeer Then      ' nur Felder mit inhalt schreiben      if item.Text <> "" Then call rtf.AppendText(item.Text)   else      call rtf.AppendText(item.Text)   End ifEnd Function


    Aufgerufen wird es dann über:

    Code
    Call AppendText2RTF(rtitem, doc, "Dein_FeldName", True)


    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