7

Sto cercando di utilizzare i servizi Web di Exchange per accedere ai dati del calendario, ma non riesco a capire come accedere ai calendari che sono stati condivisi da altri utenti quando non è il loro calendario predefinito. Supponendo che un altro utente della mia azienda abbia creato un calendario condiviso e lo abbia condiviso con me, non riesco nemmeno a trovare la cartella del calendario, figuriamoci a prendere gli elementi al suo interno.EWS: accesso ai calendari condivisi

Le risposte possono essere in termini di API gestita EWS (versione 1.0 o 1.1), oggetti di servizio direttamente o anche solo il corpo XML del messaggio SOAP che deve essere inviato al server. Ho solo bisogno di un qualche tipo di punto di partenza. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

3

Questo è piuttosto complicato, perché è necessario il FolderId della cartella in questione. Oltre all'accesso alla cartella del calendario, è necessario accedere in lettura alla cartella principale della casella di posta. Ciò consente di eseguire un'operazione FindFolder per recuperare tale id.

+4

Non vedo perché sarebbe necessario. Dimenticando EWS, se non ho accesso in lettura alla cartella principale di un altro dipendente, ma creano una cartella condivisa e la condividono con me tramite Outlook, posso vederla. Condividono automaticamente la cartella mi danno accesso in lettura alla loro cartella principale? In caso contrario, perché Outlook potrebbe visualizzare il calendario condiviso ma non EWS? –

7

Ecco come sono riuscito a farlo:

Dim _cal As New Microsoft.Exchange.WebServices.Data.FolderId(Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Calendar, New Microsoft.Exchange.WebServices.Data.Mailbox(_otherAddress)) 
Dim _calendarView As New Microsoft.Exchange.WebServices.Data.CalendarView(_startTime.Date, _endTime.Date.AddDays(1)) 

For Each appointmentItem As Microsoft.Exchange.WebServices.Data.Appointment In _ 
    service.FindAppointments(_ 
    _cal, _ 
    _calendarView) 
Next 

Nota: questo funziona solo per il calendario di default come questo è tutto quello che serviva per le mie esigenze

Modifica: Per i calendari non predefiniti, hanno hai esaminato il metodo ExchangeService.FindFolders, non l'ho provato ma questo potrebbe non richiedere l'accesso alla cartella principale.

+1

Grazie Seph, ma come ho affermato nella mia domanda, ho bisogno di accedere a un calendario non predefinito condiviso. –

+1

Ho modificato la mia risposta per vedere se ciò aiuta, un'altra opzione è quella di far sì che i tuoi utenti abbonino automaticamente i loro calendari condivisi (così sul lato utente dici al server qual è il folderId per questo utente), questo non richiede di avere accesso root alla casella di posta – Seph

+0

Quali autorizzazioni/ruolo ha bisogno l'account ExchangeService.Credentials? – Brent

1

So che sono passati un paio di anni dal post originale, ma solo per aiutare le persone con problemi simili, guarda this.

Utilizza il WellKnownFolderName.PublicFoldersRoot dell'API EWS per accedere alla cartella pubblica e sfoglia la sottocartella richiesta utilizzando FolderId.