Obtener los cambios incrementales en los eventos en una vista de calendario
Article
Al utilizar la consulta delta, es posible obtener eventos nuevos, actualizados o eliminados en un calendario específico, o en una colección definida de eventos (como una vista Calendario) en el calendario. En este artículo se describe esto último: obtener tales cambios incrementales en los eventos en una vista Calendario.
Nota:
La funcionalidad de los primeros( obtener cambios incrementales en los eventos de un calendario que no están enlazados a un intervalo fijo de fechas de inicio y finalización) solo está disponible actualmente en la versión beta. Para obtener más información, vea función Delta.
Una vista de calendario es una colección de eventos en un intervalo de fecha y hora (.. /me/calendarView) del calendario predeterminado o de algún otro calendario especificado de un usuario o de un calendario de grupo. Los eventos devueltos pueden incluir instancias únicas, o apariciones y excepciones de una serie periódica. 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.
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 Calendario de forma periódica.
Seguir los cambios de eventos en una vista de calendario
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). Para realizar el seguimiento de los cambios en varios calendarios, necesitará realizar el seguimiento de cada calendario individualmente.
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. La solicitud GET inicial es muy similar a la forma en que enumera una vista Calendario, excepto que se incluye la función delta. La siguiente es la solicitud GET delta inicial de una vista de calendario en el calendario predeterminado del usuario que ha iniciado sesión:
GET /me/calendarView/delta?startDateTime={start_datetime}&endDateTime={end_datetime}
Una solicitud GET con la función delta función devuelve:
Un @odata.nextLink (que contiene una dirección URL con una llamada de función delta y un $skipToken),
Un @odata.deltaLink (que contiene una dirección URL con una llamada de función delta y un $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. No es necesario que incluya estos parámetros en solicitudes posteriores, ya que se codifican en los 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 @odata.nextLink o @odata.deltaLink devuelta desde la última solicitud GET a la siguiente llamada de funcióndelta para la mismo vista de calendario. Un @odata.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 @odata.deltaLink cuando se inicia la siguiente ronda.
Vea el ejemplo para obtener información sobre cómo usar estas direcciones URL @odata.nextLink y @odata.deltaLink.
Usar parámetros de consulta en una consulta de delta para la vista de calendario
Incluya los parámetros startDateTime y endDateTime para definir un intervalo de fecha y hora para la vista de calendario.
$select no es compatible.
Encabezado de solicitud opcional
Cada solicitud GET de la consulta delta devuelve una colección de uno o más eventos en la respuesta. Opcionalmente se puede especificar el encabezado de solicitud, Prefer: odata.maxpagesize={x}, para establecer el número máximo de eventos en una respuesta.
Ejemplo: sincronizar los eventos en una vista Calendario
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.
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 .
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.
La ronda devolverá todos los eventos de esa vista de calendario.
La primera solicitud especifica lo siguiente:
Valores de fecha u hora para los parámetros startDateTime y endDateTime.
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
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.CalendarView.Delta.GetAsDeltaGetResponseAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.StartDateTime = "2016-12-01T00:00:00Z";
requestConfiguration.QueryParameters.EndDateTime = "2016-12-30T00:00:00Z";
requestConfiguration.Headers.Add("Prefer", "odata.maxpagesize=2");
});
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
var result = graphClient.me().calendarView().delta().get(requestConfiguration -> {
requestConfiguration.queryParameters.startDateTime = "2016-12-01T00:00:00Z";
requestConfiguration.queryParameters.endDateTime = "2016-12-30T00:00:00Z";
requestConfiguration.headers.add("Prefer", "odata.maxpagesize=2");
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.calendar_view.delta.delta_request_builder import DeltaRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = DeltaRequestBuilder.DeltaRequestBuilderGetQueryParameters(
start_date_time = "2016-12-01T00:00:00Z",
end_date_time = "2016-12-30T00:00:00Z",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
request_configuration.headers.add("Prefer", "odata.maxpagesize=2")
result = await graph_client.me.calendar_view.delta.get(request_configuration = request_configuration)
La respuesta incluye dos eventos y un encabezado de respuesta @odata.nextLink con un skipToken.
La dirección URL @odata.nextLink indica que hay más eventos para obtener en la vista de calendario.
La segunda solicitud especifica la dirección URL @odata.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 @odata.nextLink los codifica y los incluye.
GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmcCM996atia_s HTTP/1.1
Prefer: odata.maxpagesize=2
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
// Note: The URI string parameter used with WithUrl() can be retrieved using the OdataNextLink or OdataDeltaLink property from a response object
var result = await graphClient.Me.CalendarView.Delta.WithUrl("https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmcCM996atia_s").GetAsDeltaGetResponseAsync((requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "odata.maxpagesize=2");
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
abstractions "github.com/microsoft/kiota-abstractions-go"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
//other-imports
)
headers := abstractions.NewRequestHeaders()
headers.Add("Prefer", "odata.maxpagesize=2")
requestSkiptoken := "R0usmcCM996atia_s"
requestParameters := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetQueryParameters{
Skiptoken: &requestSkiptoken,
}
configuration := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetRequestConfiguration{
Headers: headers,
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
delta, err := graphClient.Me().CalendarView().Delta().GetAsDeltaGetResponse(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder deltaRequestBuilder = new com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder("https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmcCM996atia_s", graphClient.getRequestAdapter());
com.microsoft.graph.users.item.calendarview.delta.DeltaGetResponse result = deltaRequestBuilder.get(requestConfiguration -> {
requestConfiguration.headers.add("Prefer", "odata.maxpagesize=2");
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.calendar_view.delta.delta_request_builder import DeltaRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = DeltaRequestBuilder.DeltaRequestBuilderGetQueryParameters(
skiptoken = "R0usmcCM996atia_s",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
request_configuration.headers.add("Prefer", "odata.maxpagesize=2")
result = await graph_client.me.calendar_view.delta.get(request_configuration = request_configuration)
La segunda respuesta devuelve los dos siguientes eventos próximos en la vista de calendario y otro @odata.nextLink, para indicar que hay más eventos para obtener desde la vista de calendario.
GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmci39OQxqJrxK4 HTTP/1.1
Prefer: odata.maxpagesize=2
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
// Note: The URI string parameter used with WithUrl() can be retrieved using the OdataNextLink or OdataDeltaLink property from a response object
var result = await graphClient.Me.CalendarView.Delta.WithUrl("https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmci39OQxqJrxK4").GetAsDeltaGetResponseAsync((requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "odata.maxpagesize=2");
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
abstractions "github.com/microsoft/kiota-abstractions-go"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
//other-imports
)
headers := abstractions.NewRequestHeaders()
headers.Add("Prefer", "odata.maxpagesize=2")
requestSkiptoken := "R0usmci39OQxqJrxK4"
requestParameters := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetQueryParameters{
Skiptoken: &requestSkiptoken,
}
configuration := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetRequestConfiguration{
Headers: headers,
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
delta, err := graphClient.Me().CalendarView().Delta().GetAsDeltaGetResponse(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder deltaRequestBuilder = new com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder("https://graph.microsoft.com/v1.0/me/calendarView/delta?$skiptoken=R0usmci39OQxqJrxK4", graphClient.getRequestAdapter());
com.microsoft.graph.users.item.calendarview.delta.DeltaGetResponse result = deltaRequestBuilder.get(requestConfiguration -> {
requestConfiguration.headers.add("Prefer", "odata.maxpagesize=2");
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.calendar_view.delta.delta_request_builder import DeltaRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = DeltaRequestBuilder.DeltaRequestBuilderGetQueryParameters(
skiptoken = "R0usmci39OQxqJrxK4",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
request_configuration.headers.add("Prefer", "odata.maxpagesize=2")
result = await graph_client.me.calendar_view.delta.get(request_configuration = request_configuration)
La tercera respuesta devuelve el único evento restante en la vista de calendario y una dirección URL @odata.deltaLink que indica que la sincronización se completó para esta vista de calendario. Guarde y use la dirección URL @odata.deltaLink para sincronizar la vista de calendario en la siguiente ronda.
Con el @odata.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:
GET https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcMDNGg0J1E HTTP/1.1
Prefer: odata.maxpagesize=2
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
// Note: The URI string parameter used with WithUrl() can be retrieved using the OdataNextLink or OdataDeltaLink property from a response object
var result = await graphClient.Me.CalendarView.Delta.WithUrl("https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcMDNGg0J1E").GetAsDeltaGetResponseAsync((requestConfiguration) =>
{
requestConfiguration.Headers.Add("Prefer", "odata.maxpagesize=2");
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
abstractions "github.com/microsoft/kiota-abstractions-go"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
//other-imports
)
headers := abstractions.NewRequestHeaders()
headers.Add("Prefer", "odata.maxpagesize=2")
requestDeltatoken := "R0usmcMDNGg0J1E"
requestParameters := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetQueryParameters{
Deltatoken: &requestDeltatoken,
}
configuration := &graphusers.ItemCalendarViewDeltaWithRequestBuilderGetRequestConfiguration{
Headers: headers,
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
delta, err := graphClient.Me().CalendarView().Delta().GetAsDeltaGetResponse(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder deltaRequestBuilder = new com.microsoft.graph.users.item.calendarview.delta.DeltaRequestBuilder("https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=R0usmcMDNGg0J1E", graphClient.getRequestAdapter());
com.microsoft.graph.users.item.calendarview.delta.DeltaGetResponse result = deltaRequestBuilder.get(requestConfiguration -> {
requestConfiguration.headers.add("Prefer", "odata.maxpagesize=2");
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.calendar_view.delta.delta_request_builder import DeltaRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = DeltaRequestBuilder.DeltaRequestBuilderGetQueryParameters(
deltatoken = "R0usmcMDNGg0J1E",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
request_configuration.headers.add("Prefer", "odata.maxpagesize=2")
result = await graph_client.me.calendar_view.delta.get(request_configuration = request_configuration)