Código de ejemplo para buscar entidades modificadas y suprimidas

Utilice el fragmento de código y los gráficos de datos de ejemplo para buscar las entidades modificadas y suprimidas.

En este escenario de ejemplo se incluyen los pasos siguientes:

  1. Obtenga el punto de comprobación actual para el depósito utilizando el objeto de datos ChangeResponseControl. Este punto de comprobación es necesario porque tiene que pasarlo en la búsqueda de entidades modificadas utilizando el objeto de datos ChangeControl (paso 3), para que sólo se devuelvan entidades modificadas desde este punto de comprobación.
    Importante: Existen dos requisitos previos cuando se utilizan los objetos de datos ChangeControl y ChangeResponseControl: debe establecer el valor de la propiedad supportChangeLog para el depósito en native y habilitar la característica de rastreo de cambios en el depósito subyacente. Para obtener más información, consulte el tema Búsqueda de entidades modificadas.
  2. Suprima una entidad.
  3. Busque las entidades modificadas y suprimidas especificando CHANGETYPE_ALL como valor de la propiedad CHANGETYPES. En este escenario, se devuelve la entidad suprimida. Para obtener más información sobre entidades modificadas, consulte el tema Búsqueda de entidades modificadas. Para el código de ejemplo completo para buscar entidades modificadas, consulte el tema Código de ejemplo para buscar entidades modificadas.

Requisitos previos

Asegúrese de leer la información y completar los pasos que se describen en el tema Requisitos previos de programación.

Deben existir entidades en el depósito para poder ejecutar los métodos indicados en el siguiente código de ejemplo.

Código de ejemplo

Añada el código de ejemplo siguiente al código de aplicación y sustituta las variables por los valores reales que desea utilizar.

    /**
     *  Esta prueba suprime una entidad y luego
     *  realiza una búsqueda de entidades modificadas
     */
    public static void testScenario() throws Exception
    {
        // Obtener el punto de comprobación actual para el depósito
        // Es necesario para poder realizar actualizaciones en las entidades
        // o suprimir entidades, para que se pueda devolver cuando realizamos una búsqueda
        // para recuperar entidades modificadas o suprimidas desde este punto de comprobación
        DataObject prevRoot = getCurrentCheckPoint();
        // Suprimir la entidad
        deleteEntity("uid=SalesManager2,o=SalesManager,dc=yourco,dc=com");
        // Buscar la entidad modificada
        DataObject searchRoot = searchChangedEntities(prevRoot);
    }
    
     /**
     * deleteEntity para realizar una operación de supresión
     * @param uniqueName uniqueName de la entidad que debe suprimirse
     * @return DataObject después de la operación de supresión
     * @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);
        // Establecer las propiedades en Delete Control dataObject
        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;
    }
     
    /**
     * Obtener el punto de comprobación actual
     */
    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 buscar la entidades modificadas
     *  @param prevRoot DataObject representa el punto de comprobación anterior
     *  @return DataObject con resultados de búsqueda
     *  @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);
        // Establecer la expresión de búsqueda en el objeto de datos de control
        ctrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount'");
        // Establecer las propiedades que deben recuperarse en los resultados de búsqueda
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        // Establecer CHANGETYPE_ALL para buscar las entidades modificadas y suprimidas
        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;
    }

Gráficos de datos de entrada y salida

Gráfico de datos de salida después de recuperar el punto de comprobación:
<?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>
Gráfico de datos de entrada para buscar las entidades modificadas y suprimidas con * (CHANGETYPE_ALL) como valor de la propiedad 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>
Gráfico de datos de salida después de buscar las entidades modificadas y suprimidas:
<?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>


Condiciones de uso | Comentarios