office365 outlook-restapi

API de Office365: administrador que accede a los eventos de calendario de otros usuarios/salas



outlook-restapi (2)

En la actualidad solo permitimos el acceso al correo, calendario y contactos que pertenecen al usuario autenticado. Entonces, su escenario de un administrador que accede a la conf. El calendario de la sala no es compatible en este momento. Acceso a recursos que pertenecen a otros usuarios, por ejemplo, conf. el calendario de la sala está en nuestra hoja de ruta para ser compatible, pero todavía no tenemos un plazo para compartir con usted

Mientras tanto, tienes dos opciones.

Opción n. ° 1: si puede ejecutar la aplicación en un servidor, puede crear una aplicación de servicio que requiera el consentimiento del administrador, pero que esté autorizada para acceder a cualquier buzón en el inquilino de Office 365. Deberá hacer que su aplicación nativa hable con la aplicación que se ejecuta en el servidor. Vea este blog para más detalles.

Opción # 2: puede usar nuestra API SOAP de servicios web de Exchange para implementar su escenario. Consulte los calendarios compartidos de Office 365 para obtener más detalles sobre esta opción y los enlaces relevantes.

Al responder a esta solicitud: https://outlook.office365.com/api/v1.0/users/[email protected]/events en un navegador, puedo ingresar mi nombre de usuario y contraseña de administrador y obtener Calendar Events para esa sala específica. Sin embargo, cuando intento realizar esta llamada desde una aplicación nativa con el administrador autenticado, obtengo esta respuesta: reason = "La llamada debe acceder al buzón especificado en el token oauth"; error_category = "invalid_grant" ¿Cómo puedo obtener eventos de calendario para un sala específica autenticada como el administrador?


Esta pequeña clase Java PLUG-N-COMPILE-RUN (woo-hoo!) Debería mostrar cómo llegar a un calendario de eventos de usuario de recursos de sala. La API REST de Azure V2.0 actualmente no permite que uno lo haga. Asegúrese de que el usuario de autenticación que se autentica en el servicio de Exchange es un "delegado" en (o del) calendario de usuarios de recursos de sala cuyos eventos desea recuperar. Es posible que su administrador de Exchange / Office365 necesite configurarlo por usted. Tomé la API Java EWS aquí: Índice de /maven2/com/microsoft/ews-java-api/ews-java-api/2.0/ ews-java-api-2.0.jar y el javadoc.jar, que fue una gran referencia . También puede usar Maven, Gradle u otros métodos para integrar la API en su código si va al repositorio de Github: https://github.com/OfficeDev/ews-java-api . La Guía de inicio es ... bueno ... las palabras se me escapan (por una buena razón). Ponlo de esta manera, ¡será mejor que uses un poco tu motor de búsqueda para descubrir cómo hacer otras cosas! Y mirar las clases en el Javadoc me ayudó mucho. Suficiente bla, bla, bla ... Sobre el código: (¡oh, incluí todas las importaciones! Siempre odio cuando obtengo un fragmento de código de muestra y tengo que ir a buscar y picotear las importaciones. Todavía Deje que se enganche a las bibliotecas reales, sin embargo, ¡ya no está en pañales de código, si puede llegar tan lejos! ;-)

package com.on.and.play import java.net.URI; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.text.DateFormat; import java.util.HashMap; import java.util.List; import java.util.Map; import java.text.SimpleDateFormat import microsoft.exchange.webservices.data.core.service.item.Appointment; import microsoft.exchange.webservices.data.core.service.schema.AppointmentSchema; import microsoft.exchange.webservices.data.core.service.folder.CalendarFolder; import microsoft.exchange.webservices.data.search.CalendarView; import microsoft.exchange.webservices.data.credential.ExchangeCredentials; import microsoft.exchange.webservices.data.core.ExchangeService; import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; import microsoft.exchange.webservices.data.search.FindItemsResults; import microsoft.exchange.webservices.data.property.complex.FolderId; import microsoft.exchange.webservices.data.search.FolderView import microsoft.exchange.webservices.data.core.service.schema.FolderSchema import microsoft.exchange.webservices.data.search.FindFoldersResults import microsoft.exchange.webservices.data.search.filter.SearchFilter import microsoft.exchange.webservices.data.core.enumeration.search.FolderTraversal import microsoft.exchange.webservices.data.core.service.item.Item; import microsoft.exchange.webservices.data.core.service.schema.ItemSchema; import microsoft.exchange.webservices.data.property.complex.Mailbox import microsoft.exchange.webservices.data.search.ItemView; import microsoft.exchange.webservices.data.core.PropertySet; import microsoft.exchange.webservices.data.property.definition.PropertyDefinition import microsoft.exchange.webservices.data.credential.WebCredentials; import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName; import microsoft.exchange.webservices.data.core.enumeration.property.BasePropertySet; import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException import java.net.URI; class MyTestService { public List getRoomCalendar() { ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); // replace [email protected] with a real email address that is // a delegate of [email protected]. Your exchange admin may // need to set that up for you. ExchangeCredentials credentials = new WebCredentials("[email protected]", "their_plain_text_password_God_bless_Microsoft"); service.setCredentials(credentials); service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx")); // service.autodiscoverUrl("[email protected]", ); FolderView fv = new FolderView(100); fv.setTraversal(FolderTraversal.Deep); // replace [email protected] with your resource''s email address FolderId confRoomFolderId = new FolderId(WellKnownFolderName.Calendar, new Mailbox("[email protected]")); List apntmtDataList = new ArrayList(); Calendar now = Calendar.getInstance(); Date startDate = Calendar.getInstance().getTime(); now.add(Calendar.DATE, 30); Date endDate = now.getTime(); try { CalendarFolder calendarFolder = CalendarFolder.bind(service, confRoomFolderId); CalendarView cView = new CalendarView(startDate, endDate, 5); cView.setPropertySet(new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End)); // we can set other properties as well depending upon our need. FindItemsResults appointments = calendarFolder.findAppointments(cView); List appList = appointments.getItems(); for (Appointment appointment : appList) { Map appointmentData = new HashMap(); appointmentData = readAppointment(appointment); apntmtDataList.add(appointmentData); } } catch (Exception e) { e.printStackTrace(); } return apntmtDataList; } public Map readAppointment(Appointment appointment) { Map appointmentData = new HashMap(); try { DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") appointmentData.put("appointmentItemId", appointment.getId().toString()); appointmentData.put("appointmentSubject", appointment.getSubject()); appointmentData.put("appointmentStartTime", df.format(appointment.getStart())); appointmentData.put("appointmentEndTime", df.format(appointment.getEnd())); } catch (ServiceLocalException e) { e.printStackTrace(); } return appointmentData; } }