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 :
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.
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;
}
<?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>
<?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>
<?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>