Autor Thema: Sendto as Button  (Gelesen 4353 mal)

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Sendto as Button
« 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 »
Gruß Ulli

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Sendto as Button
« Antwort #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.

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Sendto as Button
« Antwort #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... ::)
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?
Gruß Ulli

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Sendto as Button
« Antwort #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 »

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Sendto as Button
« Antwort #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.


Gruß Ulli

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Sendto as Button
« Antwort #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.
Gruß Ulli

Offline DominoDancing

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Männlich
  • Kugel im Käfig, lsmf, hurz ...
Re: Sendto as Button
« Antwort #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é
... ich fühl' mich so ... Regenbogen ... ;D
... man muss die Ursache des Problems finden ... oder eine Tüte Glitzerfeenstaub ...
... Ich bin rhythm, I'm a dancer und I don't like Influenzer ...

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Sendto as Button
« Antwort #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.


Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Sendto as Button
« Antwort #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.

Gruß Ulli

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Sendto as Button
« Antwort #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.

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Re: Sendto as Button
« Antwort #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 :)
Gruß Ulli

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz