Как получить доступ к папкам Outlook не по умолчанию в iCloud с помощью Visual Basic VB.Net

Это мой самый первый пост, и я не эксперт по программированию, как скоро станет ясно. Пожалуйста, будьте нежны.

Я создал программу (используя Visual Basic 2010 Express), которая, среди прочего, заполняла текстовое поле «Примечаниями»/«Тело» контакта, который я выбирал на основе значения «CustomerID» каждого контакта в Outlook.

Он отлично работает для «Контактов» по ​​умолчанию и его подпапки «Контакты-подкатегория» в группе Outlook «Мои контакты», показанной здесь: введите здесь описание изображения, используя следующий код (код включает элементы календаря/назначения, я думаю, что смогу адаптировать синтаксическое решение для контактов, чтобы их можно было игнорировать, я надеюсь):

Public Class CustomOutlookInterface2
Private SQL As New DatabaseControl

Private ol As New Outlook.Application
Private olns As Outlook.NameSpace = ol.GetNamespace("MAPI")

Private olContactFolder As Outlook.MAPIFolder = olns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Folders("Contacts-SubCategory")
Private olCalendarFolder As Outlook.MAPIFolder = olns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar)

Private olContactItems As Outlook.Items = olContactFolder.Items
Private NewContact As Outlook.ContactItem
Private AppointmentItem As Outlook.AppointmentItem

Однако недавно я загрузил «iCloud для Windows», чтобы все было синхронизировано, и заметил, что он добавил новую группу в Outlook под названием «iCloud» и переместил записи контактов во вновь созданные «Контакты в iCloud» и «Подкатегорию контактов в iCloud» (показано на той же картинке выше). Я предпринял множество попыток адаптировать предыдущий рабочий код, чтобы направить его в папку iCloud. Самое близкое, что я подошёл...

    Private ol As New Outlook.Application
Private olns As Outlook.NameSpace = ol.GetNamespace("MAPI")

Private olContactFolder As Outlook.MAPIFolder = olns.Folders.Item("iCloud")

Вышеупомянутое не вызывает ошибки. Но это также приводит к «строке не найдено», когда я использую следующее

    Dim query As String = "[CustomerID]='" & CustID & "'"

    NewContact = olContactItems.Find(query)

где «запрос» — это номер, который я присвоил контакту и сохранил в поле «Идентификатор клиента».

Основываясь на плоских пятнах на моем лбу от удара головой о стол, я думаю, что это сводится к синтаксису идентификации группы iCloud, затем папки «Контакты в iCloud», а затем подпапки «Контакты-Подкатегория в iCloud». В Windows путь эквивалентен «iCloud\Contacts в iCloud\Contacts-SubCategory в iCloud\

Я не могу сказать вам, насколько я был бы признателен за любую помощь. Мой стол угрожает вызвать полицию из-за всех ударов головой, которые я ему дал.


person WroughtIronGuy    schedule 03.03.2020    source источник


Ответы (1)


Я понял ответ на свой вопрос. Я собирался вообще удалить вопрос, так как его еще никто не задавал. Тем не менее, я решил опубликовать свое решение на случай, если оно поможет кому-то еще.

В Outlook экран контактов выглядит следующим образом: введите здесь описание изображения

Моя ошибка заключалась в том, что я не понимал, что когда iCloud для Windows создал папку iCloud, он также создал «Контакты-Подкатегория» в качестве подпапки «Контакты» (визуально это не похоже на подпапку). Кроме того, суффикс «… в iCloud», отображаемый в Outlook, НЕ является частью имени, необходимого для идентификации папки в коде. Код, который помог мне развернуть папку «… SubCategory», был следующим:

Private olContactFolder As Outlook.MAPIFolder = olns.Folders.Item("iCloud").Folders("Contacts").Folders("Contacts-SubCategory")

Без суффикса «... в iCloud», который появляется в Outlook. Я надеюсь, что это поможет другим неопытным людям, таким как я. Я достаточно натерпелся за всех вас, пытаясь решить эту проблему как новичок-самоучка. Надеюсь, вы нашли этот пост быстро, прежде чем сдаться, как я чуть не сдался.

person WroughtIronGuy    schedule 04.03.2020