Exemple de code pour la recherche des entités modifiées et supprimées

Cet exemple de fragment de code et ces graphiques de données permettent de rechercher les entités modifiées et supprimées.

Les étapes suivantes sont abordées dans cet exemple de scénario :

  1. Extrayez le point de contrôle actuel du référentiel à l'aide de l'objet de données ChangeResponseControl. Ce point de contrôle est nécessaire car vous devez le transmettre lorsque vous recherchez les entités modifiées à l'aide de l'objet données ChangeControl (étape 3), de sorte que seules les entités modifiées depuis ce point de contrôle soient renvoyées.
    Important : Il existe deux conditions lorsque vous utilisez les objets de données ChangeControl et ChangeResponseControl : vous devez affecter à la propriété supportChangeLog du référentiel la valeur native et activer la fonction de suivi des modifications dans le référentiel sous-jacent. Pour plus d'informations, voir la rubrique Recherche des entités modifiées.
  2. Supprimez une entité.
  3. Recherchez les entités modifiées et supprimées en spécifiant la valeur CHANGETYPE_ALL pour la propriété CHANGETYPES. Dans ce scénario, l'entité supprimée est renvoyée. Pour plus d'informations sur les entités modifiées, voir la rubrique Recherche des entités modifiées. Pour un exemple de code de bout en bout pour la recherche des entités modifiées, voir la rubrique Exemple de code pour la recherche d'entités modifiées.

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.

Les entités doivent exister dans le référentiel pour que les méthodes spécifiées dans l'exemple ci-après puissent être exécutées.

Exemple de code

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

    /**
     *  Ce test supprime une entité, puis 
     *  recherche les entités modifiées
     */
    public static void testScenario() throws Exception
    {
        // Extrayez le point de contrôle actuel du référentiel
        // Cela est requis avant toute mise à jour des entités
        // ou suppression d'entités pour qu'il puisse être renvoyé lors d'une 
        // recherche pour extraire les entités modifiées ou supprimées depuis ce point de contrôle
        DataObject prevRoot = getCurrentCheckPoint();
        // Suppression de l'entité
        deleteEntity("uid=SalesManager2,o=SalesManager,dc=yourco,dc=com");
        // Recherchez l'entité modifiée
        DataObject searchRoot = searchChangedEntities(prevRoot);
    }
    
     /**
     * deleteEntity pour effectuer une opération de suppression
     * @param uniqueName Nom unique de l'entité à supprimer
     * @return DataObject après opération de suppression
     * @throws Exception
     */
    public static DataObject deleteEntity(String uniqueName) throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_ENTITY);
        DataObject ctrl = SDOHelper.createControlDataObject(root, null, SchemaConstants.DO_DELETE_CONTROL);
        // Définissez les propriétés lors de la suppression de l'objet de données de contrôle
        ctrl.setBoolean(SchemaConstants.PROP_DELETE_DESCENDANTS, true);
        ctrl.setBoolean(SchemaConstants.PROP_RETURN_DELETED, true);
        entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME, 
                uniqueName);
        root = service.delete(root);
        return root;
    }
     
    /**
     * Extraction du point de contrôle actuel 
     */
    public static DataObject getCurrentCheckPoint() throws Exception 
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject ctrl = SDOHelper.createControlDataObject(root, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_CHANGE_CONTROL);          
        DataObject result = service.search(root);
        System.out.println("Check Point: "+ printDO(result));    
        return result;
    }
    
    /**
     *  searchChangedEntities recherche les entités modifiées 
     * @param prevRoot DataObject qui représente le point de contrôle précédent
     * @return DataObject avec les résultats de la recherche
     *  @throws Exception
     */
    public static DataObject searchChangedEntities(DataObject prevRoot) throws Exception
    {
        DataObject root = SDOHelper.createRootDataObject();
        DataObject ctrl = SDOHelper.createControlDataObject(root, SchemaConstants.WIM_NS_URI, 
                SchemaConstants.DO_CHANGE_CONTROL);
        // Définition de l'expression de recherche sur l'objet de données de contrôle
        ctrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount'");
        // Définissez les propriétés à extraire des résultats de la recherche
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        // Définissez CHANGETYPE_ALL pour rechercher les entités modifiées et supprimées
        ctrl.getList(SchemaConstants.PROP_CHANGETYPES).add(SchemaConstants.CHANGETYPE_ALL);
        SDOHelper.createChangeCtrlFromChangeRespCtrl(root, prevRoot);
        System.out.println("Input datagraph before searching for changed entities"+ printDO(root));
        DataObject results = service.search(root);
        System.out.println("output datagraph after searching changed entities"+ printDO(results));
        return results;
    }

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

Graphique de données de sortie après l'extraction du point de contrôle :
<?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:ChangeResponseControl">
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>59</wim:repositoryCheckPoint>
      </wim:checkPoint>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Graphique de données d'entrée pour la recherche des entités modifiées et supprimées avec * (CHANGETYPE_ALL) comme valeur de la propriété CHANGETYPES :
<?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:ChangeControl" expression="@xsi:type='PersonAccount'">
      <wim:properties>uid</wim:properties>
      <wim:properties>cn</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>59</wim:repositoryCheckPoint>
      </wim:checkPoint>
      <wim:changeTypes>*</wim:changeTypes>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Graphique de données de sortie après la recherche des entités modifiées et supprimées :
<?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>
      <wim:identifier externalName="uid=SalesManager2,o=SalesManager,dc=yourco,dc=com" 
          repositoryId="ldapRepo" uniqueId="de158d76-f710-44cc-9e21-747baf2f8944"/>
      <wim:changeType>delete</wim:changeType>
    </wim:entities>
    <wim:controls xsi:type="wim:ChangeResponseControl">
      <wim:checkPoint>
        <wim:repositoryId>ldapRepo</wim:repositoryId>
        <wim:repositoryCheckPoint>60</wim:repositoryCheckPoint>
      </wim:checkPoint>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>


Conditions d'utilisation | Commentaires