Как отправить по электронной почте несколько ссылок тех, кто представляет мои прямые отчеты в представлении?
У меня вопрос. Например, есть один вид и 10 документов в этом виде. Из всех этих документов, 8 из которых я должен был получить по электронной почте (на основе значения поля, которое является моим адресом электронной почты).
Теперь я хочу получить только одно электронное письмо для всех этих 8 документов, и в этом электронном письме будет 8 ссылок.
Это возможно?
Потому что в настоящее время я получаю 8 писем, и для каждого письма есть одна ссылка. Заранее спасибо тем, кто может мне помочь.
Dim s As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim i As Integer
Dim view As NotesView
Set s = New NotesSession
Set db = s.CurrentDatabase
Set view = db.GetView("View")
Set doc = New NotesDocument(db)
Dim addresses As NotesName
i=0
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
Set addresses = New NotesName(doc.Manager(0))
If addresses.abbreviated = "" Then
i = i + 1
Else
doc.SendTo = addresses.abbreviated
doc.Form = "Memo"
Set rtitem = New NotesRichTextItem(doc, "Body")
Call rtitem.AppendText("Balance")
Call rtitem.appenddoclink(doc, "Link")
doc.Send (True)
i = i + 1
End If
Set doc = view.GetNextDocument(doc)
Wend
2 ответа
Ваш код может быть немного изменен, чтобы отправить только одно письмо:
Dim s As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim i As Integer
Dim view As NotesView
Set s = New NotesSession
Set db = s.CurrentDatabase
Set view = db.GetView("View")
Set doc = New NotesDocument(db)
Dim addresses As NotesName
i=0
'- prepare mail
doc.Form = "Memo"
Set rtitem = New NotesRichTextItem(doc, "Body")
Call rtitem.AppendText("Balance")
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
Set addresses = New NotesName(doc.Manager(0))
If addresses.abbreviated = "" Then
i = i + 1
Else
'- Set recipient
If not doc.HasItem( "SendTo" ) then
doc.SendTo = addresses.abbreviated
End If
'- Append descriptive text, link and new line
Call rtitem.appendtext(doc.Subject(0) & " " )
Call rtitem.appenddoclink(doc, "Link")
Call rtitem.addnewline(1)
i = i + 1
End If
Set doc = view.GetNextDocument(doc)
Wend
'- send mail
Call doc.Send (True)
с этим кодом сначала готовится письмо, затем для каждого документа добавляется ссылка, и в конце письмо отправляется.
Как сказал Торстен, это можно сделать. Есть несколько способов справиться с этим, в зависимости от того, насколько вы гибки и перспективны, и насколько "чисты" решения, которые вы хотите. Допустим, у вас есть 10 документов, 8 с электронной почтой и 2 с электронной почтой другого пользователя. Я предполагаю, что вы хотите отправить одно письмо вам с 8 ссылками на документы и одно письмо другому человеку с 2 ссылками на документы.
Я бы сделал это, создав класс. Этот класс будет содержать список NotesDocuments (и метод для добавления документов в список):
Class DocData
Public docs List As NotesDocument
Public Sub New()
End Sub
Public Sub Add(doc as NotesDocument)
Set docs(doc.UniversalID) = doc
End Sub
End Class
В вашем основном коде у вас есть список объектов DocData, по одному на каждого получателя почты:
Dim docs List As DocData
Теперь вы просматриваете представление или коллекцию документов, которые у вас есть. Вы проверяете адрес электронной почты для каждого документа и, если для этого адреса нет элемента списка, вы создаете его и добавляете в него документ. Если он уже существует, просто добавьте документ:
email = doc.GetItemValue("EmailAddress")(0)
If !IsElement(docs(email)) Then
Set docs(email) = New DocData()
End If
Call docs(email).Add(doc)
Когда все документы обработаны, у вас должен быть список с одним элементом для каждого получателя почты, и вы можете циклически проходить по списку, создавать одно электронное письмо для каждого элемента и заполнять его ссылками на документы для всех документов в списке в объекте.
Из соображений производительности, если вы планируете, чтобы это работало с большими представлениями с большим количеством документов, я бы предложил поместить адрес электронной почты в один из столбцов, а затем использовать записи представления для циклического просмотра документов и ColumnValues () для чтения. адрес электронной почты. Я написал об этом здесь: http://blog.texasswede.com/re-using-lotusscript-lists-to-increase-performance/