Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: rento am 09.06.04 - 12:22:56
-
Hallo brauche mal wieder hilfe.
Ich möchte in der Sub Querysave einen DocLink per mail an der User senden.
Das Dokument ist auch schon gespeichert gewesen.
Dieses senden soll nur passieren, wenn an dem Dokument was geändert wurde. Warum kann ich hier keinen DocLink senden?
Danke für Infos
-
Warum kann ich hier keinen DocLink senden?
Ich sehe jetzt auf Anhieb keinen Grund, warum das nicht gehen sollte.
Poste doch mal Deinen Code.
-
Ist eine Vorgabeansicht vorhanden?
-
Stimmt, vollkommen richtiger Einwand, Andreas. Daran könnte es natürlich auch liegen.
Wir sollten mal eine Liste must-have's in der Notes/Entwicklung erstellen:
- Option Declare
- Immer Vorgabeansicht definieren
- Code kommentieren
....
(to be continued)
-
Du hast recht. Alleine die Frage mit Doclinks und die Lösung "fehlende Vorgabeansicht" kann so um die hundert mal hier.
Ist das was für Best Practices?
Andreas
-
Ich habs mal in die BP-Diskussionen gestellt:
http://www.atnotes.de/index.php?board=27;action=display;threadid=16269
-
Hallo Hier mein komplettes skript
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim senddoc As NotesDocument
Dim item As NotesItem
Dim rtitem As NotesRichTextItem
Dim collection As NotesDocumentCollection
Dim Teamlead As String
Set db = session.CurrentDatabase
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set senddoc = New NotesDocument(db)
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
If doc.HasItem ("TeamLeader") Then
If doc.HasItem ("Form") Then
Teamlead = Cstr (doc.Teamleader(0))
End If
End If
Set doc = collection.GetNextDocument(doc)
Wend
DueDateStatus = uidoc.FieldGetText("DueDateStatus")
OldDueDateStatus = uidoc.FieldGetText("OldDueDateStatus")
If OldDueDateStatus = "" Then
Call uidoc.FieldSetText("OldDueDateStatus", DueDateStatus)
Goto ende
End If
If DueDateStatus <> OldDueDateStatus Then
Call uidoc.FieldSetText("OldDueDateStatus", DueDateStatus)
senddoc.form = "Memo"
senddoc.Subject = "Status Change" & " " & db.Title
'Anlegen und füllen des Richtextfeldes für die Aufgabenbeschreibung
Set rtitem = senddoc.CreateRichTextItem("Body" )
Subject = uidoc.FieldGetText("Subject")
Call rtitem.AppendText("The Status was changed in document " &"/ " & Subject & " \" &" ")
Call rtitem.AppendDocLink(doc, db.Title) ' Documenten link anlegen
Call senddoc.send (True,Teamlead)
End If
ende:
End Sub
Ich hoffe das euch das weiter hilft.
Weiterhin hoffe ich das ich nicht wieder aus dummheit was übersehen habe. ;D
-
Bevor wir uns den Code ansehen:
Du hast noch nicht beantwortet ob eine Vorgabeansicht definiert ist.
Denn daran könnte es wie oben von Andreas erwähnt auch liegen.
-
Ja es gibt eine Ansicht mit "Vorgabe beim ersten Öffnen der Datenbank".
Aber was hat das mit dem senden eines DocLink´s zu tun? Verstehe ich net.
Könnt ihr mir das bitte erklären?
Danke schonmal
-
Aber was hat das mit dem senden eines DocLink´s zu tun?
Damit Doclinks funktionieren, muss bei einer Ansicht der DB "Default when database is first opened" ausgewählt sein.
Lotus Script benötigt diese Ansicht, um die Doclink-Lokation zu erstellen.
-
Wollte mir jetzt gerade Dein Script ansehen.
Dazu fehlen aber noch ein paar Infos:
- Wo genau hängt es? Du schreibst nur: "Warum kann ich hier keinen DocLink senden?"
- Falls es zu einem Script-Fehler kommt: Bei welcher Zeile entsteht der Fehler? (-> Debugger hilft da)
Beim überfliegen hab ich gesehen, dass Du da Anweisungen wie "Goto ende" drinhast. Damit überspringst Du übrigens Dein senddoc.send - vielleicht liegt es auch daran.
-
Mit
Call senddoc.send (True,Teamlead)
wird die Maske im Dokument gespeichert (1. Parameter = True). Das willst Du nicht wirklich (sonst hättest Du nicht zuvor Form = "Memo" gesetzt). Ersetze das mal durch ein False.
Evtl. gibt es in der Maske, die Du aktuell versendest, gar kein Body Feld.
Andreas
-
Das Skirpt wird bei Querysave eingehangen und ausgeführt.
Mit Goto überspringe ich den teil nur wenn die bedingungen nicht zutreffen, die ich brauche, damit er ne Mail sendet.
Mit senddoc.send (False,Teamlead) habe ich auch schon probiert funktioniert auch net.
Wenn ich das senddoc.send auf True setzt kommt der Fehler vom debuger an der Stelle wo ich den DocLink einfügen möchte.
Das Bodyfeld ist vorhanden.
Habe das senddoc.send jetzt auf False stehen und nur der DocLink wir nicht angezeigt.
Achso noch ne Info Mails komme alle an nur der DocLink ist nicht vorhanden.
-
Endlich die Info wo der Debugger zuschlägt ;D
Es ist klar: Du referenzierst auf "doc", welches es gar nicht gibt. Vorher iterierst Du solange bis: doc is nothing
Also gibt es kein doc, auf das Du verlinken kannst.
Im ürbigen ist Deine Methode, den Teamleider zu ermitteln, äußerst unperformant: Du gehst über alle Dokumente der Datenbank und suchst solange, bis ein Teamleiter gefunden wurde.
Besser ist da eine Ansicht, die nur Dokumente anzeigt, in denen der Teamleiter vorhanden ist. Dann kann Du mit
set doc = view.GetFirstDocument
arbeiten...
Andreas
-
Hey supper vielen und Großen danke.
Also war es doch mal wieder meine Eigene Dummheit, das das mit dem doc net gesehen hab :-[ .
Das mit der Ansicht ist ne gute idee kann ich noch einbauen.
nochmal ganz viel dank.
-
Schön dass es jetzt funktioniert.
Um den Doklink einzufügen, kannst Du
Call rtitem.AppendDocLink(uidoc.Document, db.Title)
verwenden.
BTW: Kannst Du den Thread noch auf "Erledigt" setzen. Es gibt da einen entsprechenden Button oben.
Andreas