Executar pesquisas paginadas usando o EWS no ExchangePerform paged searches by using EWS in Exchange

Descubra como realizar pesquisas paginadas na sua API gerenciada EWS ou no aplicativo EWS direcionado para o Exchange.Find out how to perform paged searches in your EWS Managed API or EWS application that targets Exchange.

A paginação é um recurso no EWS que permite controlar o tamanho dos resultados de uma pesquisa.Paging is a feature in EWS that enables you to control the size of the results of a search. Em vez de recuperar todo o conjunto de resultados em uma resposta do EWS, você pode recuperar conjuntos menores em várias respostas do EWS.Rather than retrieve the entire result set in one EWS response, you can retrieve smaller sets in multiple EWS responses. Por exemplo, considere um usuário com 10.000 mensagens de email na caixa de entrada.For example, consider a user with 10,000 email messages in their Inbox. Teoricamente, você pode recuperar todos os 10.000 emails em uma resposta muito grande, mas pode querer separá-los em fragmentos gerenciados mais facilmente por razões como largura de banda ou desempenho.Hypothetically, you could retrieve all 10,000 emails in one very large response, but you might want to break that up into more manageable chunks for bandwidth or performance reasons. A paginação oferece as ferramentas para fazer exatamente isso.Paging gives you the tools to do just that.

Observação

Embora você possa recuperar, teoricamente, os 10.000 itens em uma única solicitação, na verdade isso não é muito provável devido à limitação do EWS.While you can hypothetically retrieve 10,000 items in one request, in reality, this is unlikely due to EWS throttling. Para saber mais, confira Limitação do EWS no Exchange.To find out more, see EWS throttling in Exchange.

Tabela 1. Parâmetros de paginação na API gerenciada do EWS e no EWSTable 1. Paging parameters in the EWS Managed API and EWS

Para configurar ou recuperar o...To configure or retrieve the… Na API Gerenciada do EWS, use...In the EWS Managed API, use… No EWS, use...In EWS, use…
Número máximo de itens ou pastas em uma respostaMaximum number of items or folders in a response
O parâmetro pageSize para o construtor ItemView ou o construtor FolderViewThe pageSize parameter to the ItemView constructor or the FolderView constructor
OuOr
A propriedade PagedView.PageSizeThe PagedView.PageSize property
O atributo MaxEntriesReturned no elemento IndexedPageItemView ou no elemento IndexedPageFolderViewThe MaxEntriesReturned attribute on the IndexedPageItemView element or the IndexedPageFolderView element
Ponto de partida na lista de itens ou pastasStarting point in the list of items or folders
O parâmetro offsetBasePoint para o construtor ItemView ou o construtor FolderViewThe offsetBasePoint parameter to the ItemView constructor or the FolderView constructor
OuOr
A propriedadePagedView.OffsetBasePointThe PagedView.OffsetBasePoint property
O atributo BasePoint no elemento IndexedPageItemView ou no elemento IndexedPageFolderViewThe BasePoint attribute on the IndexedPageItemView element or the IndexedPageFolderView element
Deslocamento a partir do ponto de partidaOffset from the starting point
O parâmetro offset para o construtor ItemView ou o construtor FolderViewThe offset parameter to the ItemView constructor or the FolderView constructor
OuOr
A propriedadePagedView.OffsetThe PagedView.Offset property
O atributo Offset no elemento IndexedPageItemView ou no elemento IndexedPageFolderViewThe Offset attribute on the IndexedPageItemView element or the IndexedPageFolderView element
Número total de resultados no servidorTotal number of results on the server
A propriedade FindItemsResults.TotalCount ou a propriedade FindFoldersResults.TotalCountThe FindItemsResults.TotalCount property or the FindFoldersResults.TotalCount property
O atributo TotalItemsInView no elemento RootFolder (FindItemResponseMessage) ou o elemento RootFolder (FindFolderResponseMessage)The TotalItemsInView attribute on the RootFolder (FindItemResponseMessage) element or the RootFolder (FindFolderResponseMessage) element
Deslocamento do primeiro item ou pasta não incluída na resposta atualOffset of first item or folder not included in current response
A propriedade FindItemsResults.NextPageOffset ou a propriedade FindFoldersResults.NextPageOffsetThe FindItemsResults.NextPageOffset property or the FindFoldersResults.NextPageOffset property
O atributo IndexedPagingOffset no elemento RootFolderThe IndexedPagingOffset attribute on the RootFolder element
Indicador de que a resposta inclui o último item ou pasta na listaIndicator that response includes the last item or folder in the list
A propriedade FindItemsResults.MoreAvailable ou a propriedade FindFoldersResults.MoreAvailableThe FindItemsResults.MoreAvailable property or the FindFoldersResults.MoreAvailable property
O atributo IncludesLastItemInRange no elemento RootFolderThe IncludesLastItemInRange attribute on the RootFolder element

Como funciona a paginaçãoHow paging works

Para entender como funciona a paginação, é útil imaginá-las em uma pasta como painéis alinhados lado a lado em um espaço fora da sua casa.To understand how paging works, it's helpful to visualize the messages in a folder as billboards lined up side by side in a field outside your house. Você pode ver alguns desses painéis por meio de uma janela mágica.You can see some of these billboards through a magical window. Você tem a capacidade de alterar o tamanho da janela (para ver mais ou menos painéis por vez) e para mover a janela (para controlar quais painéis você pode ver).You have the ability to change the size of the window (to see more or fewer billboards at once) and to move the window (to control which billboards you can see). Essa manipulação da janela é paginação.This manipulation of the window is paging.

Ao enviar a solicitação para o servidor Exchange, você especifica o tamanho da janela em termos de número de itens a ser retornado.When you send your request to the Exchange server, you specify the size of your window in terms of how many items to return. Defina a posição da janela especificando um ponto inicial (o início da linha ou o fim da linha) e um deslocamento desse ponto inicial, expresso em um número de itens.You set the position of the window by specifying a starting point (either the beginning of the line or the end of the line) and an offset from that starting point, expressed in a number of items. O início da janela é o número de itens especificado pelo deslocamento do ponto de partida.The beginning of the window is the number of items specified by the offset from the starting point.

A paginação fica um pouco mais interessante na resposta do servidor, e como seu aplicativo pode usar essa resposta para modelar a próxima solicitação.Where paging gets a bit more interesting is in the server's response, and how your application can use that response to shape its next request. O servidor oferece três informações que você pode usar para determinar como configurar sua "janela" para a próxima solicitação:The server gives you three pieces of information that you can use to determine how to configure your "window" for your next request:

  • Se os resultados na resposta incluem o último item no conjunto de resultados geral no servidor.Whether the results in the response include the last item in the overall result set on the server.

  • O número total de itens no resultado definido no servidor.The total number of items in the result set on the server.

  • Qual o próximo valor de deslocamento deve ser, se você quiser avançar a janela para o próximo item no conjunto de resultados que não está incluído na resposta atual.What the next offset value should be, if you want to advance your window to the next item in the result set that isn't included in the current response.

Vejamos um exemplo simples.Let's look at a simple example. Imagine uma caixa de entrada com 15 mensagens.Imagine an Inbox with 15 messages in it. O aplicativo envia uma solicitação inicial para recuperar um máximo de dez itens, começando no início da lista de mensagens (portanto, o deslocamento é zero).Your application sends an initial request to retrieve a maximum of 10 items, starting at the beginning of the list of messages (so the offset is zero). O servidor responde com as dez primeiras mensagens e indica que a resposta não inclui o último item, que há um total de 15 itens e que o próximo deslocamento deve ser dez.The server responds with the first 10 messages, and indicates that the response does not include the last item, that there are a total of 15 items, and that the next offset should be 10.

Figura 1. Solicitar dez itens com deslocamento zero desde o início de uma lista de 15 itensFigure 1. Requesting 10 items at offset 0 from the beginning of a list of 15 items

Um diagrama mostrando os resultados da solicitação de dez itens com deslocamento zero no início de uma lista de 15 itens.

Em seguida, o aplicativo reenvia a mesma solicitação para o servidor, com a única alteração sendo o deslocamento para dez.Your application then resends the same request to the server, with the only change being that the offset is now 10. O servidor retorna os últimos cinco itens e indica que a resposta inclui o último item, que há um total de 15 itens e que o próximo deslocamento deve ser 15 (no entanto, você chegou ao fim, por isso, não haverá um deslocamento próximo).The server returns the last five items, and indicates that the response does include the last item, that there are a total of 15 items, and that the next offset should be 15 (though of course, you've reached the end, so there won't be a next offset.)

Figura 2. Solicitar dez itens com deslocamento dez desde o início de uma lista de 15 itensFigure 2. Requesting 10 items at offset 10 from the beginning of a list of 15 items

Um diagrama mostrando os resultados da solicitação de dez itens com deslocamento dez no início de uma lista de 15 itens.

Considerações de design para paginaçãoDesign considerations for paging

Aproveitar ao máximo a paginação em seu aplicativo exige algumas considerações.Making the most out of paging in your application does require some consideration. Por exemplo, qual é o tamanho da "janela"?For example, how large do you make your "window"? O que fazer se os resultados no servidor mudarem enquanto você estiver movendo a "janela"?What do you do if the results on the server change while you're moving your "window"?

Determinar o tamanho da janelaDetermine the size of your window

Não existe um número único de entradas o qual todos os aplicativos devem usar.There is no "one-size-fits-all" maximum number of entries that all applications should use. Determinar o número ideal para o seu aplicativo depende de vários fatores diferentes.Determining the number that's right for your application depends on several different factors. No entanto, é útil lembrar das seguintes orientações:However, it's helpful to keep the following guidelines in mind:

  • Por padrão, o Exchange limita o número máximo de itens que podem ser retornados em uma única solicitação para 1000.By default, Exchange limits the maximum number of items that can be returned in a single request to 1000.

  • Definir o número máximo de entradas para um número maior resulta em enviar menos solicitações para obter todos os itens, ao custo de ter que esperar mais respostas.Setting the maximum number of entries to a larger number results in having to send fewer requests to get all items, at the cost of having to wait longer for responses.

  • Definir o número máximo de entradas para um número menor resulta em tempos de resposta mais rápidos, ao custo de ter que enviar mais solicitações para obter todos os itens.Setting the maximum number of entries to a smaller number results in quicker response times, at the cost of having to send more requests to get all items.

Processando alterações para o conjunto de resultadosHandling changes to the result set

No exemplo anterior simples nesse artigo, o número de itens na caixa de entrada do usuário permanecia constante.In the simple example earlier in this article, the number of items in the user's Inbox remained constant. No entanto, na realidade, o número de itens em uma caixa de entrada pode ser alterado frequentemente.However, in reality, the number of items in an Inbox can change frequently. Novas mensagens podem chegar e os itens podem ser excluídos ou movidos a qualquer momento.New messages can arrive and items can be deleted or moved at any time. Mas como isso afeta a paginação?But how does this impact paging? Modifiquemos o exemplo anterior de cenário para descobrir.Let's modify the earlier example scenario to find out.

Vamos começar novamente com os 15 itens na caixa de entrada do usuário e enviar a mesma solicitação inicial.We'll start again with the 15 items in the user's Inbox, and send the same initial request. Como antes, o servidor responde com as dez primeiras mensagens e indica que a resposta não inclui o último item, que há um total de 15 itens e que o próximo deslocamento deve ser dez, conforme mostrado na Figura 1.As before, the server responds with the first 10 messages, and indicates that the response does not include the last item, that there are a total of 15 items, and that the next offset should be 10, as shown in Figure 1.

Agora, enquanto o seu aplicativo processa esses dez itens, uma nova mensagem chega na caixa de entrada e é adicionada ao conjunto de resultados no servidor.Now, while your application is processing those 10 items, a new message arrives in the Inbox and is added to the result set on the server. O aplicativo reenvia a mesma solicitação para o servidor (somente com o deslocamento definido como 10).Your application resends the same request to the server (only with the offset set to 10). Desta vez, o servidor recebe seis itens e indica que há um total de 16 itens no conjunto de resultados.This time the server gets back six items, and indicates that there are a total of 16 items in the result set.

Neste ponto, você deve estar se perguntando se esse isso é realmente um problema.At this point you might be wondering if this is even a problem. Afinal, você tem 16 itens nas duas respostas, então por que toda essa preocupação?After all, you got 16 items back over the two responses, so why all the fuss? A resposta depende de onde o novo item será posicionado.The answer depends on where in the list the new item is placed. Se a lista for classificada para que os itens mais antigos (por data/hora de recebimento) sejam os primeiros, não há nenhuma causa para se preocupar com esse cenário.If the list is sorted so that the oldest items (by received date/time) are first, there's no cause for concern in this scenario. O novo item será posicionado no final da lista e será incluído na segunda resposta.The new item will be placed at the end of the list, and will be included in the second response.

Figura 3. Solicitar dez itens com deslocamento dez desde o início de uma lista com 16 itens, com o 16º item na lista sendo novoFigure 3. Requesting 10 items at offset 10 from the beginning of a list of 16 items, with the 16th item in the list being new

Um diagrama mostrando os resultados da solicitação de dez itens com deslocamento dez desde o início de uma lista com 16 itens quando o 16º item tiver sido adicionado ao final da lista.

A história é diferente se a lista for classificada para que os itens mais recentes apareçam primeiro.If the list is sorted so that the newest items are first, it's a different story. Nesse caso, o primeiro item na segunda solicitação seria o último item da solicitação anterior mais os cinco itens restantes dos 15 itens originais.In this case, the first item in the second request would be the last item from the previous request plus the remaining five items from the original 15. Para colocá-lo em termos da nossa janela mágica imaginária, você mudou a posição da janela para 10, mas os próprios painéis também mudaram 1 posição.To put it in terms of our imaginary magical window, you shifted your window's position by 10, but the billboards themselves also shifted by 1.

Figura 4. Solicitar dez itens com deslocamento dez desde o início de uma lista com 16 itens, com o primeiro item da lista sendo novoFigure 4. Requesting 10 items at offset 10 from the beginning of a list of 16 items, with the first item in the list being new

Um diagrama mostrando os resultados da solicitação de dez itens com deslocamento dez desde o início de uma lista de 16 itens quando o 16º item tiver sido adicionado ao início da lista.

Uma maneira de detectar uma alteração nos resultados no servidor é usar o conceito de um item de âncora.One way to detect a change to the results on the server is to use the concept of an anchor item. Um item de âncora é um item adicional na resposta que não é processado juntamente com o restante dos resultados, mas é usado para comparar com os próximos resultados para ver se os itens propriamente ditos foram deslocados.An anchor item is an additional item in your response that is not processed along with the rest of the results, but is used to compare with the next results to see if the items themselves have shifted. Retomando o nosso exemplo, se o aplicativo estiver usando um tamanho de "janela" dez, você, na verdade, define o número máximo de itens a serem retornados para 11.Building again on our simple example, if your application is using a "window" size of 10, you actually set the maximum number of items to return to 11. O aplicativo processa os primeiros dez itens na resposta como de costume.Your application processes the first 10 items in the response as usual. Para o último item, você salva o identificador do item como uma âncora e emite a próxima solicitação com um deslocamento dez.For the last item, you save the item's identifier as an anchor, then issue the next request with an offset of 10. Se os dados não forem alterados, o primeiro item na segunda resposta deve ter um identificador de item que corresponda à âncora.If the data has not changed, the first item in the second response should have an item identifier that matches the anchor. Se os identificadores de item não corresponderem, você saberá que os dados foram removidos ou inseridos nas partes da lista que já se encontravam "paginados".If the item identifiers don't match, you know that the data has been removed or inserted in the parts of the list you have already "paged" over.

Mesmo quando souber que os dados foram alterados, ainda será preciso decidir como reagir.Even when you know that the data has changed, you still need to decide how to react. Não há uma única resposta para essa pergunta.There isn't a one-size-fits-all answer for this question either. Suas ações dependerão da natureza do aplicativo e de quanto será importante capturar todos os itens.Your actions will depend on the nature of your application and how critical it is to capture all items. Você pode ignorá-la completamente, reiniciar o processo do começo ou controlar novamente e tentar detectar onde ocorreu a alteração.You might ignore it altogether, restart the process from the beginning, or back track and try to detect where the change happened.

Exemplo: executar uma pesquisa de paginação usando a API gerenciada do EWSExample: Perform a paged search by using the EWS Managed API

A paginação é compatível com os seguintes métodos da API gerenciada do EWS:Paging is supported by the following EWS Managed API methods:

Se você estiver usando a API gerenciada do EWS, seu aplicativo configurará a paginação com a classe ItemView ou FolderView, e receberá informações do servidor em relação à paginação da classe FindItemsResults ou FindFoldersResults.If you are using the EWS Managed API, your application configures paging with the ItemView or FolderView class and receives information from the server regarding paging from the FindItemsResults or FindFoldersResults class.

O exemplo a seguir recupera todos os itens de uma pasta usando uma pesquisa de paginação que retorna cinco itens em cada resposta.The following example retrieves all the items in a folder using a paged search that returns five items in each response. Ele também recupera um item adicional para servir como uma âncora para detectar alterações nos resultados no servidor.It also retrieves an additional item to serve as an anchor to detect changes to the results on the server.

Este exemplo supõe que o objeto ExchangeService tenha sido inicializado com valores válidos nas propriedades Credentials e URL.This example assumes that the ExchangeService object has been initialized with valid values in the Credentials and Url properties.

using Microsoft.Exchange.WebServices.Data;
static void PageSearchItems(ExchangeService service, WellKnownFolderName folder)
{
    int pageSize = 5;
    int offset = 0;
    // Request one more item than your actual pageSize.
    // This will be used to detect a change to the result
    // set while paging.
    ItemView view = new ItemView(pageSize + 1, offset);
    view.PropertySet = new PropertySet(ItemSchema.Subject);
    view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
    view.Traversal = ItemTraversal.Shallow;
    bool moreItems = true;
    ItemId anchorId = null;
    while (moreItems)
    {
        try
        {
            FindItemsResults<Item> results = service.FindItems(folder, view);
            moreItems = results.MoreAvailable;
            if (moreItems && anchorId != null)
            {
                // Check the first result to make sure it matches
                // the last result (anchor) from the previous page.
                // If it doesn't, that means that something was added
                // or deleted since you started the search.
                if (results.Items.First<Item>().Id != anchorId)
                {
                    Console.WriteLine("The collection has changed while paging. Some results may be missed.");
                }
            }
            if (moreItems)
                view.Offset += pageSize;
                
            anchorId = results.Items.Last<Item>().Id;
            
            // Because you're including an additional item on the end of your results
            // as an anchor, you don't want to display it.
            // Set the number to loop as the smaller value between
            // the number of items in the collection and the page size.
            int displayCount = 0;
            if ((results.MoreAvailable == false && results.Items.Count > pageSize) || (results.Items.Count < pageSize))
            {
                displayCount = results.Items.Count;
            }
            else
            {
                displayCount = pageSize;
            }
            
            for (int i = 0; i < displayCount; i++)
            {
                Item item = results.Items[i];
                Console.WriteLine("Subject: {0}", item.Subject);
                Console.WriteLine("Id: {0}\n", item.Id.ToString());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception while paging results: {0}", ex.Message);
        }
    }
}

Exemplo: executar uma pesquisa de paginação usando o EWSExample: Perform a paged search by using EWS

A paginação é compatível com as seguintes operações do EWS:Paging is supported by the following EWS operations:

Se você estiver usando o EWS, seu aplicativo configura a paginação com o elemento IndexedPageItemView ou IndexedPageFolderView e recebe informações do servidor de paginação do elemento RootFolder (FindItemResponseMessage) ou RootFolder (FindFolderResponseMessage).If you're using EWS, your application configures paging with the IndexedPageItemView element or the IndexedPageFolderView element and receives information from the server regarding paging from the RootFolder (FindItemResponseMessage) element or the RootFolder (FindFolderResponseMessage) element.

Neste exemplo de solicitação, uma solicitação FindItem é enviada para um máximo de seis itens, começando com um deslocamento de zero do início da lista de itens na caixa de entrada do usuário.In this request example, a FindItem request is sent for a maximum of six items, starting at an offset of zero from the beginning of the list of items in the user's Inbox.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Subject" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="6" Offset="0" BasePoint="Beginning" />
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox" />
      </m:ParentFolderIds>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

O servidor retorna esta resposta, a qual contém seis itens.The server returns the following response, which contains six items. A resposta também indica que há um total de oito itens nos resultados no servidor e que o último item na lista de resultados não está presente nesta resposta.The response also indicates that there are a total of eight items in the results on the server, and that the last item in the results list is not present in this response.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="775" MinorBuildNumber="35" Version="V2_4" 
        xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:FindItemResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
        xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="6" TotalItemsInView="8" IncludesLastItemInRange="false">
            <t:Items>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Query</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Update</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Planning resources</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Timeline</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>For your perusal</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>meeting notes</t:Subject>
              </t:Message>
            </t:Items>
          </m:RootFolder>
        </m:FindItemResponseMessage>
      </m:ResponseMessages>
    </m:FindItemResponse>
  </s:Body>
</s:Envelope>

Neste exemplo, a mesma solicitação é enviada, mas desta vez, o atributo Offset é alterado para cinco, o que indica que o servidor deve retornar no máximo seis itens que começam no deslocamento cinco do começo.In this example, the same request is sent, but this time, the Offset attribute is changed to five, which indicates that the server should return at most six items starting at offset five from the beginning.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Subject" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="6" Offset="5" BasePoint="Beginning" />
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox" />
      </m:ParentFolderIds>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

O servidor envia essa resposta, a qual contém três itens.The server sends the following response, which contains three items. A resposta também indica que o total de número de itens nos resultados no servidor ainda é oito, e que o último item na lista de resultados está presente nessa resposta.The response also indicates that the total number of items in the results on the server is still eight, and that the last item in the results list is included in this response.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="775" MinorBuildNumber="35" Version="V2_4" 
        xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns="https://schemas.microsoft.com/exchange/services/2006/types" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:FindItemResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="8" TotalItemsInView="8" IncludesLastItemInRange="true">
            <t:Items>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>meeting notes</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Meeting notes</t:Subject>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>This cat is hilarious!</t:Subject>
              </t:Message>
            </t:Items>
          </m:RootFolder>
        </m:FindItemResponseMessage>
      </m:ResponseMessages>
    </m:FindItemResponse>
  </s:Body>
</s:Envelope>

Confira tambémSee also