Utilisez l'exemple de code et les graphiques de données pour effectuer une recherche paginée avec les résultats triés à l'aide des objets métier SortControl et PageControl.
Les étapes suivantes sont abordées dans cet exemple de fragment de code :
Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation.
Ajoutez l'exemple de code ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.
/**
* Scénario de test pour la recherche avec le contrôle des pages et le contrôle de tri
* Ce test trie les résultats de la recherche en fonction de la clé de tri fournie.
* Les résultats triés peuvent être paginés en appliquant le contrôle des pages et la taille de page peut être définie
* sur le contrôle de page pour renvoyer la sortie souhaitée.
*/
@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);
// Définition des propriétés à extraire pour les entités
// dans le cadre de l'opération de recherche
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
// Définition du filtre de recherche pour rechercher les entités dont
// l'uid commence par SalesPerson
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "//entities[@xsi:type='PersonAccount'
and uid='SalesPerson*']");
// Ajout de la base de recherche dans laquelle la recherche sera effectuée
searchCtrl.getList(SchemaConstants.PROP_SEARCH_BASES).add("o=SalesPerson,dc=yourco,dc=com");
// Ajout du contrôle de tri pour trier les résultats
DataObject sortCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI,
SchemaConstants.DO_SORT_CONTROL);
// Spécification de “sn” comme clé de tri sur laquelle le tri sera effectué
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");
// Définition de l'ordre croissant de sorte que les résultats renvoyés soient
// triés dans l'ordre croissant
sortKey.setBoolean(SchemaConstants.PROP_ASCENDING_ORDER, true);
// Ajout du contrôle des pages pour paginer les résultats triés
DataObject pageCtrl = root.createDataObject(SchemaConstants.DO_CONTROLS, SchemaConstants.WIM_NS_URI,
SchemaConstants.DO_PAGE_CONTROL);
// Spécification d'une taille de page de deux, pour qu'il n'y ait pas plus de deux résultats renvoyés par taille de page
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) {
// Définissez le cookie extrait du contrôle de réponse, sur le contrôle de page de l'objet de données d'entrée
pageCtrl.setBytes(SchemaConstants.PROP_COOKIE, cookie);
//Supprimez le contrôle de recherche de l'objet de données d'entrée pour l'appel suivant
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);
// Dans la mappe de contrôle, extrayez le contrôle de réponse de page
// et définissez le cookie à partir de là
DataObject responseCtrl = (DataObject)ctrlMap.get(SchemaConstants.DO_PAGE_RESPONSE_CONTROL);
if (responseCtrl != null) {
cookie = responseCtrl.getBytes(SchemaConstants.PROP_COOKIE);
} else {
cookie = null;
}
}
/**
* Extraction de la mappe de contrôle
* Méthode d'utilitaire permettant de créer une mappe de tous les contrôles
* disponibles sur le DataObject.
*/
public static Map getControlMap(DataObject root)
{
Map ctrlMap = new HashMap();
// Extraction de tous les contrôles et création d'une mappe des types de contrôle
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>