Domino 9 und frühere Versionen > ND9: Entwicklung

Sendto as Button

(1/3) > >>

Sommersprosse:
Hallo zusammen,

ich habe eine für euch bestimmt einfache Frage.

Ich habe eine Datenbank in der Protokolle gespeichert werden sollen. Über eine Maske (fm_minutes werden die Haupinformationen eingetragen wie Moderator etc.)
In dem jeweiligen Protokoll ist eine eingebetete Ansicht (embeddeprotocolentry), in der die einzelnen Jobs des Protokolls gespeichert, werden. Diese werden über eine zusätzliche Maske db_detail eingegeben. Hier werden Verantwortliche für den jeweiligen Job festgelegt (hresponsible)

jetzt soll über einen Button im Hauptdokument eine Mail an alle verschickt werden, die einen Job bekommen haben.

Mein Code sieht so aus... kann mit Sicherheit auch noch an der ein oder anderen Stelle optimiert werden, aber ich komme an die richtigen Felder und die richtigen Dokumente, er verschickt mir die Mail nur nicht.

Ich nehme an, es liegt daran liegt, daß es Source als Button ist und nicht NotesUIDokument, aber ich steh auf dem Schlauch wie ich das am besten mit den Abfragen als Scriptbibliothek oder Agent starten kann.
Kann ich das so wie es ist kopieren und als Agent anlegen oder muss ich mein Script auseinandernehmen?

Danke schon mal im voraus.


--- Code: ---Sub Click(Source As Button)

Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim maildoc As NotesDocument
Dim bodyitem As NotesRichTextItem
Dim senddoc As NotesItem
Dim mailrecip As notesitem
Dim view As NotesView
Dim docParent As NotesDocument
Dim responsible As NotesItem
Dim strUnid As String
Dim MainID As String
Dim docnext As NotesDocument

Set db = session.CurrentDatabase
Set view = db.getview("EmbeddedProtocolEntry")

Set docnext = view.GetFirstDocument
Set refdoc = ws.CurrentDocument.Document

MainID = refdoc.Getitemvalue("fm_minutes_DocID")(0)

While Not (docnext Is Nothing)
strUnid = docnext.Getitemvalue( "db_detail_doc_id" )(0)
If Trim (strUnid) = Trim (MainID) Then
Set maildoc = New NotesDocument (db)
maildoc.form="Memo"
maildoc.principal="New Job available"
Call maildoc.Replaceitemvalue("Subject",docnext.Getitemvalue("hDescription")(0))
Call maildoc.Replaceitemvalue("sendto",docnext.Getitemvalue("hresponsible")(0))
'Call maildoc.Replaceitemvalue ("Copyto",mailconf.Getitemvalue("Copy_recp"))
Set bodyitem=maildoc.CreateRichTextItem("Body")
bodyitem.AppendText "New Job for Meeting: "  + refdoc.title (0) + "  please click attached link to open --> "
Call bodyitem.AppendDocLink( docnext, "" )  
Call docnext.Save(True,False)
maildoc.Send (False)

End If
Set docnext = view.GetnextDocument (docnext)
Wend

End Sub

--- Ende Code ---

Peter Klett:
Bekommst Du irgendeinen Fehler?

Mein Tipp ins Blaue: In der Anwendung ist keine Ansicht als DefaultAnsicht definiert, dann werden Mails mit Doclink nicht versendet.

Sommersprosse:
Hallo Peter,

ich habe mir da gestern selber ein Ei ins Nest gelegt, ich hatte nur immer Tests an mich selber versucht, hatte in meinem Adressbuch meine private Mail Adresse stehen... ::)
Bei der Arbeit ist mir das nicht aufgefallen, besser gesagt ich habe zwar den Debugger laufen gehabt, hatte hier keine Fehlermeldung, habe aber nicht auf die Router Console geschaut.
Dann hätte ich es sofort gesehen daß es ohne Fehler funktioniert.
Sorry für alle die sich hier Gedanken gemacht haben..

Eine Frage habe ich trotzdem noch, gibt es noch eine Optimierungsmöglichkeit für meinen Code, ich denke ich schreibe bzw. erstelle das kompliziert und umständlich.

Hab das mit Error handling auch noch nicht so drin, an welcher Stelle würde sich das hier anbieten?

Peter Klett:
Dein Code ist grundsätzlich nicht schlecht, Du wirst aber auf ein Performanceproblem stoßen, wenn die Datenbank größer wird.

Derzeit gehst Du in die Ansicht, nimmst das erste Dokument, läufst dann durch die ganze Ansicht und suchst Dir die passenden Dokumente aus. In einer Ansicht mit 100.000 Dokumenten ist das nicht die schnellste Art, vielleicht 5 passende Dokumente zu finden.

Hole Dir aus der Ansicht mit

Set NotesDocumentCollection = Notesview.GetAllDocumentsByKey (key, True)

die NotesDocumentCollection der relevanten Dokumente und durchlaufe dann anstelle der Ansicht diese Collection. Dort brauchst Du dann auch nicht mehr die ID zu prüfen, denn die stimmt ja.

Sommersprosse:
Danke für den Tipp,

ich werde das mal noch angehen, es kann durchaus sein daß die Datenbank selber sehr groß wird.
Wenn wir Streß damit vorbeugen können, lohnt es sich auf jeden Fall noch mal anzupassen.


Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln