android ms-office office365 outlook-restapi outlook-calendar

android - Outlook: lea el calendario de otro usuario



ms-office office365 (2)

Estoy desarrollando una aplicación para Android basada en Outlook-SDK-Android . La aplicación habla con Outlook Calendar REST API para recuperar, reservar y eliminar eventos (ver ejemplos de código here y here ). Ahora necesito leer el calendario de otra persona y se me ha proporcionado una cuenta de Office365 con acceso delegado ( nivel de permiso de autor ) para otros usuarios.

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

Cuando intento leer el calendario de otro usuario en el que tengo acceso delegado, acabo de recibir 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("[email protected]") .getCalendarView()

ACTUALIZAR:

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

Entonces, si se ha avanzado en esa dirección, ¿puedo lograr mi objetivo sin usar una " aplicación de servicio de administrador " ? (consulte Office 365 API o API de Azure AD Graph - Obtener el calendario de alguien más )

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


¡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#Findmeetingtimespreview

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 en función de la disponibilidad del organizador y del asistente, y las restricciones de tiempo o ubicación

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

Todos los escenarios compatibles utilizan la acción FindMeetingTimes. FindMeetingTimes acepta las 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 MeetingTimeCandidate, y los asistentes tienen en promedio un nivel de confianza de 50% de probabilidad o más de asistir.


La delegación de calendario es una característica de Exchange, la API Graph y la API de Outlook no permiten al usuario acceder al calendario delegado. Actualmente, la solución alternativa podría ser usar 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<Item> results = service.FindItems( new FolderId(WellKnownFolderName.Calendar, "[email protected]"), 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/