2009-11-05 19 views
6

Czy ktoś wie, jak programowo włączyć/wyłączyć aktualny stan autoreagującego nieobecności w programie Outlook 2007?Office 2007: Programowo kontrolować asystenta Out-of-Office?

Już przeszukałem przeglądarkę obiektów w VS 2008 i znalazłem wyliczenie Microsoft.Office.Interop.Outlook.OlBusyStatus, ale nie znalazłem żadnej klasy ani niczego innego z tego powodu.

Każdy pomysł jest doceniana, dzięki i pozdrowienia

+0

'OlBusyStatus' jest dla' AppointmentItem.BusyStatus'. –

Odpowiedz

3

UPDATE: Aktualizacja poniższy kod za pomocą przykładowego kodu adaptacją this blog post który będzie działał lepiej w szerszej gamy instalacji programu Outlook (na przykład te, wykorzystując zarówno Exchange i PST lub dostępu wiele skrzynek pocztowych Exchange).

Oto kod, który pracował dla mnie na Outlook 2007, aby ustawić status OOF z zewnętrznego (do 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; 
    } 
} 

Upewnij się, że nie używasz tego kodu jako administrator i Outlook jako nie-administrator - w przeciwnym razie może wystąpić błąd związany z bezpieczeństwem w systemie Vista.

Należy pamiętać, że pojawi się okno dialogowe zabezpieczeń w programie Outlook, aby upewnić się, że użytkownik jest w porządku podczas uzyskiwania dostępu do modelu obiektów programu Outlook. Jest to normalne, gdy model obiektu Outlook jest dostępny z zewnętrznego EXE.

Jeśli jednak uzyskujesz dostęp do modelu obiektowego z dodatku, powyższy kod nie jest w pełni poprawny: zamiast tworzyć nowy obiekt Outlook.Application za pośrednictwem konstruktora, musisz uzyskać odwołanie do zaufanego obiektu Outlook.Application od wewnątrz dodatku w następujący sposób:

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, istnieje duża MSDN article na zabezpieczenie dodatków, które mogą być przydatne, jeśli napotkasz dialogowych zabezpieczeń lub błędów.

+0

wygląda dobrze. Wypróbuję to w biurze w poniedziałek, dzięki już teraz. – Atmocreations

+0

fajne. jedno zastrzeżenie, na które należy zwrócić uwagę: Uważam, że powyższy kod jest wyraźnie specyficzny dla programu Outlook 2007 i wymaga obecności najnowszego CDO (1.21). Jeśli to jest twoja maszyna deweloperska, to nie jest to problem, ale jeśli łączysz ją z aplikacją do zainstalowania na komputerach innych użytkowników, daj mi znać, a ja mogę dodać więcej informacji do mojej odpowiedzi na temat tego, co będziesz robić musieć zrobić. –

+0

To jest wyjątek, który otrzymuję: 'System.UnauthorizedAccessException był nieobsługiwany przez kod użytkownika' na twoim przykładzie i nawet jeśli próbuję' ns.Stores [1] .PropertyAccessor.GetProperty ("http://schemas.microsoft. com/mapi/proptag/0x661D000B ")' – Atmocreations