2014-09-20 8 views
0

Использование C# vsto addin Я пытаюсь получить доступ к связанному содержимому папки «Входящие», которая, как я считаю, представляет активный вид. (цель состоит в том, чтобы возиться с blob в свойстве pr_view_state). Проблема в том, что элемент становится доступным только в том случае, если я сначала получаю доступ к настройкам просмотра из пользовательского интерфейса. Btw я наблюдаю такое же поведение даже при использовании Outlook, SpyСодержимое, связанное с MAPIfolder, не всегда доступно из Outlook?

Outlook.MAPIFolder inbox = Globals.ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
Outlook.StorageItem storageItem = inbox.GetStorage("IPM.Microsoft.FolderDesign.NamedView", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass); 
Outlook.PropertyAccessor pa = storageItem.PropertyAccessor; 
const string PR_NORMALIZED_SUBJECT = "http://schemas.microsoft.com/mapi/proptag/0x0E1D001F"; 
const string PR_VIEW_STATE = "http://schemas.microsoft.com/mapi/proptag/0x68350102"; 
string normViewName = pa.GetProperty(PR_NORMALIZED_SUBJECT).ToString(); 

Как я уже сказал, если я поиграться с View Settings в Outlook, GUI, то приведенный выше код работает (также пункт отображается в Outlook, Spy), если нет, то pr_normalized_subject возвращает пустую строку, и доступ к свойству pr_view_state вызывает исключение. Что я делаю не так?

ответ

0

Доступ к папке не гарантируется. Если его нет, GetStorage создаст новое связанное сообщение с указанным классом сообщений, поэтому свойства объекта и состояния представления будут пустыми.

Вы уверены, что оно существует? Какая ошибка при доступе к состоянию представления? Что именно вы видите в OutlookSpy, когда сталкиваетесь с этой проблемой?

Если вы используете Redemption, вы можете получить доступ к связанным сообщениям напрямую, используя что-то вроде RDOFolder.HiddentItems.Find("MessageClass = 'IPM.Microsoft.FolderDesign.NamedView' "). Если сообщение отсутствует, вы вернетесь в нуль.

+0

Вид определенно существует, клиент Outlook использует его, так как вы можете видеть, что это условное форматирование происходит, и если я нажму кнопку «Изменить вид» на ленте, я увижу, что мое пользовательское представление является активным видом. Однако он не отображается в Outlook Spy (или моем коде), пока я не нажму на «Показать настройки» и не внес никаких изменений в него. Более того, как только я получаю доступ к нему и вношу изменения в blob и сохраняю их обратно, просмотр обновляется соответствующим образом, и он сохраняется. Поэтому, если я перезапущу Outlook, я вижу, что измененное представление вступает в силу. Однако я снова теряю доступ к свойству, пока не сделаю какой-нибудь акт графического интерфейса. –

+0

Если вы не видите представление в OutlookSpy, оно физически не существует. Имейте в виду, что Outlook не будет создавать скрытое сообщение с определением вида, если оно фактически не изменено. Как именно вы изменяете blob? Вы делаете это с помощью MAPI или объектной модели Outlook? –