Código de amostra para executar uma procura paginada com resultados classificados

Use o código de amostra e os gráficos de dados para executar procura paginada com resultados classificados usando os objetos de dados SortControl e PageControl.

As etapas a seguir são cobertas neste fragmento de código de amostra:

  1. Configure as propriedades no SearchControl e a base de procura para executar a procura.
  2. Configure o SortControl para especificar a propriedade com a qual você deseja classificar os resultados. Assegure-se de que a chave de classificação pelo SortControl tenha sido incluída no SearchControl. No código de amostra a seguir, a classificação é feita na chave, sn.
  3. Configure o PageControl para paginar os resultados da procura. É possível definir o tamanho da paginação. No código de amostra a seguir, ele foi configurado como 2.
Nota: Para que o código de mostra execute apenas uma procura paginada ou apenas uma procura classificada, consulte os tópicos Executando uma Procura Paginada e Executando uma Procura Classificada.

Pré-requisito

Assegure-se de ter lido as informações e concluído as etapas descritas no tópico Pré-requisitos de Programação.

Código de Amostra

Inclua o seguinte código de amostra no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.

    /**
     * Cenário de Teste para procurar com controle de página e classificação 
     * Este teste classifica os resultados da procura com base na chave de classificação fornecida.
     * Resultados classificados podem ser paginados aplicando controle de página, e o tamanho da página pode ser configurado 
     * no controle de página para retornar a saída desejada.
     */
    @SuppressWarnings("unchecked")
    public static void testPageSortControl() throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        
        DataObject searchCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, 
                SchemaConstants.WIM_NS_URI, SchemaConstants.DO_SEARCH_CONTROL);
        // Configurar as propriedades que precisam ser recuperadas para entidades
        // como parte da operação de procura
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn"); 
        // Configurar o filtro de procura para procurar entidades que tenham 
        // uid que começa com SalesPerson
        searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "//entities[@xsi:type='PersonAccount' 
                e uid='SalesPerson*']");
        // Incluir a base de procura na qual a procura será executada
        searchCtrl.getList(SchemaConstants.PROP_SEARCH_BASES).add("o=SalesPerson,dc=yourco,dc=com");
        // Incluir o controle de classificação para classificar os resultados
        DataObject sortCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_SORT_CONTROL);
        // Especificar a chave de classificação como “sn” na qual a classificação será executada
        sortCtrl.setString(SchemaConstants.PROP_SORT_LOCALE, "en-US");
        DataObject sortKey  = sortCtrl.createDataObject(SchemaConstants.DO_SORT_KEYS, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_SORT_KEY_TYPE);
        sortKey.setString(SchemaConstants.PROP_PROPERTY_NAME,"sn");
        // Configurar a ordem como ascendente para que os resultados retornados sejam
        // classificados na ordem ascendente
        sortKey.setBoolean(SchemaConstants.PROP_ASCENDING_ORDER, true);
        // Incluir o controle de página para paginar os resultados classificados
        DataObject pageCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_PAGE_CONTROL);
        // Configurar o tamanho da página como dois, para que não mais de 2 resultados sejam retornados por tamanho de página
        pageCtrl.setInt(SchemaConstants.PROP_SIZE, 2);
        boolean first = true;
        byte[] cookie = null;
        DataObject returnDO = null;
        int pageCount = 0;
        while (first || cookie != null) {
            first = false;
            pageCount++;
            if (cookie != null) {
                // Configurar o cookie recuperado do controle de resposta, no PageControl do objeto de dados de entrada
                pageCtrl.setBytes(SchemaConstants.PROP_COOKIE, cookie);
                //Excluir o controle de procura do objeto de dados de entrada para a próxima chamada
                searchCtrl.delete();
            }
            System.out.println("Gráfico de dados de entrada" + printDO(root));
            returnDO = service.search(root);
            System.out.println("Gráfico de dados de saída" + printDO(returnDO));
            List entities = returnDO.getList(SchemaConstants.DO_ENTITIES );
            Map ctrlMap = getControlMap(returnDO);
            // Do mapa de controle, obter o controle de resposta de página
            // e configurar o cookie usando esse
            DataObject responseCtrl = (DataObject)ctrlMap.get(SchemaConstants.DO_PAGE_RESPONSE_CONTROL);
            if (responseCtrl != null) {
                cookie = responseCtrl.getBytes(SchemaConstants.PROP_COOKIE);
            } else {
                cookie = null;
            }
        }    

    /**
     * Obter o ControlMap
     * Método utilitário para criar um mapa de todos os controles
     * disponíveis no DataObject. 
     */
    public static Map getControlMap(DataObject root)
    {
        Map ctrlMap = new HashMap();
        // Obter todos os controles e criar um mapa de tipos de controle
        List controls = root.getList(SchemaConstants.DO_CONTROLS);
        if (controls != null) {
            for (int i = 0; i < controls.size(); i++) {
                DataObject control = (DataObject) controls.get(i);
                String type = control.getType().getName();
                if (ctrlMap.get(type) == null) {
                    ctrlMap.put(type, control);
                }
            }
        }
        return ctrlMap;
    }

Gráficos de Dados de Entrada e Saída

Gráfico de dados de entrada para procura paginada com resultados classificados (primeira chamada):
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:SearchControl" expression="//entities[@xsi:type='PersonAccount' 
        e uid='SalesPerson*']">
      <wim:properties>uid</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:searchBases>o=SalesPerson,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
    <wim:controls xsi:type="wim:SortControl">
      <wim:sortKeys>
        <wim:propertyName>sn</wim:propertyName>
        <wim:ascendingOrder>true</wim:ascendingOrder>
      </wim:sortKeys>
      <wim:locale>en-US</wim:locale>
    </wim:controls>
    <wim:controls xsi:type="wim:PageControl" size="2"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída para procura paginada com resultados classificados:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson1,o=SalesPerson,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="e0db3534-a0ec-4c8b-bfff-a399895a7ca3" 
          uniqueName="uid=SalesPerson1,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson1</wim:uid>
      <wim:sn>SalesPerson1sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com"
          repositoryId="ldapRepo" uniqueId="7130a46b-d896-4bdd-8f2c-04d9374908c6" 
          uniqueName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson2</wim:uid>
      <wim:sn>SalesPerson2sn</wim:sn>
    </wim:entities>
    <wim:controls xsi:type="wim:PageResponseControl" 
        cookie="57494D53656172636843616368654E616D6574696D653A31323938333535393336343933"
        totalSize="3"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para procura paginada com resultados classificados (segunda chamada):
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:SortControl">
      <wim:sortKeys>
        <wim:propertyName>sn</wim:propertyName>
        <wim:ascendingOrder>true</wim:ascendingOrder>
      </wim:sortKeys>
      <wim:locale>en-US</wim:locale>
    </wim:controls>
    <wim:controls xsi:type="wim:PageControl" 
        cookie="57494D53656172636843616368654E616D6574696D653A31323938333535393336343933"
        size="2"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída para procura paginada com resultados classificados:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson3,o=SalesPerson,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="f3fe184d-e51a-4d02-a5c2-4e2e79e79fea" 
          uniqueName="uid=SalesPerson3,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson3</wim:uid>
      <wim:sn>SalesPerson3sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Termos de uso | Feedback