AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
18.10.18 - 10:01:09
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Sendto as Button
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Sendto as Button  (Gelesen 1294 mal)
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« am: 13.12.17 - 16:48:02 »

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
« Letzte Änderung: 09.01.18 - 13:41:12 von sommersprosse » Gespeichert

Gruß Ulli
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2538



« Antworten #1 am: 13.12.17 - 17:55:16 »

Bekommst Du irgendeinen Fehler?

Mein Tipp ins Blaue: In der Anwendung ist keine Ansicht als DefaultAnsicht definiert, dann werden Mails mit Doclink nicht versendet.
Gespeichert
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« Antworten #2 am: 14.12.17 - 07:38:00 »

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... Roll Eyes
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?
Gespeichert

Gruß Ulli
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2538



« Antworten #3 am: 14.12.17 - 08:22:51 »

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.
« Letzte Änderung: 14.12.17 - 08:24:45 von Peter Klett » Gespeichert
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« Antworten #4 am: 14.12.17 - 15:11:24 »

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.


Gespeichert

Gruß Ulli
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« Antworten #5 am: 08.01.18 - 14:46:02 »

Hallo zusammen,

ich habe noch einmal eine Frage zum Thema Send Mail.

In meinen Felder hresponsible muss nicht immer etwas eingetragen werden, da es in den Protokollen nicht immer eine verantwortliche Person bei reinen Informationsinhalten gesetzt wird.
Mein Script läuft aber hier in einen Fehler, daß er keinen Namen findet an den er senden kann und das Script wird beendet.
Wie kann ich das über eine Messagebox abfangen und den leeren Inhalt ignorieren und das Script ordnungsgemäß beenden lassen?

Ich habe mit is empty / evaluate so noch nicht gearbeitet und bräuchte da einen Tipp von Euch.
Danke im voraus.
Gespeichert

Gruß Ulli
DominoDancing
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 114

Haben Sie einen IGEL? Nein, einen Pferdeschwanz.


« Antworten #6 am: 08.01.18 - 15:18:43 »

Hallo Ulli,

If Trim (strUnid) = Trim (MainID) And Not docnext.hresponsible(0) = "" Then

anstelle

If Trim (strUnid) = Trim (MainID) Then

sollte genügen, um in Deinem Fall keine Mail zu senden. Wenn dann noch eine Messagebox generiert werden soll, dann kannst Du diese an der gewünschten Stelle (z.B. als Else If Trim (strUnid) = Trim (MainID) Then) aufrufen.

Liebe Grüße
René
Gespeichert

... ich fühl' mich so ... Regenbogen ... Grin
... man muss die Ursache des Problems finden ... oder eine Tüte Glitzerfeenstaub ...
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2538



« Antworten #7 am: 09.01.18 - 07:45:47 »

Ich frage mich, wie Du das "über eine Messagebox abfangen" willst?

Du hast 25 zugehörige Dokumente, davon sind 12 ohne Verantwortlichen. Willst Du 12 mal eine Messagebox bringen, "Dokument kann nicht gesendet werden"? Die Begeisterung wird dann groß sein.

Eine sinnvolle Messagebox wäre, wenn Du die versendeten Dokumente zählst und dann so etwas ausgibst, wie "13 Dokumente wurden versendet", oder umgekehrt, "12 Dokumente wurden nicht gesendet", aber das hat nichts damit zu tun, dass Du den Fehler mit einer Messagebox abfängst.

Nebenbei: Warum speicherst Du das docnext in Deiner Schleife?

Und noch eine Pingeligkeit:

bodyitem.AppendText "New Job for Meeting: "  + refdoc.title (0) + "  please click attached link to open --> "

hier solltest Du anstelle von "+" ein "&" verwenden. In Script ist "+" für die Addition von Zahlen gedacht, "&" für das Zusammenfügen von Texten.

Gespeichert
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« Antworten #8 am: 09.01.18 - 13:07:37 »

Hallo Peter,

dein Einwand ist berechtigt mit der Messagebox, die Begeisterung wäre mit der Summe der Abfragen nicht so wirklich gegeben.

Das andere mit & habe ich noch angepasst.

Danke Rene für den Tipp, das war es was ich noch gebraucht habe.

Eine Frage zum Doc.save habe ich noch.
Ich hatte noch einen kleinen Fehler in meinem Script.

   While Not (docnext Is Nothing)
      strUnid = docnext.Getitemvalue( "db_detail_doc_id" )(0)
      If Not docnext.HasItem("senddoc") Then
         If docnext.GetItemValue("senddoc")(0)="" Then
            If Trim (strUnid) = Trim (MainID) And Not docnext.hresponsible(0) = "" 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))
               Set bodyitem=maildoc.CreateRichTextItem("Body")
               bodyitem.AppendText "New Job for Meeting: "  & refdoc.title (0) & "  please click attached link to open --> "
               Call bodyitem.AppendDocLink( docnext, "" )  
               Set senddoc = docnext.Replaceitemvalue("senddoc",1 )
               Call docnext.Save(True,False)
               maildoc.Send (False)
            End If
         End If
      End If
      
      Set docnext = view.GetnextDocument (docnext)
   Wend
   
So sieht das ganze jetzt aus, ich möchte verhindern das die Mail unendlich viele Male verschickt werden kann, wenn auf den Button geklickt wird, sondern nur wenn ein neuer Eintrag erstellt wird. Ich dachte dafür brauche ich dann dieses Save damit der Parameter uch gespeichert wird, lasse mich da aber gerne korrigieren.

Gespeichert

Gruß Ulli
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2538



« Antworten #9 am: 09.01.18 - 13:28:24 »

Klar, wenn Du etwas in das Dokument schreibst, was dort auch gespeichert werden soll, dann musst Du es auch speichern. In dem ursprünglichen Script hattest Du nichts in das docnext geschrieben, damit war das Speichern da überflüssig.
Gespeichert
sommersprosse
Aktives Mitglied
***
Online Online

Geschlecht: Weiblich
Beiträge: 229



« Antworten #10 am: 09.01.18 - 13:43:46 »

Ich hatte die Funktion auch erst nachträglich hinzugefügt.

Aber dann passt das so, danke für Eure Unterstützung, habe den Beitrag auf erledigt gesetzt Smiley
Gespeichert

Gruß Ulli
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: