Перебрать все представления в Lotus Notes с помощью сценария Excel VBA

У меня есть сценарий (найденный в Интернете и адаптированный к моим потребностям), который может получить доступ к определенному представлению Lotus Notes, получить некоторую информацию из каждого электронного письма и сохранить любое вложение в заданную папку. Если я хочу сделать это для большего количества представлений, у меня в настоящее время есть имена этих представлений на моем листе, и я перебираю их. То, что я хотел бы сделать, это перебрать все представления и сделать то же самое.

Я не профессиональный разработчик и еще не совсем знаком с объектами. Однако эта проблема слишком сложна для меня. Объект Lotus Notes также не самый простой для понимания.

Я использую следующий код, который, конечно же, является частью более крупного (рабочего) скрипта. Для начала было бы достаточно просто перебрать все представления и напечатать имя представления. С этого момента я думаю, что смогу сделать все остальное сам. Может ли кто-нибудь изменить код, чтобы он работал.

Public Sub Get_Notes_Email_Text()

Dim NSession As Object      'NotesSession
Dim NMailDB As Object       'NotesDatabase
Dim NDocs As Object         'NotesDocumentCollection
Dim NDoc As Object          'NotesDocument
Dim NNextDoc As Object      'NotesDocument
Dim view As String

'Start a Lotus Notes session
Set NSession = CreateObject("Notes.NotesSession")
'Connect to the Lotus Notes database
 Set NMailDB = NSession.GetDatabase("", "C:\Users\" & Environ("Username") & "\AppData\Local\IBM\Notes\Data\mail\" & Environ("Username") & ".nsf") 'Default server en database
If Not NMailDB.IsOpen Then
    NMailDB.OpenMail
End If

'Loop through all views and print .Name tot Immediate Window

'    Dim Map As Variant
'    Dim Mappen As Object
'    Set Mappen = NMailDB.Views
'
'    For Each Map In Mappen
'        Debug.Print Map.Name
'    Next Map
'
End Sub

person Marcel Eggen    schedule 15.01.2021    source источник
comment
Все, что вы показали нам здесь, — это закомментированный код. Мы будем рады помочь вам отладить ваш код, потому что это поможет вам учиться. Мы гораздо менее рады писать для вас код. Расскажите нам, что происходит, когда вы удаляете эти комментарии и пытаетесь запустить код?   -  person Richard Schwartz    schedule 16.01.2021


Ответы (1)


Проще, чем просматривать все представления, просто перейти к одному представлению, которое показывает все документы. Если это почтовая база данных, то представление вызывается ($All)

Set allDocsView = NMailDB.getView("($All)")
allDocsView.autoUpdate = false

Затем вы можете просмотреть документы в представлении, используя

Set docToProcess = allDocsView.GetFirstDocument
While Not ( docToProcess Is Nothing )
    'Do what you plan to do here
Set docToProcess = allDocsView.GetNextDocument( docToProcess )
Wend

ОБНОВЛЕНИЕ: поскольку вы хотите перебирать папки, а не представления, вам нужно сделать что-то вроде следующего

Dim sess As New notessession
Dim db As NotesDatabase
Dim views As Variant

Set db = sess.CurrentDatabase

views = db.Views
Forall v In views
    If v.isFolder Then ' Needed so that we are only processing Folder objects and not views - you will need to check that you are not processing system folders e.g. $Inbox etc
        'Do your processing of documents here
    End If
End Forall
person Rob Mason    schedule 16.01.2021
comment
Спасибо за ваш ответ Роб. Я знаю, как использовать представление $All. Одна вещь, которая, я думаю, не распространяется на это решение, заключается в том, что я хочу знать, в каком представлении хранится фактическая электронная почта. Если нет свойства, которое бы показывало реальный вид (а не только $All), в котором хранится электронная почта. Я использую это имя в имени каждого вложения. Кроме того, мне было бы интересно посмотреть, будет ли цикл по всему представлению также означать цикл по всем подвидам и получение этих имен. - person Marcel Eggen; 16.01.2021
comment
При условии, что вы знаете, что отдельные документы NotesDocuments могут появляться и появляются в нескольких представлениях одновременно. Из вашего комментария кажется, что вы хотите перебирать папки вместо представлений (вы говорите о дополнительных представлениях). Входящие — это папки, созданные конечным пользователем. Папки и представления - разные вещи. Документ может находиться только в одной папке одновременно. Возможно, вы могли бы объяснить, что вы пытаетесь сделать, и тогда я смогу предоставить больше указателей. - person Rob Mason; 18.01.2021
comment
Я действительно пытаюсь просмотреть все различные представления и подвиды. И да, я знаю, что электронные письма отображаются более чем в одном представлении. Это знание позволило изменить способ удаления электронных писем. Раньше мы удаляли представление целиком. Теперь мы удаляем содержимое представления, а затем представление. Таким образом, электронные письма больше не отображаются в представлении $All. - person Marcel Eggen; 18.01.2021
comment
После повторного прочтения вашего комментария я не совсем уверен, что мой ответ - это то, что я ищу. Что я хотел бы сделать, так это просмотреть все электронные письма, присутствующие в папке/представлении, созданном пользователем. Я действительно не знал о разнице между представлениями и папками. И их сабы. Тот факт, что электронное письмо может отображаться более чем в одном представлении, не имеет большого значения. Итак, я думаю, я хотел бы перебирать (под) папки. - person Marcel Eggen; 18.01.2021
comment
Обновите ответ - вам также следует обновить свой вопрос: это поможет народному поиску в будущем. - person Rob Mason; 19.01.2021
comment
Код, который вы предоставили, теперь работает нормально. Теперь я могу перебирать только папки или просматривать и представления, и папки. Оба результата очень интересны, так как я получаю больше имен, чем ожидал. Я пытаюсь обновить свой вопрос, как вы предложили, но не могу понять, как это сделать. - person Marcel Eggen; 20.01.2021
comment
Столкнувшийся с трудностями? Вы должны написать вопрос, указав, что вы пытаетесь сделать, что вы сделали, что вы ожидаете получить, и указать, какие части не работают. В этом случае вы хотите просмотреть каждую папку и что-то сделать. Расскажите нам, что это за что-то в вашем вопросе. - person Rob Mason; 20.01.2021