Таблицы MAPI
Область применения: Outlook 2013 | Outlook 2016
Таблица MAPI — это объект MAPI, который используется для просмотра коллекции свойств, принадлежащих другим объектам MAPI определенного типа. Таблицы MAPI структурированы в формате строк и столбцов, каждая строка представляет объект и каждый столбец, представляющий свойство объекта. Одним из свойств, обычно включенных в каждую строку, является свойство PR_ENTRYID (PidTagEntryId), идентификатор, который можно использовать для открытия и изменения объекта.
Так как строки содержат значения свойств, получение строки из таблицы аналогично получению набора свойств непосредственно из объекта, представленного строкой. Обе операции приводят к получению массива значений свойств. Разница main заключается в обработке длинных строковых и двоичных свойств. Для включения в таблицу некоторые средства реализации таблиц усекивают эти свойства до 255 байт. При извлечении непосредственно из объекта полное значение всегда доступно.
Таблицы реализуются поставщиками адресной книги и хранилища сообщений, а также MAPI в зависимости от типа таблицы и объектов в ней. Поставщик хранилища сообщений реализует папки и таблицу содержимого для каждой папки, которая содержит сведения о сообщениях в папке. Поставщик адресной книги реализует контейнеры адресных книг и таблицу иерархии, показывающую их организацию. MAPI реализует несколько разных таблиц, некоторые для использования клиентскими приложениями, некоторые для использования поставщиками услуг, а некоторые для использования обоими. Таблица состояния уникальна тем, что MAPI в конечном счете предоставляет таблицу, но строки состоят из вкладов от всех типов поставщиков услуг в дополнение к MAPI.
На следующем рисунке показано одно из часто используемых таблиц в MAPI: для отображения содержимого папки. Справа отображается два сообщения, которые могут отображаться в обычном клиентском приложении для обмена сообщениями. Отображение содержит четыре фрагмента информации о каждом сообщении: отправитель, получатель, тема и текст сообщения. Каждый фрагмент информации соответствует свойству сообщения.
Слева — представление таблицы содержимого, включающее эти два сообщения. В то время как таблица содержимого может содержать десять строк, так как папка содержит десять сообщений, каждая строка содержит много более трех столбцов, это конкретное представление ограничено только двумя строками и тремя столбцами.
В следующей таблице показаны свойства, составляющие набор столбцов для представления таблицы.
Свойство | Описание |
---|---|
PR_SENDER_NAME (PidTagSenderName) |
Имя отправителя |
PR_ORIGINAL_DELIVERY_TIME (PidTagOriginalDeliveryTime) |
Дата и время отправки сообщения |
PR_SUBJECT (PidTagSubject) |
Строка темы сообщения |
Обратите внимание, что набор свойств, отображаемых в сообщении, отличается от набора столбцов, отображаемых в таблице. Исполнитель таблицы, в данном случае поставщик хранилища сообщений, предоставляет набор столбцов по умолчанию в порядке по умолчанию. Клиент может изменить этот набор столбцов, запрашивая дополнительные столбцы или отклоняя столбцы по умолчанию, а также запрашивать их упорядочение определенным образом. Клиент также может упорядочить строки, сортируя их по значению одного или нескольких столбцов.
Использование таблицы для отображения содержимого папки
Существует два интерфейса для работы с таблицами:
IMAPITable: IUnknown предоставляет клиентам и поставщикам служб представление базовых данных таблицы только для чтения, позволяя им просматривать и изменять только презентацию. Несколько пользователей могут получить доступ к одинаковым данным одновременно с IMAPITable. IMAPITable реализуется MAPI и поставщиками услуг.
ITableData: IUnknown предоставляет клиентам и поставщикам услуг доступ на чтение и запись к базовым данным таблицы, позволяя им вносить постоянные изменения. IMAPITable реализуется MAPI и используется в основном поставщиками услуг, которые обращаются к ней путем вызова функции CreateTable . Реализация ITableData содержит все данные для таблицы и все связанные с ней ограничения в памяти, что делает ее непригодной для использования с очень большими таблицами. Составные ограничения и сложные операции, такие как классификация, не поддерживаются.