Как отправить по электронной почте несколько ссылок тех, кто представляет мои прямые отчеты в представлении?

У меня вопрос. Например, есть один вид и 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/

Другие вопросы по тегам