Outlook: lee el calendario de otro usuario

Estoy desarrollando una aplicación para Android basada en Outlook-SDK-Android . La aplicación se comunica con la API REST del calendario de Outlook para recuperar, reservar y eliminar eventos (consulte ejemplos de códigos aquí y aquí ). Ahora necesito leer el calendario de otra persona y me han proporcionado una cuenta de Office365 con acceso de delegado ( nivel de autorización de autor ) para otros usuarios.

He registrado mi aplicación usando la cuenta proporcionada en el nuevo portal . En mi aplicación utilizo el scope ” https://outlook.office.com/Calendars.ReadWrite “. (El scope se utiliza en com.microsoft.aad.adal.AuthenticationContext.acquireToken () para inicializar un cliente de REST de Office para Android OutlookClient, una stack de cliente compartida proporcionada por orc-for-android )

Cuando trato de leer el calendario de otro usuario en el que tengo acceso de delegado, solo recibo una respuesta 403:

{ "error": { "code": "ErrorAccessDenied", "message": "Access is denied. Check credentials and try again." } } 

¿Alguna ayuda?

¿Es una limitación de la API? Si es así, ¿por qué se proporciona la siguiente cadena de invocación del método?

 outlookClient.getUsers() .getById("meetingRoom@company.com") .getCalendarView() 

ACTUALIZAR:

Parece que hay trabajos en progreso que permitirán este escenario, como se informa aquí: API REST de Office 365: acceda a los calendarios de las salas de reuniones

Entonces, si se ha avanzado en esa dirección, ¿puedo alcanzar mi objective sin utilizar una ” aplicación de servicio de administrador “ ? (consulte la API de Office 365 o la API Graph de Azure AD – Obtenga el calendario de Somebody Elses )

¿Puedo usar la autenticación básica como se sugiere aquí ?

La delegación de calendario es una función de Exchange, Graph API y Outlook API no permiten que el usuario acceda al calendario delegado. Actualmente, la solución alternativa podría ser utilizar el EWS. Y aquí hay una muestra para su referencia:

 static void DelegateAccessSearchWithFilter(ExchangeService service, SearchFilter filter) { // Limit the result set to 10 items. ItemView view = new ItemView(10); view.PropertySet = new PropertySet(ItemSchema.Subject, ItemSchema.DateTimeReceived, EmailMessageSchema.IsRead); // Item searches do not support deep traversal. view.Traversal = ItemTraversal.Shallow; // Define the sort order. view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending); try { // Call FindItems to find matching calendar items. // The FindItems parameters must denote the mailbox owner, // mailbox, and Calendar folder. // This method call results in a FindItem call to EWS. FindItemsResults results = service.FindItems( new FolderId(WellKnownFolderName.Calendar, "fx@msdnofficedev.onmicrosoft.com"), filter, view); foreach (Item item in results.Items) { Console.WriteLine("Subject: {0}", item.Subject); Console.WriteLine("Id: {0}", item.Id.ToString()); } } catch (Exception ex) { Console.WriteLine("Exception while enumerating results: { 0}", ex.Message); } } private static void GetDeligateCalendar(string mailAddress, string password) { ExchangeService service = new ExchangeService(); service.Credentials = new WebCredentials(mailAddress, password); service.TraceEnabled = true; service.TraceFlags = TraceFlags.All; service.AutodiscoverUrl(mailAddress, RedirectionUrlValidationCallback); SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(AppointmentSchema.Subject, "Discuss the Calendar REST API")); DelegateAccessSearchWithFilter(service, sf); } 

Y si desea que la API de Outlook y Graph admita esta función, puede intentar ponerse en contacto con el equipo de desarrolladores de Office desde el siguiente enlace:

https://officespdev.uservoice.com/

¡FindMeetingTimes está actualmente en vista previa! Para ver los detalles, use este enlace y luego cámbielo para ver la versión beta del artículo (arriba a la derecha en la columna principal): https://msdn.microsoft.com/en-us/office/office365/api/calendar -rest-operations # Findmeetingtimesprevista

Los detalles a continuación del artículo, pero utilice el enlace para obtener lo último:

Buscar horarios de reuniones (vista previa)

Encuentre sugerencias de tiempo de reunión según la disponibilidad del organizador y del asistente, y las limitaciones de tiempo o ubicación.

Esta operación se encuentra actualmente en la vista previa y está disponible solo en la versión beta.

Todos los escenarios admitidos utilizan la acción FindMeetingTimes. FindMeetingTimes acepta restricciones especificadas como parámetros en el cuerpo de la solicitud y verifica el estado de disponibilidad en los calendarios principales del organizador y los asistentes. La respuesta incluye sugerencias de tiempo de reunión, cada una de las cuales se define como un candidato de MeetingTime, con asistentes que tienen en promedio un nivel de confianza de 50% o más para asistir.