LotusScript — поиск документов по темам

#lotus-notes #lotus-domino #lotusscript

#lotus-notes #lotus-domino #lotusscript

Вопрос:

Здравствуйте, я написал этот код (скопировав с сайтов, которые я нашел в Интернете), чтобы находить электронные письма в моем представлении «Входящие» в Lotus notes и сохранять вложения. Чего я не могу сделать, так это найти документы с нужной мне темой. Коллекция не заполнена. Где я ошибаюсь? Спасибо.

 Sub Initialize
Dim sess As New NotesSession
Dim db As NotesDatabase
Dim coll As NotesDocumentCollection
Dim doc As NotesDocument
Dim rtitem As Variant
Dim filename As Variant

Const DIR_NOT_FOUND = 76
Dim i As Integer
Dim strname As String
Dim view As NotesView
Dim myArray (1 To 2) As String
myArray (1) = "DataToBeSaved"
myArray (2) = "DataToBeSaved"

Set db = sess.currentdatabase
Set view = db.GetView("($Inbox)" )

Set coll = view.GetAllDocumentsByKey(myArray,False)
Set doc = coll.GetFirstDocument()

While Not doc Is Nothing
    Set rtitem = doc.GetFirstItem("Body")
    If Not rtitem Is Nothing Then
        If ( rtitem.Type = RICHTEXT ) Then
            If Isempty(rtitem.EmbeddedObjects) = False Then
                Forall o In rtitem.EmbeddedObjects
                    If ( o.Type = EMBED_ATTACHMENT ) Then
                        filename = Evaluate("@AttachmentNames", doc)
                        'For i = 0 To Ubound(filename)
                        If (filename(i)="query nas.txt") Then
                            strname = Replace(filename(i), "/", "-")
                            On Error DIR_NOT_FOUND Resume Next
                            Call o.ExtractFile( "\rflenas1.rfle.roto-frank.comRFIBLOTUSPROVA" amp; strname )
                        End If                          
                        'Next
                        doc.fieldname = ""
                        Call doc.Save( True, True )
                    End If
                End Forall
            End If
        End If
    End If
    Set doc = coll.getnextdocument(doc)
Wend
 

Конец подраздела

Комментарии:

1. Вам нужно добавить проверку для doc.Subject(0) = «ТЕМА, КОТОРУЮ ВЫ ХОТИТЕ НАЙТИ».

2. Значит, мне не нужно использовать GetAllDocumentsByKey? Итак, в чем же ключ?

3. док.Тема не существует в моем Lotus

4. После While doc is not Nothing добавления if doc.subject(0) = "SUBJECT TO MATCH" then , а затем поместите end if перед set doc = coll.getnextdocument(doc) . Объяснение: doc.subject(0) означает получение строкового значения поля тема в документе

5. Вы использовали цикл в моем ответе? Это позволит просмотреть каждый документ. Ваш исходный цикл просматривает только документы, которые находятся в коллекции, что, вероятно, не то, что вам нужно.

Ответ №1:

Вам нужно обернуть свою логику в цикл, подобный этому. Он будет перебирать все документы в вашем почтовом ящике, и если subejct совпадает, он будет делать все, что вы хотите поместить в область «Сделать что-нибудь с документом».

 set doc = view.getfirstdocument
while not doc is nothing
    if doc.subject(0) = "THE SUBJECT I WANT TO FIND" then
    'Do something with the doc
end if
    set doc = view.getnextdocument(doc)
Wend
 

Вам больше не понадобится coll

Комментарии:

1. Я использовал коллекцию, потому что я ищу только в непрочитанных документах. Если я ищу весь вид или базу данных, это очень, очень, очень медленно

2. Вы все еще можете перебирать коллекцию, но вам нужно протестировать doc.Subject() . В папке «Входящие» нет «ключа», потому что это не отсортированное представление. GetAllDocumentByKey выполняет поиск в первом отсортированном столбце. И, кстати, существует коллекция необработанных документов (посмотрите в documentiaton класс NotesDatabase), но (насколько я помню) нет коллекции для непрочитанных документов.