2009-11-05 27 views
6

Qualcuno sa abilitare/disabilitare a livello di codice lo stato effettivo del risponditore automatico fuori sede in Outlook 2007?Office 2007: controllo programmatico dell'assistente fuori sede?

Già cercato il browser degli oggetti in VS 2008 e trovato l'enumerazione Microsoft.Office.Interop.Outlook.OlBusyStatus ma non ho trovato alcuna classe o altro utilizzando questo.

Qualunque idea è apprezzato, grazie e saluti

+0

'OlBusyStatus' è per' AppointmentItem.BusyStatus'. –

risposta

3

UPDATE: aggiornato il codice di seguito utilizzando il codice di esempio adattato da this blog post che funzionerà meglio in una più ampia varietà di impianti Outlook (ad esempio quelli utilizzando sia Exchange e PST o accedere più cassette postali di Exchange).

Ecco il codice che ha lavorato per me su Outlook 2007, per impostare lo stato Fuori sede da un esterno (per 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; 
    } 
} 

Assicurarsi che non sta eseguendo che il codice come amministratore e Outlook come non amministratore - altrimenti potresti avere un errore relativo alla sicurezza su Vista.

Si noti che verrà visualizzata una finestra di dialogo di sicurezza all'interno di Outlook per garantire all'utente di accedere correttamente al modello di oggetti di Outlook. Questo è normale quando si accede al modello di oggetti di Outlook da un EXE esterno.

Se, tuttavia, si accede al modello di oggetto da un componente aggiuntivo, il codice riportato sopra non è completamente corretto: invece di creare un nuovo oggetto Outlook.Application tramite il costruttore, è necessario ottenere un riferimento all'oggetto Outlook.Application di fiducia da dentro il componente aggiuntivo, in questo modo:

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; 
    } 
} 

a proposito, c'è un buon MSDN article sulla sicurezza per i componenti aggiuntivi, che possono essere utili se si esegue in finestre di dialogo di sicurezza o errori.

+0

sembra buono. Lo proverò in ufficio lunedì, grazie già ora. – Atmocreations

+0

cool. un avvertimento a cui prestare attenzione: credo che il codice sopra sia apparentemente specifico di Outlook 2007 e che sia necessario presentare l'ultimo CDO (1.21 credo). Se questa è la tua macchina dev, allora è un non-problema, ma se stai collegando questo in un'app da installare sui desktop degli altri utenti, fammelo sapere e posso aggiungere più informazioni alla mia risposta su cosa farai bisogno di fare. –

+0

Questa è l'eccezione che sto ricevendo: 'System.UnauthorizedAccessException non è stato gestito dal codice utente' nell'esempio e anche se provo a' ns.Stores [1] .PropertyAccessor.GetProperty ("http://schemas.microsoft. it/mapi/proptag/0x661D000B ")' – Atmocreations

Problemi correlati