2009-11-05 2 views
6

Кто-нибудь знает, как программно включить/отключить фактическое состояние автоответчика вне офиса в Outlook 2007?Office 2007: Программный контроль помощника вне офиса?

Уже искали браузер объекта в VS 2008 и нашли перечисление Microsoft.Office.Interop.Outlook.OlBusyStatus, но я не нашел ни одного класса или что-то еще, используя это.

Любая идея ценится, спасибо и привет

+0

'OlBusyStatus' предназначен для' AppointmentItem.BusyStatus'. –

ответ

3

UPDATE: Обновленный код ниже, используя пример кода, адаптированный this blog post, который будет работать лучше в более широком разнообразии установок Outlook (например, те, используя как обмен и PST или доступа несколько почтовых ящиков Exchange).

Вот код, который работал на меня в Outlook 2007, чтобы установить состояние отсутствия на работе от внешнего (для Outlook) EXE:

Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 
Microsoft.Office.Interop.Outlook.NameSpace ns = app.Session; 
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores) 
{ 
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox) 
    { 
     store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF 
     break; 
    } 
} 

Убедитесь, что вы не работаете, что код от имени администратора и перспективы, как non-Administrator - в противном случае вы можете получить связанную с безопасностью ошибку в Vista.

Обратите внимание, что в Outlook появятся диалоговые окна безопасности, чтобы убедиться, что пользователь в порядке, обращаясь к объектной модели Outlook. Это нормально, когда объектная модель Outlook доступна из внешнего EXE.

Если, однако, вы получаете доступ к объектной модели из надстройки, приведенный выше код не совсем корректен: вместо создания нового объекта Outlook.Application через конструктор вам необходимо получить ссылку для доверенного объекта Outlook.Application из внутри надстройки, как это:

Microsoft.Office.Interop.Outlook.NameSpace ns = this.Application.Session; 
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores) 
{ 
    if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox) 
    { 
     store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF 
     break; 
    } 
} 

BTW, есть хороший MSDN article по безопасности для надстроек, которые могут быть полезны, если вы бежите в диалоги безопасности или ошибки.

+0

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

+0

прохладный. одно предостережение: я считаю, что приведенный выше код, по-видимому, относится к Outlook 2007 и требует последнего CDO (1.21, я думаю), присутствующего. Если это ваша машина-разработчик, то это не проблема, но если вы связываете это с приложением, которое будет установлено на настольных компьютерах других пользователей, сообщите мне, и я могу добавить больше информации к моему ответу о том, что вы будете нужно сделать. –

+0

Это исключение, которое я получаю: 'System.UnauthorizedAccessException был необработанным кодом пользователя' на вашем примере и даже если я пытаюсь использовать' ns.Stores [1] .PropertyAccessor.GetProperty («http://schemas.microsoft. com/mapi/proptag/0x661D000B ")' – Atmocreations

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