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:
Assegure-se de ter lido as informações e concluído as etapas descritas no tópico Pré-requisitos de Programação.
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;
}
<?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>
<?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>
<?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>
<?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>