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: