Exemple de code pour la recherche à l'aide de bases de recherche

Utilisez l'exemple de code de bout en bout et les graphiques de données pour effectuer des recherches à l'aide de différentes bases de recherche.

Les étapes suivantes sont abordées dans cet exemple de fragment de code :

  1. Créez deux utilisateurs dans une base de recherche et deux autres utilisateurs dans une autre base de recherche.
  2. Définissez des bases de recherche différentes.
  3. Effectuez une recherche dans chacune des bases de recherche et assurez-vous que les entités renvoyées appartiennent aux bases de recherche respectives.

Conditions prérequises

Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation.

Exemple de code

Ajoutez l'exemple de code de bout en bout ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.

/**
 *  testSearchBases Ce test définit différentes bases de recherche
 *  Les résultats des deux recherches renvoient les entités
 *  présentes uniquement dans une base de recherche particulière
 */
public static void testSearchBases() throws Exception
{
    // Créez deux utilisateurs avec les uid SalesPerson1 et SalesPerson2 respectivement 
    // dans la base de recherche o=SalesPerson,dc=yourco,dc=com
    DataObject user1 = addPersonAccount("SalesPerson1", "SalesPerson1cn","SalesPerson1sn", 
            "o=SalesPerson,dc=yourco,dc=com");
    DataObject user2 = addPersonAccount("SalesPerson2", "SalesPerson2cn","SalesPerson2sn", 
            "o=SalesPerson,dc=yourco,dc=com");
    
    // Créez deux utilisateurs avec les uid SalesManager1 et SalesManager2 respectivement 
    // dans la base de recherche o=SalesManager,dc=yourco,dc=com
    DataObject user3 = addPersonAccount("SalesManager1", "SalesManager1cn","SalesManager1sn", 
            "o=SalesManager,dc=yourco,dc=com");
    DataObject user4 = addPersonAccount("SalesManager2", "SalesManager2cn","SalesManager2sn", 
            "o=SalesManager,dc=yourco,dc=com");
    
    // Effectuez maintenant une recherche dans les deux bases de recherche. La sortie doit contenir des utilisateurs appartenant à cette base de recherche
    String searchBase1 = "o=SalesPerson,dc=yourco,dc=com";
    String searchBase2 = "o=SalesManager,dc=yourco,dc=com";  
    
    // Recherche avec searchBase1 défini      
    search(searchBase1);   
    
    // Recherche avec searchBase2 défini    
    search(searchBase2);      
}

/**
 *  addPersonAccount
 *  Ajoute une entité de type PersonAccount
 *  @param valeur uid à définir
 *  @param valeur cn à définir
 *  @param valeur sn à définir
 *  @param valeur parent à définir
 *  @return DataObject
 *  @throws Exception
 */
public static DataObject addPersonAccount(String uid, String cn, String sn, String parent) throws Exception
{
    DataObject root = SDOHelper.createRootDataObject();
    DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_PERSON_ACCOUNT);
    entity.set("uid", uid);
    entity.set("cn", cn);
    entity.set("sn", sn);
    entity.createDataObject(SchemaConstants.DO_PARENT).createDataObject(SchemaConstants.DO_IDENTIFIER)
            .setString(SchemaConstants.PROP_UNIQUE_NAME, parent);
    
    root = service.create(root);  
    return root;
}

/**
 *  Extrait les résultats de la recherche pour la base de recherche définie
 *  @param searchBase Base de recherche à définir sur le contrôle de recherche
 *  @throws Exception
 */
public static void search(String searchBase) throws Exception
{
    DataObject root = SDOHelper.createRootDataObject();
    
    DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, SchemaConstants.DO_SEARCH_CONTROL);
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
    searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("telephoneNumber");
    searchCtrl.getList(SchemaConstants.PROP_SEARCH_BASES).add(searchBase);
    searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount' and uid='*'");
    
    System.out.println("Input datagraph before searching with search base "+ searchBase +" " 
            + printDO(root));
    DataObject searchRoot = service.search(root);
    System.out.println("Output datagraph after searching with search base "+ searchBase +" " 
            + printDO(searchRoot));
}

Graphiques de données d'entrée et de sortie

Graphique de données d'entrée pour la recherche d'utilisateurs dans la base de recherche "o=SalesPerson,dc=yourco,dc=com" :
<?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="@xsi:type='PersonAccount' and uid='*'">
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>telephoneNumber</wim:properties>
      <wim:searchBases>o=SalesPerson,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la recherche d'utilisateurs dans la base de recherche "o=SalesPerson,dc=yourco,dc=com" :
<?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:cn>SalesPerson1cn</wim:cn>
      <wim:sn>SalesPerson1sn</wim:sn>
      <wim:telephoneNumber>11111111</wim:telephoneNumber>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="bc9d1275-a2dc-4348-ae2c-4eabb54ad98a" 
          uniqueName="uid=SalesPerson2,o=SalesPerson,dc=yourco,dc=com"/>
      <wim:cn>SalesPerson2cn</wim:cn>
      <wim:sn>SalesPerson2sn</wim:sn>
      <wim:telephoneNumber>22222222</wim:telephoneNumber>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour la recherche d'utilisateurs dans la base de recherche "o=SalesManager,dc=yourco,dc=com" :
<?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="@xsi:type='PersonAccount' and uid='*'">
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>telephoneNumber</wim:properties>
      <wim:searchBases>o=SalesManager,dc=yourco,dc=com</wim:searchBases>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la recherche d'utilisateurs dans la base de recherche "o=SalesManager,dc=yourco,dc=com" :
<?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=SalesManager1,o=SalesManager,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="b94cc18f-adbb-41aa-a48f-a0e710cd21ed" 
          uniqueName="uid=SalesManager1,o=SalesManager,dc=yourco,dc=com"/>
      <wim:cn>SalesManager1cn</wim:cn>
      <wim:sn>SalesManager1sn</wim:sn>
      <wim:telephoneNumber>11111111</wim:telephoneNumber>
    </wim:entities>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=SalesManager2,o=SalesManager,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="de158d76-f710-44cc-9e21-747baf2f8944" 
          uniqueName="uid=SalesManager2,o=SalesManager,dc=yourco,dc=com"/>
      <wim:cn>SalesManager2cn</wim:cn>
      <wim:sn>SalesManager2sn</wim:sn>
      <wim:telephoneNumber>22222222</wim:telephoneNumber>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Conditions d'utilisation | Commentaires