Utilice el código de ejemplo y los gráficos de datos para realizar una búsqueda paginada con resultados clasificados utilizando los objetos de datos SortControl y PageControl.
En este fragmento de código de ejemplo se incluyen los pasos siguientes:
Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación.
Añada el código de ejemplo siguiente al código de aplicación y sustituta las variables por los valores reales que desea utilizar.
/**
* Escenario de prueba para buscar con control de página y control de clasificación
* Estas pruebas clasifican los resultados de búsqueda según la clave de clasificación proporcionada.
* Los resultados clasificados se pueden paginar aplicando control de página y puede establecerse
* el tamaño de página en el control de página para devolver la salida deseada.
*/
@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);
// Establezca las propiedades que deben recuperarse para las entidades
// como parte de la operación de búsqueda
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
// Establezca el filtro de búsqueda para buscar entidades que tengan un
// uid que empiece con SalesPerson
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "//entities[@xsi:type='PersonAccount'
and uid='SalesPerson*']");
// Añadir la base de búsqueda en la que se realizará la búsqueda
searchCtrl.getList(SchemaConstants.PROP_SEARCH_BASES).add("o=SalesPerson,dc=yourco,dc=com");
// Añadir el control de clasificación para clasificar los resultados
DataObject sortCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI,
SchemaConstants.DO_SORT_CONTROL);
// Especificar la clave de clasificación como “sn” según la que se realizará la clasificación
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");
// Establecer el orden como ascendente de modo que los resultados devueltos se
// clasifiquen en orden ascendente
sortKey.setBoolean(SchemaConstants.PROP_ASCENDING_ORDER, true);
// Añadir el control de página a los resultados clasificados
DataObject pageCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI,
SchemaConstants.DO_PAGE_CONTROL);
// Establecer el tamaño de página en dos, para que no se devuelvan más de 2 resultados por tamaño 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) {
// Establecer la cookie recuperada del control de respuesta, en PageControl del objeto de datos de entrada
pageCtrl.setBytes(SchemaConstants.PROP_COOKIE, cookie);
//Suprimir el control de búsqueda del objeto de datos de entrada para la llamada siguiente
searchCtrl.delete();
}
System.out.println("Input datagraph" + printDO(root));
returnDO = service.search(root);
System.out.println("Output datagraph" + printDO(returnDO));
List entities = returnDO.getList(SchemaConstants.DO_ENTITIES );
Map ctrlMap = getControlMap(returnDO);
// Desde la correlación de control obtener el control de respuesta de página
// y establecer la cookie utilizándolo
DataObject responseCtrl = (DataObject)ctrlMap.get(SchemaConstants.DO_PAGE_RESPONSE_CONTROL);
if (responseCtrl != null) {
cookie = responseCtrl.getBytes(SchemaConstants.PROP_COOKIE);
} else {
cookie = null;
}
}
/**
* Obtener ControlMap
* Método de programa de utilidad para crear una correlación de todos los controles
* disponible en DataObject.
*/
public static Map getControlMap(DataObject root)
{
Map ctrlMap = new HashMap();
// Obtener todos los controles y crear una correlación de los tipos de control
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'
and 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>