Compartilhar via


Obter as alterações incrementais para os eventos em um modo de exibição de calendário

Ao usar a consulta delta, você pode obter eventos novos, atualizados ou excluídos em um calendário especificado, ou dentro de uma coleção definida de eventos (como um modo de exibição de calendário) no calendário. Este artigo descreve o último: obter essas alterações incrementais nos eventos em um modo de exibição de calendário.

Observação

O recurso para o primeiro , obtendo alterações incrementais em eventos em um calendário não associado a um intervalo de datas de início e término fixos, está disponível atualmente apenas na versão beta. Para saber mais, confira a funçãodelta.

Uma exibição de calendário é uma coleção de eventos em um intervalo de data/hora (.. /me/calendarView) do calendário padrão ou de algum outro calendário especificado de um usuário ou de um calendário de grupo. Os eventos retornados podem incluir instâncias únicas, ou ocorrências e exceções de uma série recorrente. Os dados delta permitem manter e sincronizar o armazenamento local de eventos do usuário, sem ter de buscar todo o conjunto de eventos do usuário no servidor a cada vez que precise deles.

A consulta delta oferece suporte à sincronização completa que recupera todos os eventos no modo de exibição calendário especificado e a sincronização incremental que recupera os eventos ocorridos no modo de exibição de calendário desde a última sincronização. Normalmente, você faria uma sincronização completa inicial, e posteriormente obteria alterações incrementais para esse modo de exibição de calendário periodicamente.

Rastrear alterações de evento em um modo de exibição de calendário

A consulta delta para eventos em um modo de exibição de calendário é específica de um intervalo de calendário e data/hora que você especificar. Para controlar as alterações em vários calendários, você precisa controlar cada calendário individualmente.

O rastreamento de alterações de evento em um modo de exibição de calendário normalmente corresponde a uma série de eventos de uma ou mais solicitações GET com a função delta. A solicitação GET inicial é muito semelhante à maneira como você lista uma calendarView, exceto se você incluir a função delta. A seguir está a solicitação delta GET inicial de um modo de exibição de calendário no calendário padrão do usuário conectado:

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

Uma solicitação GET com a função delta retorna:

  • Uma @odata.nextLink (que contém uma URL com uma chamada de função delta e uma $skipToken) ou
  • Uma @odata.deltaLink (que contém uma URL com uma chamada de função delta e $deltaToken).

Esses tokens são tokens de estado que codificam os parâmetros startDateTime e endDateTime, bem como qualquer outro parâmetro de consulta em sua solicitação GET de consulta delta inicial. Não é necessário incluir esses parâmetros em solicitações subsequentes, uma vez que eles são codificados nos tokens.

Os tokens de estado são completamente opacos para o cliente. Para prosseguir com uma fase de controle de alterações, basta copiar e aplicar a URL @odata.nextLink ou @odata.deltaLink retornada da última solicitação GET para a próxima chamada de função delta do mesmo modo de exibição de calendário. Uma @odata.deltaLink retornada em uma resposta significa que a fase atual do rastreamento de alterações está concluída. Você pode salvar e usar a URL @odata.deltaLink quando começar a próxima fase.

Verifique o exemplo para aprender a usar essas URLs @odata.nextLink e @odata.deltaLink.

Use os parâmetros de consulta de uma consulta delta para a visualização de calendário

  • Inclua os parâmetros startDateTime e endDateTime para definir um intervalo de data/hora para o modo de exibição de calendário.
  • Não há suporte para $select.

Cabeçalhos de solicitação opcionais

Cada solicitação GET de consulta delta retorna um conjunto de um ou mais eventos na resposta. Como alternativa, você pode especificar o cabeçalho de solicitação, Prefer: odata.maxpagesize={x}, para configurar o número máximo de eventos em uma resposta.

Exemplo: sincronização de eventos em um modo de exibição de calendário

O exemplo a seguir mostra uma série de 3 solicitações para sincronizar o calendário de padrão do usuário em um intervalo de tempo específico. Há 5 eventos nesse modo de exibição de calendário.

Para economizar tempo, as respostas de exemplo exibem apenas um subconjunto das propriedades para um evento. Em uma chamada real, a maior parte das propriedades dos eventos são retornadas.

Confira o que você fará na próxima fase.

Passo 1: solicitação inicial de exemplo

Neste exemplo, o modo de exibição de calendário especificado no calendário padrão do usuário conectado está sendo sincronizado pela primeira vez, para que a solicitação de sincronização inicial não inclua nenhum token de estado. Essa rodada mostrará todos os eventos nesse modo de exibição de calendário.

A primeira solicitação especifica o seguinte:

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

Resposta inicial de exemplo

A resposta inclui dois eventos e um @odata.nextLinkcabeçalho de resposta com um skipToken. A URL @odata.nextLink indica que há mais eventos no modo de exibição de calendário a ser obtidos.

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="
        }
    ]
}

Etapa 2: segundo exemplo de solicitação

A segunda solicitação especifica a URL @odata.nextLink retornada na resposta anterior. Observe que não é mais necessário especificar os mesmos parâmetros startDateTime e endDateTime como na solicitação inicial, conforme o skipToken na URL @odata.nextLink os codifica e inclui.

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

Segunda resposta de exemplo

A segunda resposta retorna os 2 próximos eventos no modo de visualização de calendário e outro @odata.nextLink, indicando que há mais eventos a ser obtidos no modo de exibição de calendário.

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="
        }
    ]
}

Etapa 3: terceira solicitação de exemplo

A terceira solicitação continua a usar as últimas @odata.nextLink retornadas da última solicitação de sincronização.

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

Terceira e última resposta de exemplo

A terceira resposta retorna o único evento restante no modo de exibição calendário e uma URL @odata.deltaLink a indicar que a sincronização está concluída para esse modo de exibição de calendário. Salvar e usar a URL @odata.deltaLink para sincronizar esse modo de exibição de calendário na próxima fase.

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="
        }
    ]
}

A próxima fase: primeira solicitação de exemplo

Usando o @odata.deltaLink da última solicitação na última fase, você poderá obter somente os eventos que sofreram alteração (por serem adicionados, excluídos ou atualizados) nesse modo de exibição de calendário desde então. Sua primeira solicitação na próxima fase terá aparência semelhante à seguinte, supondo que você prefira manter o mesmo tamanho máximo de página na resposta:

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

A próxima fase: primeira resposta de exemplo

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="
        }
    ]
}