Usar filtros de pesquisa com o EWS no Exchange

Descubra como usar filtros de pesquisa com a API Gerenciada do EWS ou o EWS no Exchange.

Os filtros de pesquisa são a principal ferramenta para expressar critérios de pesquisa em seu aplicativo EWS Managed API ou EWS. Recomendamos que você use filtros de pesquisa, em vez de cadeias de caracteres de consulta, para fazer o seguinte:

  • Pesquise em uma propriedade ou conjunto específico de propriedades.
  • Pesquise usando vários critérios de pesquisa.

Os filtros de pesquisa são sua única opção se você estiver fazendo qualquer um dos seguintes procedimentos:

  • Pesquisando propriedades personalizadas.
  • Executando pesquisas de cadeia de caracteres sensíveis a maiúsculas de minúsculas.
  • Executando pesquisas de cadeia de caracteres de prefixo ou correspondência exata.
  • Executando pesquisas de bitmask.
  • Pesquisar itens que tenham um conjunto de propriedades específico, independentemente do valor.
  • Pesquisando pastas.
  • Criando pastas de pesquisa.

Determinar qual tipo de filtro de pesquisa você precisa

Antes de criar um filtro de pesquisa, primeiro determine qual tipo de filtro você precisa. Os tipos de filtro são implementados como classes descendentes da classe SearchFilter na API Gerenciada do EWS e como elementos filho do elemento Restriction no EWS.

Tabela 1. Tipos de filtros de pesquisa

Tipo de filtro Classe de API Gerenciada do EWS Elemento EWS Descrição
Contém filtro
ContémSubstring
Contém
O melhor tipo de filtro a ser usado para comparações de cadeia de caracteres. Ele permite controlar a confidencialidade dos casos, ignorar o whitespace e definir o modo de contenção.
Filtro bitmask
ExcludesBitmask
Exclui
Permite pesquisar propriedades inteiros como bitmasks e retornar apenas resultados que tenham bits correspondentes ao desconjunto de bits especificado.
Existe filtro
Existe
Existe
Retorna todos os itens que têm a propriedade especificada presente, independentemente do valor.
Filtro de igualdade
IsEqualTo
IsNotEqualTo
IsEqualTo
IsNotEqualTo
Compara o valor da propriedade especificada com um valor constante especificado ou o valor de outra propriedade e retorna todos os itens que têm um valor igual (no caso de um filtro IsEqualTo ) ou um valor não igual (no caso de um filtro IsNotEqualTo ).
Filtro de teste relacional
IsGreaterThan
IsGreaterThanOrEqualTo
IsLessThan
IsLessThanOrEqualTo
IsGreaterThan
IsGreaterThanOrEqualTo
IsLessThan
IsLessThanOrEqualTo
Retorna todos os itens que têm um valor para a propriedade especificada na relação apropriada com um valor constante especificado ou outra propriedade. Por exemplo, um filtro IsGreaterThan retorna todos os itens que têm um valor maior que o valor especificado na propriedade especificada.
Negando filtro
Not
Not
Nega o resultado dos outros filtros.
Filtro composto
SearchFilterCollection
And
Or
Combina vários filtros, permitindo critérios de pesquisa mais complexos.

Contém filtro

Um filtro contém é a melhor opção para pesquisar propriedades de cadeia de caracteres. Com um filtro, você pode controlar aspectos da correspondência de cadeia de caracteres, como a confidencialidade de caso e como o whitespace é tratado, definindo o modo de contenção e o modo de comparação.

Contém filtro na API Gerenciada do EWS

Se você estiver usando a API Gerenciada do EWS, defina o modo de contenção usando a propriedade ContainmentMode da classe ContainsSubstring e defina o modo de comparação usando a propriedade ComparisonMode da classe ContainsSubstring . O exemplo a seguir mostra como criar um filtro de pesquisa que pesquisa o campo de assunto de itens para a substring "notas de reunião". Este exemplo ignora o caso, mas não ignora o whitespace.

// Find all items with a subject that contain the substring
// "meeting notes", regardless of case.
// Matches include:
//   - meeting notes
//   - Meeting Notes
//   - Here are my meeting notes
SearchFilter.ContainsSubstring subjectFilter = new SearchFilter.ContainsSubstring(ItemSchema.Subject,
    "meeting notes", ContainmentMode.Substring, ComparisonMode.IgnoreCase);

Contém filtro no EWS

No EWS, você define o modo de contenção usando o atributo ContainmentMode no elemento Contain e define o modo de comparação usando o atributo ContainmentComparison no elemento Containment . O exemplo a seguir mostra como criar um filtro de pesquisa para pesquisar o campo de assunto de itens para a substring "notas de reunião". Este exemplo ignora o caso, mas não ignora o whitespace.

<t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
  <t:FieldURI FieldURI="item:Subject" />
  <t:Constant Value="meeting notes" />
</t:Contains>

Filtro bitmask

Um filtro bitmask permite pesquisar propriedades inteiros como bitmasks e retornar resultados em que bits específicos não são definidos no valor da propriedade especificada.

Filtro de máscara de bits na API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar um filtro de pesquisa para retornar todos os itens que têm um valor na propriedade personalizada ItemIndex (definida no Exemplo: Localizar itens usando um filtro de pesquisa e a seção API Gerenciada do EWS deste artigo) que não têm o segundo bit (10 em binário) definido.

// Find all items with a value of the custom property that does not
// have the second bit (0010) set.
// Matches include:
//   - Property not set
//   - 1 (0001)
//   - 4 (0100)
//   - 5 (0101)
//   - 8 (1000)
SearchFilter.ExcludesBitmask bit2NotSetFilter = 
    new SearchFilter.ExcludesBitmask(customPropDefinition, 2);

Filtro de máscara de bit no EWS

O exemplo a seguir mostra como usar o EWS para criar um filtro de pesquisa para retornar todos os itens que têm um valor na propriedade personalizada ItemIndex (definida no Exemplo: Localizar itens usando um filtro de pesquisa e a seção API Gerenciada do EWS deste artigo) que não têm o segundo bit (10 em binário) definido.

<t:Excludes>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:Bitmask Value="2" />
</t:Excludes>

Existe filtro

Um filtro existente permite pesquisar itens que tenham uma propriedade específica definida neles, independentemente do valor.

Existe filtro na API Gerenciada do EWS

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens que têm o conjunto de propriedades personalizadas ItemIndex .

// Find all items that have the custom property set.
SearchFilter.Exists customPropSetFilter =
    new SearchFilter.Exists(customPropDefinition);

Existe filtro no EWS

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens que têm o conjunto de propriedades personalizadas ItemIndex .

<t:Exists>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
</t:Exists>

Filtro de igualdade

Os filtros de igualdade permitem pesquisar todos os itens que têm um valor para a propriedade especificada que é igual a um valor específico ou não é igual a um valor específico. O valor a ser comparado pode ser um valor constante ou o valor de outra propriedade em cada item.

Filtro de igualdade na API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar um filtro de pesquisa para retornar todos os itens que não foram lidos.

// Find all items that are not marked as read.
SearchFilter.IsEqualTo unreadFilter =
    new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens que têm um valor na propriedade ItemIndex que não é igual ao tamanho do item.

// Find all items that are marked as read.
SearchFilter.IsNotEqualTo indexNotEqualToSizeFilter =
    new SearchFilter.IsNotEqualTo(customPropDefinition, ItemSchema.Size);

Filtro de igualdade no EWS

O exemplo a seguir mostra como usar o EWS para criar um filtro de pesquisa para retornar todos os itens que não foram lidos.

<t:IsEqualTo>
  <t:FieldURI FieldURI="message:IsRead" />
  <t:FieldURIOrConstant>
    <t:Constant Value="false" />
  </t:FieldURIOrConstant>
</t:IsEqualTo>

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens que têm um valor na propriedade ItemIndex que não é igual ao tamanho do item.

<t:IsNotEqualTo>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:FieldURIOrConstant>
    <t:FieldURI FieldURI="item:Size" />
  </t:FieldURIOrConstant>
</t:IsNotEqualTo>

Filtro de teste relacional

Os filtros de teste relacionais permitem pesquisar todos os itens que têm um valor na propriedade especificada que seja maior que (>), maior ou igual a (=), menor que (><) ou menor ou igual a (<=) um valor especificado. O valor a ser comparado pode ser um valor constante ou o valor de outra propriedade em cada item.

Filtro de teste relacional na API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar filtros de pesquisa para retornar todos os itens com um valor na propriedade ItemIndex que tenha a relação especificada com o valor constante 3.

// Find all items where the custom property value is > 3.
SearchFilter.IsGreaterThan greaterThanFilter =
    new SearchFilter.IsGreaterThan(customPropDefinition, 3);
// Find all items where the custom property value is >= 3.
SearchFilter.IsGreaterThanOrEqualTo greaterThanOrEqualFilter =
    new SearchFilter.IsGreaterThanOrEqualTo(customPropDefinition, ItemSchema.Size);
// Find all items where the custom property value is < 3.
SearchFilter.IsLessThan lessThanFilter =
    new SearchFilter.IsLessThan(customPropDefinition, 3);
// Find all items where the custom property value is <= 3.
SearchFilter.IsLessThanOrEqualTo lessThanOrEqualFilter =
    new SearchFilter.IsLessThanOrEqualTo(customPropDefinition, 3);

Filtro de teste relacional no EWS

O exemplo a seguir mostra como usar o EWS para criar um filtro de pesquisa para retornar todos os itens com um valor na propriedade ItemIndex maior que o valor constante 3.

<t:IsGreaterThan>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:FieldURIOrConstant>
    <t:Constant Value="3" />
  </t:FieldURIOrConstant>
</t:IsGreaterThan>

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens com um valor na propriedade ItemIndex maior ou igual ao valor constante 3.

<t:IsGreaterThanOrEqualTo>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:FieldURIOrConstant>
    <t:Constant Value="3" />
  </t:FieldURIOrConstant>
</t:IsGreaterThanOrEqualTo>

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens com um valor na propriedade ItemIndex menor que o valor constante 3.

<t:IsLessThan>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:FieldURIOrConstant>
    <t:Constant Value="3" />
  </t:FieldURIOrConstant>
</t:IsLessThan>

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens com um valor na propriedade ItemIndex menor ou igual ao valor constante 3.

<t:IsLessThanOrEqualTo>
  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
  <t:FieldURIOrConstant>
    <t:Constant Value="3" />
  </t:FieldURIOrConstant>
</t:IsLessThanOrEqualTo>

Negando filtro

Um filtro de negação permite negar outro filtro e obter os resultados de pesquisa opostos. Enquanto outros filtros retornam resultados que correspondem a critérios específicos, um filtro negando retorna resultados que não correspondem aos critérios especificados pelo filtro ao qual é aplicado.

Negando filtro na API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar um filtro de pesquisa para retornar todos os itens que não têm a substring "notas de reunião" no assunto.

SearchFilter.ContainsSubstring subjectFilter = new SearchFilter.ContainsSubstring(ItemSchema.Subject,
    "meeting notes", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
SearchFilter.Not subjectNotFilter =
    new SearchFilter.Not(subjectFilter);

Negando filtro no EWS

O exemplo a seguir mostra como criar um filtro de pesquisa para retornar todos os itens que não têm a substring "notas de reunião" no assunto.

<t:Not>
  <t:Contains ContainmentMode="ExactPhrase" ContainmentComparison="IgnoreCase">
    <t:FieldURI FieldURI="item:Subject" />
    <t:Constant Value="meeting notes" />
  </t:Contains>
</t:Not>

Filtro composto

Um filtro composto permite combinar vários filtros para criar critérios de pesquisa mais complexos. Você pode combinar critérios usando os operadores lógicos AND ou OR. Dessa forma, você pode realizar pesquisas como "todas as mensagens de Sadie Daniels que contêm 'notas de reunião' no assunto".

Filtro composto na API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar um filtro de pesquisa que retorna todos os itens enviados de Sadie Daniels e contêm "notas de reunião" no assunto.

SearchFilter.ContainsSubstring subjectFilter = new SearchFilter.ContainsSubstring(ItemSchema.Subject,
    "meeting notes", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
EmailAddress manager = new EmailAddress("sadie@contoso.com");
SearchFilter.IsEqualTo fromManagerFilter =
    new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, manager);
SearchFilter.SearchFilterCollection compoundFilter =
    new SearchFilter.SearchFilterCollection(LogicalOperator.And, subjectFilter, fromManagerFilter);

Filtro composto no EWS

O exemplo a seguir mostra como usar o EWS para criar um filtro de pesquisa que retorna todos os itens enviados de Sadie Daniels e contêm "notas de reunião" no assunto.

<t:And>
  <t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
    <t:FieldURI FieldURI="item:Subject" />
    <t:Constant Value="meeting notes" />
  </t:Contains>
  <t:IsEqualTo>
    <t:FieldURI FieldURI="message:Sender" />
    <t:FieldURIOrConstant>
      <t:Constant Value="sadie@fourthcoffee.com" />
    </t:FieldURIOrConstant>
  </t:IsEqualTo>
</t:And>

Exemplo: localizar itens usando um filtro de pesquisa e a API Gerenciada do EWS

Os seguintes métodos de API Gerenciada do EWS usam filtros de pesquisa:

O exemplo a seguir usa o método ExchangeService.FindItems ; no entanto, as mesmas regras e conceitos se aplicam a todos os métodos. Neste exemplo, um método chamado SearchWithFilter é definido. Ele usa um objeto ExchangeService , um objeto WellKnownFolderName e um objeto SearchFilter como parâmetros. Este exemplo supõe que o objeto ExchangeService tenha sido inicializado com valores válidos nas propriedades Credentials e URL. A classe SearchFilter é a classe base para todos os diferentes filtros de pesquisa.

using Microsoft.Exchange.WebServices.Data
private static Guid SearchTestGUID = new Guid("{AA3DF801-4FC7-401F-BBC1-7C93D6498C2E}");
private static ExtendedPropertyDefinition customPropDefinition =
        new ExtendedPropertyDefinition(SearchTestGUID, "ItemIndex", MapiPropertyType.Integer);
static void SearchWithFilter(ExchangeService service, WellKnownFolderName folder, SearchFilter filter)
{
    // Limit the result set to 10 items.
    ItemView view = new ItemView(10);
    view.PropertySet = new PropertySet(ItemSchema.Subject, 
                                       ItemSchema.DateTimeReceived,
                                       EmailMessageSchema.IsRead,
                                       customPropDefinition);
    // Item searches do not support Deep traversal.
    view.Traversal = ItemTraversal.Shallow;
    // Sorting.
    view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
    try
    {
        FindItemsResults<Item> results = service.FindItems(folder, filter, view);
        foreach (Item item in results.Items)
        {
            Console.WriteLine("Subject: {0}", item.Subject);
            Console.WriteLine("Id: {0}", item.Id.ToString());
            if (item.ExtendedProperties.Count > 0 &&
                 item.ExtendedProperties[0].PropertyDefinition == customPropDefinition)
            {
                Console.WriteLine("Search Index: {0}", item.ExtendedProperties[0].Value);
            }
            if (item is EmailMessage)
            {
                EmailMessage message = item as EmailMessage;
                Console.WriteLine("Read: {0}", message.IsRead.ToString());
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception while enumerating results: {0}", ex.Message);
    }
}

Você pode usar essa função com qualquer um dos filtros de pesquisa mostrados nos exemplos deste artigo. Este exemplo usa um filtro composto para retornar todos os itens na caixa de entrada de Sadie Daniels com "notas de reunião" no assunto.

SearchFilter.ContainsSubstring subjectFilter = new SearchFilter.ContainsSubstring(ItemSchema.Subject,
    "meeting notes", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
EmailAddress manager = new EmailAddress("sadie@contoso.com");
SearchFilter.IsEqualTo fromManagerFilter =
    new SearchFilter.IsEqualTo(EmailMessageSchema.Sender, manager);
SearchFilter.SearchFilterCollection compoundFilter =
    new SearchFilter.SearchFilterCollection(LogicalOperator.And, subjectFilter, greaterThanFilter);
SearchWithFilter(service, WellKnownFolderName.Inbox, compoundFilter);

Exemplo: localizar um item usando um filtro de pesquisa e EWS

As seguintes operações EWS usam filtros de pesquisa:

O exemplo a seguir usa a operação FindItem ; no entanto, as mesmas regras e conceitos se aplicam a ambas as operações. Os filtros de pesquisa estão contidos no elemento Restrição em solicitações SOAP. Este exemplo envia uma solicitação SOAP equivalente à pesquisa mostrada no exemplo de API Gerenciada do EWS anterior.

<?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="Exchange2013" />
  </soap:Header>
  <soap:Body>
    <m:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Subject" />
          <t:FieldURI FieldURI="item:DateTimeReceived" />
          <t:FieldURI FieldURI="message:IsRead" />
          <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
      <m:Restriction>
        <t:And>
          <t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
            <t:FieldURI FieldURI="item:Subject" />
            <t:Constant Value="meeting notes" />
          </t:Contains>
          <t:IsEqualTo>
            <t:FieldURI FieldURI="message:Sender" />
            <t:FieldURIOrConstant>
              <t:Constant Value="sadie@contoso.com" />
            </t:FieldURIOrConstant>
          </t:IsEqualTo>
        </t:And>
      </m:Restriction>
      <m:SortOrder>
        <t:FieldOrder Order="Descending">
          <t:FieldURI FieldURI="item:DateTimeReceived" />
        </t:FieldOrder>
      </m:SortOrder>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox" />
      </m:ParentFolderIds>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

O exemplo a seguir mostra a resposta do servidor, incluindo os resultados da pesquisa.

<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="712" MinorBuildNumber="22" Version="V2_3" 
        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="3" TotalItemsInView="3" IncludesLastItemInRange="true">
            <t:Items>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>meeting notes</t:Subject>
                <t:DateTimeReceived>2013-11-20T21:18:51Z</t:DateTimeReceived>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
                  <t:Value>5</t:Value>
                </t:ExtendedProperty>
                <t:IsRead>true</t:IsRead>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Meeting Notes</t:Subject>
                <t:DateTimeReceived>2013-11-20T21:18:51Z</t:DateTimeReceived>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
                  <t:Value>6</t:Value>
                </t:ExtendedProperty>
                <t:IsRead>true</t:IsRead>
              </t:Message>
              <t:Message>
                <t:ItemId Id="AAMkAGM2..." ChangeKey="CQAAABYA..." />
                <t:Subject>Meeting notes</t:Subject>
                <t:DateTimeReceived>2013-11-20T21:18:51Z</t:DateTimeReceived>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertySetId="aa3df801-4fc7-401f-bbc1-7c93d6498c2e" PropertyName="ItemIndex" PropertyType="Integer" />
                  <t:Value>7</t:Value>
                </t:ExtendedProperty>
                <t:IsRead>true</t:IsRead>
              </t:Message>
            </t:Items>
          </m:RootFolder>
        </m:FindItemResponseMessage>
      </m:ResponseMessages>
    </m:FindItemResponse>
  </s:Body>
</s:Envelope>

Próximas etapas

Agora que você está familiarizado com o uso de filtros de pesquisa em pesquisas básicas, você pode passar para técnicas de pesquisa mais avançadas.

Confira também