Apporter des modifications incrémentielles aux événements dans l’affichage Calendrier

L’utilisation de la requête Delta vous permet d’obtenir les événements nouveaux, mis à jour ou supprimés dans un calendrier spécifié ou au sein d’une collection d’événements définie (sous forme d’affichage calendrier) dans le calendrier. Cet article décrit l’obtention des modifications incrémentielles apportées aux événements dans un affichage calendrier.

Remarque

La fonctionnalité pour la première( obtention de modifications incrémentielles d’événements dans un calendrier non lié à une plage de dates de début et de fin fixe) est actuellement disponible uniquement dans la version bêta. Pour plus d’informations, voir fonction delta.

Un affichage Calendrier est une collection d’événements dans une plage de date/heure (.. /me/calendarView) à partir du calendrier par défaut ou d’un autre calendrier spécifié d’un utilisateur ou d’un calendrier de groupe. Les événements renvoyés peuvent inclure des instances uniques ou des occurrences et des exceptions de séries périodiques. Les données de la requête delta vous permettent de mettre à jour et de synchroniser une collection locale des événements d’un utilisateur, sans avoir à extraire l’ensemble des événements de l’utilisateur depuis le serveur.

La requête delta s’occupe à la fois de la synchronisation complète qui récupère tous les événements dans l’affichage Calendrier spécifié, et de la synchronisation incrémentielle qui récupère les événements ayant été modifiés dans l’affichage Calendrier depuis la dernière synchronisation. En règle générale, il est préférable d’effectuer une première synchronisation complète, puis d’apporter régulièrement des modifications incrémentielles à cet affichage calendrier et.

Suivi des modifications apportées aux événements dans l’affichage Calendrier

La requête delta pour les événements dans l’affichage Calendrier est spécifique au calendrier et à la plage date/heure indiqués. Pour suivre les modifications apportées dans plusieurs calendriers, vous devez suivre chaque calendrier individuellement.

Le suivi des modifications apportées aux événements dans un affichage Calendrier correspond généralement à une série de requêtes GET envoyées avec la fonction delta. Le processus de la première requête GET ressemble à celui de la requête List calendarView, sauf que vous incluez la fonction delta. Voici la requête GET delta initiale d’un affichage Calendrier dans le calendrier par défaut de l’utilisateur connecté :

GET /me/calendarView/delta?startDateTime={start_datetime}&endDateTime={end_datetime}

Une requête GET avec la fonction delta renvoie, soit :

  • @odata.nextLink (qui contient une URL avec un appel de la fonction delta et un$skipToken), ou
  • @odata.deltaLink (qui contient une URL avec un appel de la fonction delta et un$deltaToken).

Ces jetons d’état codent les paramètres startDateTime et endDateTime, et les autres paramètres de requête inclus dans votre première requête GET effectuée avec la fonction delta. Vous n’avez pas besoin d’inclure ces paramètres dans les requêtes suivantes, car ils sont codés dans les jetons.

Les jetons d’état sont complètement opaques pour le client. Pour réaliser une première série de suivis des modifications, copiez et appliquez l’URL @odata.nextLink ou @odata.deltaLink renvoyée par la dernière requête GET à l’autre appel de la fonction delta pour le même affichage Calendrier. Si @odata.deltaLink est renvoyé, la série de suivis des modifications en cours est terminée. Vous pouvez enregistrer et utiliser l’URL @odata.deltaLink quand vous lancez la série de suivis suivante.

Consultez l’exemple ci-dessous pour savoir comment utiliser les URL @odata.nextLink et @odata.deltaLink.

Utilisation des paramètres de requête dans une requête delta pour l’affichage Calendrier

  • Inclure les paramètres startDateTime et endDateTime pour définir une plage date/heure pour votre affichage Calendrier.
  • $select n’est pas pris en charge.

En-tête de requête facultatif

Chaque requête GET effectuée avec la fonction delta renvoie une collection d’un ou de plusieurs événements dans la réponse. Vous pouvez spécifier l’en-tête de la requête, Prefer: odata.maxpagesize={x}, pour définir le nombre maximal d’événements à inclure dans une réponse.

Exemple pour synchroniser les événements dans un affichage calendrier

L’exemple suivant montre une série de 3 requêtes pour synchroniser le calendrier par défaut de l’utilisateur dans un intervalle de temps spécifique. Il existe 5 événements dans cet affichage Calendrier.

Pour des raisons de concision, les exemples de réponse montrent uniquement un sous-ensemble des propriétés d’un événement. Dans un véritable appel, la plupart des propriétés de l’événement sont renvoyées.

Consultez également les étapes de la deuxième série de suivis.

Étape 1 : exemple de la première requête

Dans cet exemple, l’affichage Calendrier spécifié dans le calendrier par défaut de l’utilisateur connecté est synchronisé pour la première fois. C’est pourquoi la synchronisation initiale ne contient aucun jeton d’état. Cette série renvoie tous les événements figurant dans cet affichage Calendrier.

La première requête comprend les éléments suivants :

  • Valeurs de date/heure des paramètres startDateTime et endDateTime.
  • L’en-tête de requête facultatif, odata.maxpagesize, qui renvoie 2 événements à la fois.
GET https://graph.microsoft.com/v1.0/me/calendarView/delta?startdatetime=2016-12-01T00:00:00Z&enddatetime=2016-12-30T00:00:00Z HTTP/1.1
Prefer: odata.maxpagesize=2

Exemple de première réponse

La réponse comprend deux événements et un en-tête de réponse @odata.nextLink avec un jeton skipToken. L’URL @odata.nextLink indique qu’il est possible de récupérer plusieurs événements de l’affichage Calendrier.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(event)",
    "@odata.nextLink":"https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmcCM996atia_s",
    "value":[
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAAFXcvIQ==\"",
            "subject":"Plan shopping list",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-09T20:30:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-09T22:00:00.0000000",
                "timeZone":"UTC"
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADNVxRAAA="
        },
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAAFXcvIg==\"",
            "subject":"Pick up car",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-10T01:00:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-10T02:00:00.0000000",
                "timeZone":"UTC"
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADVxSAAA="
        }
    ]
}

Étape 2 : exemple de la deuxième requête

La deuxième requête comprend l’URL @odata.nextLink renvoyée par la réponse précédente. Notez qu’il est inutile de repréciser les paramètres startDateTime et endDateTime, puisqu’ils sont codés et inclus par le jeton skipToken présent dans l’URL @odata.nextLink.

GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmcCM996atia_s HTTP/1.1
Prefer: odata.maxpagesize=2

Exemple de deuxième réponse

La deuxième réponse renvoie les 2 événements suivants dans l’affichage Calendrier et une autre URL @odata.nextLink, indiquant qu’il est possible de récupérer d’autres événements dans l’affichage Calendrier.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(event)",
    "@odata.nextLink":"https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmci39OQxqJrxK4",
    "value":[
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAAFXcvIw==\"",
            "subject":"Get food",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-10T19:30:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-10T21:30:00.0000000",
                "timeZone":"UTC"
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADVxTAAA="
        },
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAAFXcvJA==\"",
            "subject":"Prepare food",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-10T22:00:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-11T00:00:00.0000000",
                "timeZone":"UTC"
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADVxUAAA="
        }
    ]
}

Étape 3 : exemple de la troisième requête

La troisième requête continue d’utiliser les dernières URL @odata.nextLink renvoyées par la dernière requête de synchronisation.

GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmci39OQxqJrxK4 HTTP/1.1
Prefer: odata.maxpagesize=2

Exemple de troisième et dernière réponse

La troisième réponse renvoie le dernier événement restant dans l’affichage Calendrier et une URL @odata.deltaLink indiquant que la synchronisation de cet affichage Calendrier est terminée. Enregistrez et utilisez l’URL @odata.deltaLink pour synchroniser cet affichage Calendrier lors de la prochaine série.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(event)",
    "@odata.deltaLink":"https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcMDNGg0J1E",
    "value":[
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAALZu97g==\"",
            "subject":"Rest!",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-12T02:00:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-12T07:30:00.0000000",
                "timeZone":"UTC"
            },
            "location":{
                "displayName":"Home"
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADj1HuAAA="
        }
    ]
}

Deuxième série : exemple de la première requête

En utilisant l’URL @odata.deltaLink renvoyée par la dernière requête de la série précédente, vous pouvez récupérer uniquement les événements qui ont été ajoutés, supprimés ou mis à jour dans cet affichage Calendrier. Voici à quoi ressemblera la première requête de cette deuxième série de suivis, à condition que vous conserviez le même format de page maximal dans la réponse :

GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcMDNGg0J1E HTTP/1.1
Prefer: odata.maxpagesize=2

Deuxième série : exemple de la première réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#Collection(event)",
    "@odata.deltaLink":"https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcFuQtZdtpk4",
    "value":[
        {
            "@odata.type": "#microsoft.graph.event",
            "id": "AAMkADk0MGFkODE3LWE4MmYtNDRhOS04OGQLkRkXbBznTvAADb6ytyAAA=",
            "@removed": {
                "reason": "deleted"
            }
        },
        {
            "@odata.type":"#microsoft.graph.event",
            "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAALZu97w==\"",
            "subject":"Attend service",
            "body":{
                "contentType":"html",
                "content":""
            },
            "start":{
                "dateTime":"2016-12-25T06:00:00.0000000",
                "timeZone":"UTC"
            },
            "end":{
                "dateTime":"2016-12-25T07:30:00.0000000",
                "timeZone":"UTC"
            },
            "location":{
                "displayName":"Chapel of Saint Ignatius",
                "address":{
                    "street":"900 Broadway",
                    "city":"Seattle",
                    "state":"WA",
                    "countryOrRegion":"United States",
                    "postalCode":""
                },
                "coordinates":{
                    "latitude":47.6105,
                    "longitude":-122.321
                }
            },
            "attendees":[

            ],
            "organizer":{
                "emailAddress":{
                    "name":"Samantha Booth",
                    "address":"samanthab@contoso.com"
                }
            },
            "id":"AAMkADj1HvAAA="
        }
    ]
}