Accedere agli eventi del calendario di un utente tramite Microsoft Graph

Completato

In questa unità si apprenderà come visualizzare gli eventi del calendario di un utente per la settimana successiva. Si apprenderà anche come eseguire query eventi dati per un determinato periodo e usare concetti come selezionare e ordinare per visualizzare le informazioni desiderate.

Decidere quali autorizzazioni sono necessarie per l'app

Tutti i dati esposti da Microsoft Graph sono protetti. L'app deve avere le autorizzazioni appropriate concesse per accedervi. L'autorizzazione necessaria dipende dal tipo di informazioni a cui l'app deve accedere. Ad esempio, per accedere al calendario dell'utente, l'app deve disporre dell'autorizzazione Calendars.Read . L'elenco esatto delle autorizzazioni necessarie per ogni operazione è disponibile nel riferimento all'API di Microsoft Graph.

Se l'app carica diversi tipi di dati, gli utenti devono concedere più autorizzazioni necessarie per accedere a queste informazioni. Nell'app, richiedere solo le autorizzazioni necessarie. In questo modulo l'app richiede l'autorizzazione per leggere inizialmente il nome dell'utente e chiede di leggere il calendario solo quando si seleziona il pulsante per visualizzare gli eventi. Questo modello è denominato consenso dinamico ed è il modo consigliato per richiedere le autorizzazioni. Con il consenso dinamico, gli utenti controllano i dati che condividono con le app utilizzate, riducendo al minimo i rischi per la sicurezza.

Specificare le autorizzazioni necessarie

L'elenco delle autorizzazioni concesse all'app viene inserito direttamente nel token di accesso. Lo standard OAuth le definisce ambiti. Quando l'applicazione usa Microsoft Authentication Library per ottenere il token di accesso, deve includere un elenco di ambiti nella richiesta a Microsoft Entra ID. Ogni operazione in Microsoft Graph ha un proprio elenco di ambiti. Se il token di accesso non ne ha uno, la richiesta viene negata.

L'applicazione di esempio archivia la richiesta corrente di Microsoft Authentication Library in una variabile globale denominata msalRequest. Inizialmente, contiene una matrice vuota di ambiti.

const msalRequest = { scopes: [] };

Ecco la funzione helper utilizzata dall'applicazione di esempio per aggiungere altri ambiti alla richiesta.

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

Quando si chiama Microsoft Graph per recuperare i dati, assicurarsi che le autorizzazioni necessarie vengano incluse chiamando la funzione helper.

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

Recupero degli eventi del calendario di un utente per un determinato periodo di tempo

Per ottenere gli eventi del calendario di un utente da Microsoft Graph, chiamare l'endpoint /me/calendarview come indicato in precedenza. L'endpoint restituisce un elenco di occorrenze e singole istanze di eventi del calendario dal calendario predefinito dell'utente connesso. È possibile chiamare gli endpoint Microsoft Graph usando Microsoft Graph SDK per specificare l'endpoint e il tipo di richiesta da eseguire.

Per visualizzare solo gli eventi del calendario per la settimana successiva, usare la query seguente per passare l'intervallo di tempo per i risultati:

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

In questo caso, dateNow è la data corrente e dateNextWeek rappresenta sette giorni aggiunti alla data corrente per ottenere la finestra di una settimana.

La riduzione al minimo della quantità di dati che Microsoft Graph recupera e trasferisce, consente di migliorare significativamente le prestazioni dell'app. Il metodo select può essere usato per selezionare proprietà specifiche nei risultati che verranno usati dall'app. Le proprietà da restituire vengono passate come elenco separato da virgole a select:

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

Utilizzare il orderby metodo per specificare come ordinare gli elementi nel risultato. Per ordinare in base a più campi, specificare un elenco di campi delimitati da virgole. È anche possibile specificare se ordinare gli elementi in ordine crescente o decrescente aggiungendo la asc parola chiave o desc alla query.

In quest'app i dati vengono ordinati in base al campo Start in ordine crescente. Questo ordine è l'impostazione predefinita se non viene specificata alcuna parola chiave, ad esempio asc o desc :

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

Ecco l'aspetto finale della chiamata di Microsoft Graph.

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