Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: JohnSilver am 23.08.03 - 22:25:35

Titel: Serien-Mail per Script
Beitrag von: JohnSilver am 23.08.03 - 22:25:35
Hallo,


In Script1 werden die Mailadressen aus meiner Kundendatenbank(für die ausgewählten Dokumente)  in meine Maildatenbank in ein neues Maildokument in das Feld "SendTo" übernommen.

Das andere Script(Script2) öffnet per Button in meiner Kundendatenbank
eine Auswahl, in welcher man die entsprechende Mailvorlage aus der Maildatenbank wählt.

Was nicht funktioniert (Script3) ist, daß die Mailadresse(n) aus Script1 in
die ausgewählte Vorlage aus Script2 im Feld "SendTo" steht.

Was muß in Script3 geändert werden?

Besten Dank im voraus!

Gruß

Michael


Titel: Re:Serien-Mail per Script
Beitrag von: ata am 25.08.03 - 09:57:00
... das ist nur über den Code betrachtet nicht ganz so einfach, aber eines hat mich auf die schnelle stutzig gemacht:
Code
   For x = 1 To collection.Count
      Set note = collection.GetNthDocument(x)
      SendToNames(counter) = GetMailAddress
      counter = counter + 1
   Next

SendToNames(counter)

... sollte glaube ich...

SendToNames(x)

... heißen...

ata
Titel: Re:Serien-Mail per Script
Beitrag von: JohnSilver am 11.09.03 - 22:50:20
Das Problem wäre gelöst, in der Mailvorlage heißt das Feld nicht
SendTo sondern EnterSendTo!

Jetzt habe ich allerdings ein neues Problem:

wenn ich im unteren Abschnitt folgendes einfüge:

mailnote.body = Anrede

werden meine Serienmails erstellt, jedoch wird der Text in der Vorlage
durch die Anrede überschrieben.

Bei dem folgenden Code wird der Inhalt der Vorlage nicht überschrieben,
jedoch erscheint bei der zweiten Mail zusätzlich die Anrede von der
ersten Mail, bei der dritten Mail die Anrede der ersten beiden(zusätzlich) usw.

Call body.AppendText(Anrede)


Ich bin für jede Hilfe sehr sehr dankbar!

--------------------------------------------------------------------------------------------------------


   vMailInfo = Evaluate( "@MailDbName" )
   Set newcollection = ws.Picklistcollection(PICKLIST_CUSTOM, False, vMailInfo(0), vMailInfo(1), "Vorlage", "Vorlage wählen", "Wählen Sie bitte eine Vorlage für das neue Memo.")
   Set mailnote = newcollection.getfirstdocument
   
   
   For y =0 To counter-1  
     
     
      mailnote.EnterSendTo = SendToNames(y)
      mailnote.Form = Memo
      Set body = mailnote.GetFirstItem("Body")
      Set rtnav = body.CreateNavigator
      Anrede = (SendToBriefanrede(y) + " " +  SendToNachname(y) + ",")
      rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)  
     
     
     
      Call body.BeginInsert(rtnav)
     
      Call body.AppendText(Anrede)
     
      Call body.AddNewLine(1)
      Call body.AddNewLine(1)
      Call body.EndInsert
     
      mailnote.Logo = session.GetEnvironmentString("DefaultLogo",False)
      mailnote.Principal = profile.Owner(0)
      Call ws.EditDocument(True,mailnote)
     
     
   Next
Titel: Re:Serien-Mail per Script
Beitrag von: Micha am 12.09.03 - 10:02:18
Mit dem skript schreibst du immer alles in ein Dokument.
Mir fehlt hier irgendwie das:
Set mailnote = newcollection.getNextDocument
oder  Forall y in newcollection

Was ist denn der counter?
Ich kenn auch die ganzen methoden für das richtextitem gar nicht, gibt es die in 5 überhaupt?
Bei appendText auf das Item müsste die Anrede meiner Meinung nach hinten angehangen werden.
Ich bau mir in so einem Fall immer den Text für das rtItem komplett neu.

Vielleicht hilft es ja,

Gruß Micha


 
 
     
Titel: Re:Serien-Mail per Script
Beitrag von: JohnSilver am 12.09.03 - 18:44:34
Hallo Micha,

einige der Richtext-Befehle funktionieren nur in Notes6
(da wir demnächst auf Lotus6Server und Client umstellen,
macht dies keine Probleme)!

Options public
Use "MailLibrary"


Sub Initialize
'declare local variables
   Dim x As Integer
   Dim y As Integer
   Dim z As Integer
   
   
'Dim uiws As New notesuiworkspace
   Dim newcollection As NotesDocumentCollection
   Dim noteUIEditDocument As NotesUIDocument
   Dim noteCursorDoc As NotesDocument
   Dim vMailInfo As Variant
   Dim body As NotesRichTextItem
   Dim rtitem As NotesRichTextItem
   Dim rtnav As NotesRichTextNavigator
   Dim Anrede As String
   
   
'instantiate objects
   
   InstantiateVariables
   
   If Not collection Is Nothing Then
      If (collection.Count = 0) Then
         Messagebox "No documents were selected.",0,"Error"
         Exit Sub
      End If
   Else
      Exit Sub
   End If
   
   Redim SendToNames(collection.Count-1)
   Redim SendToNachname(collection.Count-1)
   Redim SendToBriefanrede(collection.Count-1)
   
   
'hier werden die Mailadressen,Nachname sowie Briefanrede aus meiner
' Datenbank ausgelesen(siehe auch "MailLibrary")!

'we use the GetNth method since the resulting collection is an IDTable
   For x = 1 To collection.Count
      Set note = collection.GetNthDocument(x)
      SendToNames(counter) = GetMailAddress
      SendToNachname(counter) = GetNachname
      SendToBriefanrede(counter) = GetBriefanrede
      counter = counter + 1
      
   Next

'hier wird eine Vorlage aus einer Liste, welche sich in meiner Maildatenbank befindet  geöffnet
   
   vMailInfo = Evaluate( "@MailDbName" )
   Set newcollection = ws.Picklistcollection(PICKLIST_CUSTOM, False, vMailInfo(0), vMailInfo(1), "Vorlage", "Vorlage wählen", "Wählen Sie bitte eine Vorlage für das neue Memo.")
   Set mailnote = newcollection.getfirstdocument
   
   
   
'in der ersten Bodyzeile steht ein Wort, welches durch die Anrede ersetzt wird.
   
   For y=0 To counter-1   
      Set body = mailnote.GetFirstItem("Body")
      Set rtnav = body.CreateNavigator
      Anrede = (SendToBriefanrede(y) + " " +  SendToNachname(y) + ",")
                  rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)  
      
      Call body.BeginInsert(rtnav)
      Call body.AppendText(Anrede)   
      Call body.AddNewLine(1)
      Call body.EndInsert      
      mailnote.EnterSendTo = SendToNames(y)
      mailnote.Logo = session.GetEnvironmentString("DefaultLogo",False)
      mailnote.Principal = profile.Owner(0)
      Call ws.EditDocument(True,mailnote)
   Next
   
   
   
End Sub
--------------------------------------------------------------------------------------------------
           "MailLibrary" in ScriptBibliotheken




Option Public
%INCLUDE "lsconst.lss"


(Declarations)


onst ERROR_TITLE = "Error"
Const ERROR_MSG_2 = "Please verify that it appears correctly in your current location."
Const ERROR_MSG_1 = "Your mail file could not be opened."

Dim ws As NotesUIWorkspace
Dim session As NotesSession
Dim db As NotesDatabase
Dim maildb As NotesDatabase
Dim note As NotesDocument
Dim mailnote As NotesDocument
Dim collection As NotesDocumentCollection
Dim profile As NotesDocument
Dim SendToNames() As String
Dim SendToNachname() As String
Dim SendToBriefanrede() As String
Dim counter As Integer
Dim flag As Variant

(InstantiateVariables)

Sub InstantiateVariables
   Set ws = New NotesUIWorkspace
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   Set maildb = New NotesDatabase("","")
   maildb.OpenMail
   
   ' check to make sure that we got the mail file opened
   flag = maildb.Isopen
   If flag = True Then
      Set profile = maildb.GetProfileDocument("CalendarProfile")
      counter = 0
      Set collection = db.UnprocessedDocuments
   Else
      Msgbox ERROR_MSG_1 & Chr(13) & ERROR_MSG_2, MB_ICONSTOP,ERROR_TITLE
   End If
End Sub

(GetMailAdress)

Function GetMailAddress() As String
   
   GetMailAddress = note.EMail(0)
   
End Function

(GetNachname)

Function GetNachname() As String
   
   GetNachname = note.Nachname(0)
   
End Function


(GetBriefanrede)

Function GetBriefanrede() As String
   
   
   GetBriefanrede = note.Briefanrede(0)
   
   
End Function









Titel: Re:Serien-Mail per Script
Beitrag von: JohnSilver am 30.09.03 - 21:17:02
 ??? ???

Hallo,

das Problem mit der Anrede wäre gelöst, wobei jetzt ein neues Problem
vorliegt. In jedem neu erzeugten Mail wird der "text" aus der Vorlage
direkt hinter die Anrede gestellt. Wie kann ich den "text" aus der Vorlage
zwei Zeilen unter die Anrede stellen? Oder muß die Anrede(String) und der Text(String)wieder in RichText umgewandelt werden, damit AppendNewLine
einsetzbar ist?

Bin für jede Hilfe sehr dankbar.

Besten Dank im voraus.


Dim text As String  


vMailInfo = Evaluate( "@MailDbName" )
   Set newcollection = ws.Picklistcollection(PICKLIST_CUSTOM, False, vMailInfo(0), vMailInfo(1), "Stationery", "Vorlage wählen", "Wählen Sie bitte eine Vorlage für das neue Memo.")
   Set mailnote = newcollection.getfirstdocument
   
text = mailnote.body
   
   
   
   
   For y=0 To counter-1   
      
            
      
      Anrede = (SendToBriefanrede(y) + " " +  SendToNachname(y) + "," )
      
      Anrede = Anrede + Text
      mailnote.body = Anrede
      
      mailnote.EnterSendTo = SendToNames(y)   
      
      mailnote.Logo = session.GetEnvironmentString("DefaultLogo",False)
      mailnote.Principal = profile.Owner(0)
      Call ws.EditDocument(True,mailnote)
   Next
Titel: Re:Serien-Mail per Script
Beitrag von: koehlerbv am 30.09.03 - 21:31:12
Wie wäre es mit
Anrede = Anrede & chr$ (10) & chr$ (10) & Text ?

Statt "+" sollte man in LS sowieso "&" verwenden - aber das hat mit diesem Problem nix zu tun.

Bernhard
Titel: Re:Serien-Mail per Script
Beitrag von: JohnSilver am 03.10.03 - 10:57:16
Hallo Bernhard,

vielen vielen Dank,  es funktioniert!!! :) :) :)

noch eine letzte Frage, wie kann ich formatierten Text aus der Vorlage
übernehemen, der Text wird immer unformatiert aus der Vorlage übernommen?

Michael
Titel: Re:Serien-Mail per Script
Beitrag von: koehlerbv am 03.10.03 - 13:39:17
Gib der Methode AppendRTItem der NotesRichTextItem-Klasse eine Chance.
Du solltest aber bedenken, daß Mails beim Versand via Internet meist alle Formatierungen verlieren - ein reines Text-Mail kommt also immer am saubersten an.

HTH,
Bernhard