Реализация разрешения имен
Область применения: Outlook 2013 | Outlook 2016
Поставщики адресных книг отвечают за поддержку разрешения имен — процесс связывания идентификатора записи с отображаемым именем. Клиенты инициируют разрешение имен при вызове IAddrBook::ResolveName , чтобы убедиться, что каждый член списка получателей исходящего сообщения соответствует допустимому адресу.
Поставщик может поддерживать разрешение имен следующими способами:
Поддержка ограничения свойств PR_ANR (PidTagAnr) — требование для всех контейнеров адресной книги.
Реализация метода IABContainer::ResolveNames , параметра для всех контейнеров адресной книги.
Если вы решили поддерживать IABContainer::ResolveNames, попробуйте найти точное совпадение для каждого неразрешенного отображаемого имени в структуре ADRLIST , переданной с помощью параметра lpAdrList . Вы можете определить неразрешимое отображаемое имя, так как в нем отсутствует свойство PR_ENTRYID (PidTagEntryId) в массиве значений свойств в его члене aEntries структуры ADRLIST . Игнорируйте все записи, с которыми связаны нулевые свойства.
Сообщите о результате попытки разрешения в параметре lpFlagList , массиве флагов, соответствующем массиву отображаемых имен в lpAdrList. Флаги являются позициональными таким образом, что первый флаг соответствует первому члену aEntries в структуре ADRLIST , второй флаг соответствует второму члену aEntries и т. д.
Есть три возможных результата для каждой неразрешенной записи:
Совпадение не найдено, а это означает, что ни одна из записей контейнера не соответствует записи в структуре ADRLIST . Задайте для соответствующей записи в параметре lpFlagList значение MAPI_UNRESOLVED.
Можно найти несколько совпадений, то есть несколько записей контейнера, которые соответствуют записи в структуре ADRLIST . Задайте для соответствующей записи в параметре lpFlagList значение MAPI_AMBIGUOUS. Не изменяйте количество записей в структуре ADRLIST .
Можно найти точное совпадение. Это означает, что существует только одна запись контейнера, которая соответствует записи в структуре ADRLIST . Задайте для соответствующего элемента в параметре lpFlagList значение MAPI_RESOLVED и добавьте идентификатор записи в массив свойств, связанных с записью ADRLIST .
Если вы решили не поддерживать IABContainer::ResolveNames, верните MAPI_E_NO_SUPPORT из реализации.
Все поставщики адресных книг должны поддерживать неоднозначное разрешение имен ( ограничение свойств PR_ANR ) в таблицах содержимого контейнеров. Чтобы обеспечить эту поддержку, обработайте ограничение на PR_ANR в реализации IMAPITable::Restrict , выполнив поиск по типу "лучшего предположения", соответствующего одному или нескольким конкретным свойствам, которые подходят для вашего поставщика. Вы можете использовать одно и то же свойство или свойства каждый раз, например PR_DISPLAY_NAME (PidTagDisplayName) или PR_ACCOUNT (PidTagAccount), или разрешить администратору выбирать из списка допустимых свойств.
Хотя большинство поставщиков предоставляют собственную реализацию таблицы содержимого, реализацию, предоставляемую MAPI, можно настроить с помощью функции CreateTable . Однако, поскольку реализация MAPI не поддерживает ограничения любого рода, необходимо создать объект-оболочку, чтобы включить настраиваемую версию Restrict , которая перехватывает вызов.