2013-02-21 2 views
1

В нашем представителе магазина сообщений MAPI мы представляем элементы электронной почты и без проспекта (офисные документы и т. Д.). Технически мы предоставляем эти документы как объект IMessage с одним вложением и конкретным PR_MESSAGE_CLASS (например, IPM.Document.txtfile). Затем Outlook рассматривает этот объект как DocumentItem, а не MailItem.DocumentItem (IMessage) теряет приложение после открытия

Как вы можете видеть на скриншоте ниже, это отлично работает. Предварительный просмотрщик работает так, как ожидалось, двойной щелчок по элементу откроет элемент в соответствующем приложении (например, Блокнот).

Before opening - preview works fine

Однако, после того, как элемент был открыт, когда внешнее приложение закрывается, что-то идет не так. Предварительный просмотр прерывается, и элемент нельзя открыть снова, пока не будет выбран другой элемент.

After opening - preview breaks, opening breaks

Согласно Outlook, Spy, наш IMessage объект все еще прекрасно. Это ОЫЙ DocumentItem обертки , что теперь как-то отсутствует, это вложение:

DocumentItem Missing attachment

Что может быть причиной такого поведения? Есть ли обновление, которое нам не хватает? Является ли элемент Outlook представлением старого объекта IMessage, который поврежден? Мы уже провели немало исследований по этой теме, все указатели приветствуются!

[EDIT 1]

Вот Перспективы шпион изложили свою IMessage объект все еще хорошо:

IMessage still fine

[EDIT 2]

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

+1

Что такое IMessage | GetAttachmentTable показать? Можете ли вы пройти через свой код, чтобы увидеть вызовы Outlook при попытке повторно открыть элемент? –

+0

IMessage | GetAttachmentTable в порядке, я обновлю ответ за минуту. При двойном щелчке элемента _after_ «вложение исчезло» Outlook не очень часто разговаривает с нашим поставщиком хранилища сообщений (один экземпляр compareEntryIDs/getIDsFromNames ... никаких вызовов в наш IMessage не происходит. –

+1

Какие имена/идентификаторы запрашивает Outlook при вызове GetIDsFromNames? –

ответ

0

Ответ оказался очень простым,

В PR_MESSAGE_FLAGS необходим свойство включать MSGFLAG_HASATTACH

Добавление этого флага немедленно исправили проблему, и имеет смысл. Дело в том, что возникшее в результате поведение Outlook (работающего при первом доступе, а затем нарушение) отбросило нас.

+0

Это имеет смысл! –

Смежные вопросы