Código de amostra para procurar entidades alteradas e excluídas

Use o fragmento de código de amostra e os gráficos de dados para procurar entidades alteradas e excluídas.

As etapas a seguir são cobertas neste cenário de amostra:

  1. Obtenha o ponto de verificação atual para o repositório usando o objeto de dados ChangeResponseControl. Esse ponto de verificação é necessário porque você deve transmiti-lo ao procurar entidades alteradas usando o objeto de dados ChangeControl (etapa 3), de modo que sejam retornadas apenas as entidades alteradas desde esse ponto de verificação.
    Importante: Há dois pré-requisitos quando você usa os objetos de dados ChangeControl e ChangeResponseControl: você deve configurar o valor da propriedade supportChangeLog para o repositório como nativo e ativar o recurso de rastreamento de mudanças no repositório subjacente. Para obter mais informações, consulte o tópico Procurando Entidades Alteradas.
  2. Exclua uma entidade.
  3. Procure entidades alteradas e excluídas especificando CHANGETYPE_ALL como o valor para a propriedade CHANGETYPES. Nesse cenário, a entidade excluída é retornada. Para obter mais informações sobre entidades alteradas, consulte o tópico Procurando Entidades Alteradas. Para obter o código de amostra de ponta a ponta para procurar entidades alteradas, consulte o tópico Código de amostra para procurar entidades alteradas.

Pré-requisito

Assegure-se de ter lido as informações e concluído as etapas descritas no tópico Pré-requisitos de Programação.

As entidades devem existir no repositório antes de executar os métodos fornecidos no código de amostra a seguir.

Código de Amostra

Inclua o seguinte código de amostra no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.

    /**
     *  Este teste exclui uma entidade e depois 
     *  executa uma procura por entidades alteradas
     */
    public static void testScenario() throws Exception
    {
        // Obter o ponto de verificação atual para o repositório
        // Isso é necessário para que possamos fazer atualizações nas entidades
        // ou excluir qualquer entidade, de modo que ela possa ser retransmitida quando 
        // fizermos uma procura para recuperar entidades alteradas ou excluídas desde esse ponto de verificação
        DataObject prevRoot = getCurrentCheckPoint();
        //Excluir a entidade
        deleteEntity("uid=SalesManager2,o=SalesManager,dc=yourco,dc=com");
        // Procurar a entidade alterada
        DataObject searchRoot = searchChangedEntities(prevRoot);
    }
    
     /**
     * deleteEntity para executar uma operação de exclusão
     * @param uniqueName uniqueName da entidade que precisa ser excluída
     * @return DataObject após a operação de exclusão
     * @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);
        // Configurar as propriedades no objeto de dados Controle de Exclusão
        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;
    }
     
    /**
     * Obter o ponto de verificação atual 
     */
    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("Ponto de Verificação: "+ printDO(result));    
        return result;
    }
    
    /**
     *  searchChangedEntities procurar as entidades que foram alteradas 
     *  @param prevRoot DataObject que representa o ponto de verificação anterior
     *  @return DataObject com resultados da procura
     *  @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);
        // Configurar a expressão de procura no objeto de dados de controle
        ctrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccount'");
        // Configurar as propriedades que devem ser recuperadas nos resultados da procura
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        ctrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        // Configurar CHANGETYPE_ALL para procurar entidades alteradas e também excluídas
        ctrl.getList(SchemaConstants.PROP_CHANGETYPES).add(SchemaConstants.CHANGETYPE_ALL);
        SDOHelper.createChangeCtrlFromChangeRespCtrl(root, prevRoot);
        System.out.println("Gráfico de dados de entrada antes de procurar entidades alteradas"+ printDO(root));
        DataObject results = service.search(root);
        System.out.println("Gráfico de dados de saída depois de procurar entidades alteradas"+ printDO(results));
        return results;
    }

Gráficos de Dados de Entrada e Saída

Gráfico de dados de saída depois de recuperar o ponto de verificação:
<?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 dados de entrada para procurar entidades alteradas e excluídas com * (CHANGETYPE_ALL) como o valor para a propriedade 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 dados de saída depois de procurar entidades alteradas e excluídas:
<?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>


Termos de uso | Feedback