Встроенный элемент управления Outlook View - PullRequest
4 голосов
/ 25 сентября 2008

Я пытаюсь создать надстройку для Outlook 2003 с помощью Visual Studio 2008 в Windows XP с пакетом обновления 3 (SP3) и Internet Explorer 7.

Моя надстройка использует собственную домашнюю страницу папки, которая отображает мою пользовательскую форму, которая оборачивает Outlook View Control.

Я получаю COM Exception с описанием «Exception from HRESULT: 0xXXXXXXXX» каждый раз, когда я пытаюсь установить свойство Folder OVC. Код ошибки - это случайное число, каждый раз другое. Это не первый доступ к свойствам элемента управления, до этого свойства View и ViewXML уже установлены. Элемент управления помечен как безопасный для сценариев.

Я использую значение свойства CurrentFolder.FolderPath активного проводника, которое кажется правильным:

Outlook.Explorer currentExplorer = app.ActiveExplorer();
        if (currentExplorer != null)
        {
            ovcWrapper.Folder = currentExplorer.CurrentFolder.FolderPath;
        }

Это вершина трассировки стека:

System.Runtime.InteropServices.COMException (0xXXXXXXXX): Exception from HRESULT: 0xXXXXXXXX
at Microsoft.Office.Interop.OutlookViewCtl.ViewCtlClass.set_Folder(String pVal)
at AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl.set_Folder(String value)..

Это происходит только в том случае, если папка находится в нестандартном PST-файле. Переход в папку внутри PST-файла по умолчанию не приведет к исключениям.

Я должен подчеркнуть, что все работало просто отлично, прежде чем я уехал в отпуск :). Кажется, что Windows XP установила некоторые обновления, которые изменили безопасность по умолчанию Internet Explorer или Outlook 2003, пока меня не было.

На другой (виртуальной машине) с Office 2007 и Internet Explorer 6 без каких-либо обновлений все работает просто отлично.

Ответы [ 2 ]

2 голосов
/ 01 октября 2008

Через некоторое время я наконец-то выясняю, в чем заключается решение: измените имя внешнего хранилища на что-то новое.

Во время запуска надстройки он загружает PST-файл не по умолчанию и изменяет его имя (не имя pst-файла, а имя корневой папки) на «Документы».

Это код:

session.AddStore("C:\\test.pst"); // loads existing or creates a new one, if there is none.
storage = session.Folders.GetLast(); // grabs root folder of the new fileStorage.

if (storage.Name != storageName) // if fileStorage is brand new, it has default name.
{
      storage.Name = "Documents";
      session.RemoveStore(storage); // to apply new fileStorage name, it have to be removed and added again.
      session.AddStore(storagePath);
 }

Решение состоит не в том, чтобы использовать «Документы» в качестве имени, а в качестве нового. Проблема не связана с конкретным именем.

1 голос
/ 26 сентября 2008

Добри Дан, nency:)

Я не знаю, могу ли я действительно предложить решение "серебряной пули", учитывая информацию здесь ... но вот несколько идей / примечаний, которые можно попробовать:

Работая с Outlook над несколькими проектами в прошлом, я могу вам сказать, что иногда это забавная птица, когда речь идет о предоставлении / предоставлении доступа внешним пользователям / процессам. Иногда требуется, чтобы пользователь вручную подтвердил доступ или вошел в систему ... поэтому убедитесь, что у вас есть

app.Session.Logon() 

где-то позаботился.

Другая вещь, которую я заметил, это использование app.ActiveExplorer() Убедитесь, что эта функция возвращает именно то, что вы думаете; Это занимает самое верхнее окно на рабочем столе пользователя ... которое обычно , но не всегда окно, с которым вы пытаетесь работать, так что просто перепроверьте.

...