Exécution d'une recherche triée

La méthode search(DataObject) et la commande SortControl DataObject permettent d'indiquer l'ordre des éléments retournés au cours d'une recherche.

Pourquoi et quand exécuter cette tâche

La fonction de recherche de virtual member manager retourne un ensemble d'entités qui répondent à l'expression de recherche. La fonction SortControl permet d'indiquer si les résultats sont retournés par ordre croissant ou décroissant. Dans cet exemple, la clé de tri cn est transmise par la fonction SortControl. L'ordre de tri est défini sur décroissant (par défaut, la valeur est définie sur croissant). Le paramètre de lieu est défini sur anglais, en. Les résultats de la recherche sont triés par l'attribut cn d'une personne.
Remarque : La clé de tri cn est incluse dans la liste des propriétés de la fonction SearchControl. Cette action est obligatoire pour une recherche triée. Les clés de tri doivent faire partie des attributs retournés par l'opération de recherche.
Pour utiliser la fonction de recherche triée, ajoutez le code exemple suivant à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser pour cette recherche :
DataObject root = SDOHelper.createRootDataObject();
		
	DataObject searchCtrl = root.createDataObject(DO_CONTROLS, WIM_NS_URI, "SearchControl");
	searchCtrl.getList(PROP_PROPERTIES).add("uid");
	searchCtrl.getList(PROP_PROPERTIES).add("sn"); 
	searchCtrl.getList(PROP_PROPERTIES).add("cn");
	searchCtrl.setString(PROP_SEARCH_EXPRESSION, "//entities[@xsi:type='PersonAccount' and
                       uid='SalesPerson*']");
	searchCtrl.getList(PROP_SEARCH_BASES).add(uNames.get("sales"));
		
	DataObject sortCtrl = root.createDataObject(DO_CONTROLS, WIM_NS_URI, DO_SORT_CONTROL);
	sortCtrl.setString(PROP_SORT_LOCALE, "en-US");
	DataObject sortKey = sortCtrl.createDataObject(DO_SORT_KEYS, WIM_NS_URI, DO_SORT_KEY_TYPE);
	sortKey.setString(PROP_PROPERTY_NAME,"cn");
	sortKey.setBoolean(PROP_ASCENDING_ORDER, false);
		
	DataObject returnDO = service.search(root);

Modèles de graphiques de données d'entrée et de sortie

Pour cet exemple particulier, le graphique de données d'entrée est le suivant :
<?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:properties>cn</wim:properties>
      <wim:searchBases>o=Sales,cn=users,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
    <wim:controls xsi:type="wim:SortControl">
      <wim:sortKeys>
        <wim:propertyName>cn</wim:propertyName>
        <wim:ascendingOrder>false</wim:ascendingOrder>
      </wim:sortKeys>
      <wim:locale>en-US</wim:locale>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Voici un exemple de graphique de données de sortie pour cet exemple :
<?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=SalesPerson4,ou=US,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="a2d1be42-212e-44f0-8396-0bfc2d7d346d" 
                      uniqueName="uid=SalesPerson4,ou=US,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson4</wim:uid>
      <wim:cn>Sales Person4</wim:cn>
      <wim:sn>SalesPerson4Sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson3,ou=US,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="13ae346f-1e4c-40cd-8896-1c7f0b2b3079" 
                      uniqueName="uid=SalesPerson3,ou=US,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson3</wim:uid>
      <wim:cn>Sales Person3</wim:cn>
      <wim:sn>SalesPerson3Sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson2,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="a3f9e8a1-117a-4252-840f-6d0cb079a7fb" 
                      uniqueName="uid=SalesPerson2,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson2</wim:uid>
      <wim:cn>Sales Person2</wim:cn>
      <wim:sn>SalesPerson2Sn</wim:sn>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson1,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"
                      repositoryId="LDAP1" 
                      uniqueId="e7db8c0e-d2b3-43fe-be14-1475125606f4" 
                      uniqueName="uid=SalesPerson1,ou=CA,o=Sales,cn=users,dc=yourco,dc=com"/>
      <wim:uid>SalesPerson1</wim:uid>
      <wim:cn>Sales Person1</wim:cn>
      <wim:sn>SalesPerson1Sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Consultez également la rubrique Exemple de code pour effectuer une recherche paginée avec les résultats triés.



Conditions d'utilisation | Commentaires