Acceso a los eventos de calendario de un usuario mediante Microsoft Graph

Completado

En esta unidad, aprenderá a mostrar los eventos de calendario de un usuario para la próxima semana. También aprenderá a consultar eventos de datos durante un período determinado y a usar conceptos como seleccionar y ordenar para mostrar la información que quiera.

Decidir qué permisos necesita la aplicación

Todos los datos expuestos por Microsoft Graph están protegidos. La aplicación debe tener los permisos adecuados concedidos para acceder a ella. El permiso necesario depende del tipo de información a la que la aplicación necesita acceder. Por ejemplo, para acceder al calendario del usuario, la aplicación debe tener el permiso Calendars.Read . La lista exacta de los permisos necesarios para cada operación está disponible en la referencia de api de Microsoft Graph.

Si la aplicación carga diferentes tipos de datos, los usuarios deben concederle varios permisos necesarios para acceder a esta información. En la aplicación, solicite solo los permisos que necesite. En este módulo, la aplicación solicita permiso para leer el nombre del usuario inicialmente y le pide que lea su calendario solo cuando seleccione el botón para mostrar los eventos. Este patrón se denomina consentimiento dinámicoy es la manera recomendada de solicitar permisos. Con el consentimiento dinámico, los usuarios controlan los datos que comparten con las aplicaciones que usan, lo que minimiza los riesgos de seguridad.

Obtener los permisos necesarios

La lista de permisos concedidos a la aplicación se integra directamente en el token de acceso. El estándar de OAuth los llama ámbitos. Cuando la aplicación usa la biblioteca de autenticación de Microsoft para obtener el token de acceso, debe incluir una lista de ámbitos en la solicitud a Microsoft Entra ID. Cada operación en Microsoft Graph tiene su propia lista de ámbitos. Si el token de acceso no tiene uno de ellos, se deniega la solicitud.

La aplicación de ejemplo almacena la solicitud actual de la biblioteca de autenticación de Microsoft en una variable global denominada msalRequest. Inicialmente, contiene una matriz vacía de ámbitos.

const msalRequest = { scopes: [] };

Esta es la función auxiliar que usa la aplicación de ejemplo para agregar más ámbitos a la solicitud.

function ensureScope (scope) {
  if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
    msalRequest.scopes.push(scope);
  }
}

Al llamar a Microsoft Graph para recuperar datos, se asegura de que se incluyen los permisos necesarios mediante una llamada a la función auxiliar.

async function getEvents() {
  ensureScope('Calendars.read');
  // ...
}

Recuperar los eventos de calendario de un usuario durante un período de tiempo determinado

Para obtener los eventos de calendario de un usuario de Microsoft Graph, llame al punto de conexión de /me/calendarview como se mencionó anteriormente. Devuelve una lista de repeticiones e instancias únicas de eventos de calendario del calendario predeterminado del usuario que inició sesión. Puede llamar a puntos de conexión de Microsoft Graph mediante el SDK de Microsoft Graph para especificar el punto de conexión y el tipo de solicitud que quiere ejecutar.

Para mostrar solo los eventos de calendario de la próxima semana, use la siguiente consulta para pasar el intervalo de tiempo de los resultados:

graphClient
    .api('/me/calendarview')
    .query(`startDateTime=${dateNow.toISOString()}&endDateTime=${dateNextWeek.toISOString()}`);

Aquí, dateNow es la fecha actual y en dateNextWeek se agregaron días a la fecha actual para obtener la ventana de una semana.

Minimizar la cantidad de datos que Microsoft Graph recupera y transfiere mejora significativamente el rendimiento de la aplicación. El método select se puede usar para seleccionar propiedades específicas en los resultados que usará la aplicación. Las propiedades que se van a devolver se pasan como una lista separada por comas a select:

graphClient
    .api('/me/calendarview')
    .query(` startDateTime=${dateNow.toISOString()}&endDateTime=${dateNextWeek.toISOString()} `)
    .select('subject,start,end');

Use el orderby método para especificar cómo ordenar los elementos en el resultado. Para ordenar según varios campos, especifique una lista de campos separada por comas. También puede especificar si desea ordenar los elementos en orden ascendente o descendente anexando la palabra clave o desc a la asc consulta.

En esta aplicación, los datos se ordenan por el campo Iniciar en orden ascendente. Este orden es el predeterminado si no se especifica ninguna palabra clave, como asc o desc:

graphClient
    .api('/me/calendarview')
    .query(` startDateTime=${dateNow.toISOString()}&endDateTime=${dateNextWeek.toISOString()} `)
    .select('subject,start,end')
    .orderby('Start/DateTime');

Este es el aspecto de la llamada final de Microsoft Graph.

graphClient
    .api('/me/calendarview')
    .query(` startDateTime=${dateNow.toISOString()}&endDateTime=${dateNextWeek.toISOString()} `)
    .select('subject,start,end')
    .orderby('Start/DateTime')
    .get();