Obtener los cambios incrementales en los eventos en una vista de calendarioGet incremental changes to events in a calendar view

Al utilizar la consulta delta, es posible obtener eventos nuevos, actualizados o eliminados en un calendario o calendarios específicos, o en una colección definida de eventos (como una vista de calendario) en el calendario.By using delta query, you can get new, updated, or deleted events in a specified calendar(s), or within a defined collection of events (as a calendar view) in the calendar. En este artículo se describe esto último: obtener tales cambios incrementales en los eventos en una vista de calendario.This article describes the latter - getting such incremental changes to events in a calendar view.

Tenga en cuenta la funcionalidad de la primera vez que se realicen cambios incrementales en eventos de calendario no vinculados a un intervalo de fechas de inicio y finalización fijo, solo está disponible actualmente en la versión beta.Note The capability for the former - getting incremental changes to events in a calendar not bound to a fixed start and end date range - is currently available only in the beta version. Para obtener más información, vea función Delta.For more information, see delta function.

Una vista de calendario es una colección de eventos en un intervalo de fecha y hora (.. /me/CalendarView) desde el calendario predeterminado o desde otro calendario específico de un usuario, o desde un calendario de grupo.A calendar view is a collection of events in a date/time range (../me/calendarview) from the default calendar or some other specified calendar of a user, or from a group calendar. Los eventos devueltos pueden incluir instancias únicas, o apariciones y excepciones de una serie periódica.The returned events may include single instances, or occurrences and exceptions of a recurring series. Los datos de delta permiten mantener y sincronizar un almacén local de eventos de un usuario, sin tener que capturar cada vez todo el conjunto de eventos del usuario desde el servidor.The delta data enables you to maintain and synchronize a local store of a user's events, without having to fetch the entire set of the user's events from the server every time.

La consulta de delta admite la sincronización completa que recupera todos los eventos en la vista de calendario especificada y la sincronización incremental que recupera aquellos eventos que cambiaron en la vista de calendario desde la última sincronización. Normalmente, se debería realizar una sincronización completa inicial y, después, obtener los cambios incrementales en la vista de calendario de forma periódica.Delta query supports both full synchronization that retrieves all the events in the specified calendar view, and incremental synchronization that retrieves those events that have changed in the calendar view since the last synchronization. Typically, you would do an initial full synchronization, and subsequently, get incremental changes to that calendar view periodically.

Seguir los cambios de eventos en una vista de calendarioTrack event changes in a calendar view

La consulta de delta para eventos es específica del calendario y el intervalo de fecha y hora que se especifique (por ejemplo, una vista de calendario).Delta query for events in a calendar view is specific to a calendar and date/time range that you specify. Para realizar el seguimiento de los cambios en varios calendarios, necesitará realizar el seguimiento de cada calendario individualmente.To track the changes in multiple calendars, you need to track each calendar individually.

El seguimiento de los cambios de eventos en una vista de calendario normalmente es una ronda de una o varias solicitudes GET con la función delta.Tracking event changes in a calendar view typically is a round of one or more GET requests with the delta function. La solicitud GET inicial es muy similar a la forma en que enumerar uncalendarView, excepto que se incluye la función delta.The initial GET request is very much like the way you list a calendarView, except that you include the delta function. La siguiente es la solicitud GET delta inicial de una vista de calendario en el calendario predeterminado del usuario que ha iniciado sesión:The following is the initial GET delta request of a calendar view in the signed-in user's default calendar:

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

Una solicitud GET con la función delta función devuelve:A GET request with the delta function returns either:

  • Un nextLink (que contiene una dirección URL con una llamada de función delta y un skipToken), oA nextLink (that contains a URL with a delta function call and a skipToken), or
  • Un deltaLink (que contiene una dirección URL con una llamada de función delta y un deltaToken).A deltaLink (that contains a URL with a delta function call and deltaToken).

Estos tokens son tokens de estado que codifican los parámetros refs/remotes/microsoftgraph/master startDateTime y endDateTime, y cualquier otro parámetro de consulta en la solicitud GET de la consulta de delta inicial.These tokens are state tokens which encode the startDateTime and endDateTime parameters, and any other query parameter in your initial delta query GET request. No es necesario que incluya estos parámetros en solicitudes posteriores, ya que se codifican en los tokens.You do not need to include these parameters in subsequent requests as they are encoded in the tokens.

Los tokens de estado son totalmente opacos para el cliente. Para continuar con una ronda de seguimiento de cambios, basta con copiar y aplicar la dirección URL nextLink o deltaLink devuelta desde la última solicitud GET a la siguiente llamada de funcióndelta para la mismo vista de calendario. Un deltaLink devuelto en una respuesta significa que la ronda actual de seguimiento de cambios está completa. Se puede guardar y usar la dirección URL deltaLink cuando se inicia la siguiente ronda.State tokens are completely opaque to the client. To proceed with a round of change tracking, simply copy and apply the nextLink or deltaLink URL returned from the last GET request to the next delta function call for that same calendar view. A deltaLink returned in a response signifies that the current round of change tracking is complete. You can save and use the deltaLink URL when you begin the next round.

Vea el ejemplo siguiente para obtener información sobre cómo usar estas direcciones URL nextLink y deltaLink.See the example below to learn how to use these nextLink and deltaLink URLs.

Usar parámetros de consulta en una consulta de delta para la vista de calendarioUse query parameters in a delta query for calendar view

  • Incluya los parámetros startDateTime y endDateTime para definir un intervalo de fecha y hora para la vista de calendario.Include the startDateTime and endDateTime parameters to define a date/time range for your calendar view.
  • $select no es compatible.$select is not supported.

Encabezado de solicitud opcionalOptional request header

Cada solicitud GET de la consulta delta devuelve una colección de uno o más eventos en la respuesta.Each delta query GET request returns a collection of one or more events in the response. Opcionalmente se puede especificar el encabezado de solicitud, Prefer: odata.maxpagesize={x}, para establecer el número máximo de eventos en una respuesta.You can optionally specify the request header, Prefer: odata.maxpagesize={x}, to set the maximum number of events in a response.

Ejemplo para sincronizar los eventos en una vista de calendarioExample to synchronize events in a calendar view

En el ejemplo siguiente se muestra una serie de tres solicitudes para sincronizar el calendario predeterminado del usuario en un intervalo de tiempo específico. En esa vista de calendario hay cinco eventos.The following example shows a series of 3 requests to synchronize the user's default calendar in a specific time range. There are 5 events in that calendar view.

Para mayor brevedad, las respuestas de ejemplo muestran solo un subconjunto de las propiedades de un evento. En una llamada real, se devuelve la mayoría de las propiedades de evento .For brevity, the sample responses show only a subset of the properties for an event. In an actual call, most event properties are returned.

Vea también lo que hará la siguiente ronda.See also what you'll do in the next round.

Paso 1: solicitud inicial de ejemploStep 1: sample initial request

En este ejemplo, se sincroniza por primera vez la vista de calendario especificada, por lo que la solicitud de sincronización inicial no incluye ningún token de estado.In this example, the specified calendar view in the signed-in user's default calendar is being synchronized for the first time, so the initial sync request does not include any state token. La ronda devolverá todos los eventos de esa vista de calendario.This round will return all the events in that calendar view.

La primera solicitud especifica lo siguiente:The first request specifies the following:

  • Valores de fecha u hora para los parámetros startDateTime y endDateTime.Date/time values for the startDateTime and endDateTime parameters.
  • El encabezado de solicitud opcional, odata.maxpagesize, que devuelve dos eventos a la vez.The optional request header, odata.maxpagesize, returning 2 events at a time.
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

Respuesta inicial de ejemploSample initial response

La respuesta incluye dos eventos y un encabezado de respuesta @odata.nextLink con un skipToken. La dirección URL nextLink indica que hay más eventos para obtener en la vista de calendario.The response includes two events and a @odata.nextLink response header with a skipToken. The nextLink URL indicates there are more events in the calendar view to get.

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.onmicrosoft.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.onmicrosoft.com"
                }
            },
            "id":"AAMkADVxSAAA="
        }
    ]
}

Paso 2: segunda solicitud de ejemploStep 2: sample second request

La segunda solicitud especifica la dirección URL nextLink devuelta de la respuesta anterior. Observe que ya no tiene que especificar los mismos parámetros startDateTime y endDateTime como en la solicitud inicial, dado que el skipToken en la dirección URL nextLink los codifica y los incluye.The second request specifies the nextLink URL returned from the previous response. Notice that it no longer has to specify the same startDateTime and endDateTime parameters as in the initial request, as the skipToken in the nextLink URL encodes and includes them.

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

Segunda respuesta de ejemploSample second response

La segunda respuesta devuelve los dos siguientes eventos próximos en la vista de calendario y otro nextLink, para indicar que hay más eventos para obtener desde la vista de calendario.The second response returns the next 2 events in the calendar view and another nextLink, indicating there are more events to get from the calendar view.

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.onmicrosoft.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.onmicrosoft.com"
                }
            },
            "id":"AAMkADVxUAAA="
        }
    ]
}

Paso 3: tercera solicitud de ejemploStep 3: sample third request

La tercera solicitud continúa usando el último nextLink devuelto desde la última solicitud de sincronización.The third request continues to use the latest nextLink returned from the last sync request.

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

Tercera y última respuesta de ejemploSample third and final response

La tercera respuesta devuelve el único evento restante en la vista de calendario y una dirección URL deltaLink que indica que la sincronización se completó para esta vista de calendario. Guarde y use la dirección URL deltaLink para sincronizar la vista de calendario en la siguiente ronda.The third response returns the only remaining event in the calendar view, and a deltaLink URL which indicates synchronization is complete for this calendar view. Save and use the deltaLink URL to synchronize that calendar view in the next round.

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.onmicrosoft.com"
                }
            },
            "id":"AAMkADj1HuAAA="
        }
    ]
}

La siguiente ronda: primera solicitud de ejemploThe next round: sample first request

Con el deltaLink de la última solicitud de la última ronda, solo se podrán obtener aquellos eventos que cambiaron (que se agregaron, eliminaron o actualizaron) en esa vista de calendario desde entonces. La primera solicitud de la ronda siguiente será similar a la mostrada a continuación, suponiendo que prefiere mantener el mismo tamaño de página máximo en la respuesta:Using the deltaLink from the last request in the last round, you will be able to get only those events that have changed (by being added, deleted, or updated) in that calendar view since then. Your first request in the next round will look like the following, assuming you prefer to keep the same maximum page size in the response:

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

La siguiente ronda: primera respuesta de ejemploThe next round: sample first response

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.onmicrosoft.com"
                }
            },
            "id":"AAMkADj1HvAAA="
        }
    ]
}

Vea tambiénSee also