Поделиться через


Реализация разрешения имен

Область применения: 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 , которая перехватывает вызов.