Capturar Alterações de Dados com Alterações de Tabela Ou Arquivo
Caso de Uso
Quando outros padrões para captura de dados alterados não são viáveis (Padrão de integração para captura de dados alterados usando consultas baseadas em timestamp, Padrão de integração para captura de dados alterados usando valores de campo de origem, Padrão de integração para captura de dados alterados usando fontes de arquivo, Padrão de integração: Captura de dados de alteração - Tempo real/orientado a eventos), este padrão pode ser aplicado.
Esse padrão se aplica nos casos em que a fonte não possui um carimbo de data/hora, não pode ser alterada para fornecer um campo a ser usado para consultar ou não pode enviar alterações.
Esse padrão assume que os registros de origem e destino podem ser comparados e as diferenças podem ser isoladas. Por exemplo, suponha que uma tabela de clientes em uma origem tenha 150 linhas e a tabela de clientes no destino tenha 100 linhas. O objetivo é determinar as linhas na origem que são Novas (não existem no destino), Diferentes (mesma linha e dados diferentes) e Ausentes (a linha não existe no destino). Se Novo, insira no destino. Se Diferente, atualize a linha no destino. Se ausente, exclua do alvo.
A documentação da função Jitterbit Diff tem explicações detalhadas sobre as diferentes funções Diff: Funções Diff.
Um caso de uso frequente desse padrão é que um processo é necessário para recuperar uma alteração em uma tabela de banco de dados de um período para o próximo.
Aviso
As funções diff podem ser usadas apenas em um único Agente Privado, pois os instantâneos diff não são compartilhados. Não use em um Grupo de Agentes com mais de um agente. Eles não são suportados com Agentes em Nuvem.
Exemplo 1: Comparação de Banco de Dados para Banco de Dados
Neste exemplo, o cliente tem um banco de dados que sustenta um sistema transacional e deseja sincronizar determinados objetos de negócios com um armazenamento de dados externo para fins de auditoria.
Os passos básicos são:
- Inicialize o Diff e adicione registros ao instantâneo no disco. Se esta não for a primeira vez que o processo é executado, isso selecionará os novos registros.
- Passe novos registros para a transformação e atualize o banco de dados de destino.
- Processar as atualizações (alterações desde a última vez que o processo foi executado)
- Passe para a transformação e atualize o banco de dados de destino
- Processar as exclusões
- Passe para a transformação e atualize o banco de dados de destino
A operação Principal conduz várias operações encadeadas, selecionando apenas uma tabela como exemplo.
Ao passar um 'false
'argumento, o RunOperation()
funções (consulte Funções gerais do construtor de fórmulas) será executado de forma assíncrona:
InitializeDiff é chamado e avaliado. Se falhar, ResetDiff será chamado.
DiffKeyList define o identificador exclusivo do registro.
Se esta for a primeira vez que está sendo executado, todos os registros na origem serão adicionados ao instantâneo. Caso contrário, selecionará os novos registros.
Se houver uma falha, a cadeia de operação é cancelada.
Esta é a transformação usada pela operação. Observe que, enquanto houver uma fonte de banco de dados, se a chamada da operação for precedida por uma chamada Diff, a fonte da operação não será usada. Se um DiffUpdate for chamado, então esta operação é chamada e obtemos a saída da função DiffUpdate:
Chama DiffUpdate. Observe o uso de uma tag de variável global para indicar ao destino que tipo de ação foi executada.
Mostrando este script para fins de integridade. O cliente queria armazenar um registro das linhas novas e alteradas, não sincronizar dois armazenamentos de dados. Assim, os processos Diff incorporaram um método de geração de chaves exclusivas que mostrarão as alterações no mesmo registro ao longo do tempo.
Exemplo 2: Comparação Entre Organizações
Este exemplo compara dois objetos Salesforce simultaneamente.
Em geral, as etapas Diff são:
- Limpe o arquivo Diff antigo (ResetDiff). Não estamos acompanhando as mudanças ao longo do tempo. Estamos rastreando as diferenças entre os arquivos de origem e destino a partir deste momento.
- Crie o Diff (InitializeDiff). Isso atribui a ele um nome exclusivo para ser usado como chave para o diretório Diff que será criado no disco do servidor Agente Privado. O nome do objeto é usado como o nome Diff.
- Defina o campo-chave (DiffKeyList). Isso informará ao Diff qual campo na linha é o campo-chave e será usado para comparar linhas específicas no novo arquivo Diff com as linhas no arquivo Diff antigo.
- Preencha o Diff (DiffAdd) da tabela do cliente de destino (neste caso, um arquivo csv criado consultando a tabela do cliente de destino). As linhas da "origem" (neste caso, o arquivo csv criado consultando a tabela do cliente de destino) são lidas no arquivo Diff. O comportamento é diferente se o arquivo Diff estiver vazio, ou seja, se esta for a primeira vez que o Diff é criado.
- Salve o Diff (DiffComplete). Neste ponto, há um instantâneo da tabela do cliente de destino no disco do servidor Agente Privado.
- Iniciar a comparação da origem (neste caso, um arquivo csv criado consultando a tabela de clientes de origem) com o destino (um arquivo csv criado consultando a tabela de clientes de destino), iniciando com a leitura dos registros no arquivo csv de origem (DiffAdd). Portanto, embora estejamos usando a mesma função DiffAdd acima, ela se comporta de maneira diferente, pois existe um arquivo Diff existente. Desta vez, ele compara os dois arquivos e gera as novas linhas com base no campo estabelecido pelo DiffKeyList
- Compare com base nas alterações (DiffUpdate). Diff faz o hash dos registros individuais nos arquivos antigos e novos e identifica os registros alterados com base na mesma chave, mas em hashes diferentes. Isso produzirá as linhas alteradas.
- Salve o Diff (DiffComplete).
- Exclua o Diff (ResetDiff).
Este exemplo tem duas organizações do Salesforce com objetos e campos idênticos. A organização de origem contém dados que devem ser incluídos ou atualizados na organização de destino. Devido ao uso de gatilhos e atualizações, simplesmente consultar a fonte com base em um registro de data e hora do objeto não é viável. Fazer uma cópia completa, consultando toda a fonte e inserindo no destino é um método viável, mas para conjuntos de dados muito grandes pode ser muito demorado. A preferência aqui foi fazer uma migração das diferenças entre as organizações de origem e destino usando o Diff() funções.
Como o Diff só pode funcionar com bancos de dados ou arquivos CSV, as consultas de origem e destino são convertidas nesse formato:
Isso consulta o destino e há uma operação semelhante que consulta a origem.
Observe que a consultar é limitada a dados de negócios, excluindo dados do sistema como LastModifiedDate, que serão diferentes da origem e destino, bem como IDs de registro. Além disso, os cabeçalhos são selecionados conforme necessário para ajudar o usuário a visualizar os dados. O destino de backup é idêntico, exceto para a organização da força de vendas.
Uma fonte de armazenamento temporário é usada, onde uma variável global é usada para o nome do arquivo e a primeira linha é ignorada.
O destino é um arquivo de armazenamento temporário. Pode ser um site FTP ou um compartilhamento de arquivo de rede. Novamente, uma variável global é usada para selecionar dinamicamente o nome do arquivo.
Este exemplo está usando um objeto Apttus padrão. Este formato de arquivo será usado repetidamente na cadeia de operações. Nesse caso, os objetos de origem e destino usam um ID externo chamado 'Jitterbit_Key' para associar registros nas diferentes organizações. Diff usará isso para identificar as novas linhas, bem como as linhas atualizadas.
Isso irá realizar a inserção de dados de acordo com a saída do arquivo Diff.
Novamente, o uso de uma variável global para selecionar dinamicamente um nome de arquivo:
Reutilizando o formato do arquivo, que agora está mapeado para o objeto Apttus.
Anotações importantes:
Subject_Operation_Name é uma variável local e é usada para conter uma string que é usada repetidamente.
Melhor Prática
SourceOrg e TargetOrg são variáveis de projeto Jitterbit que contêm o nome da organização. Uma variável de projeto é um valor disponível para todos os objetos Jitterbit que podem trabalhar com uma variável. Observe que a formatação no editor de script é verde e em itálico:
As variáveis do projeto são definidas no Jitterbit Design Studio:
Outro script é chamado, o que permite capturar a saída e adicioná-la como um anexo a um e-mail. Isso requer o uso de um plug-in Enviar E-mail com anexo no alvo. (Veja atualização abaixo).
O Diff Add and Update
a operação é usada repetidamente, pois as origens e os destinos usam uma variável ("$OutputFile") para selecionar dinamicamente os arquivos a serem processados. Isso permite grandemente a reutilização de operações.
Método Atualizado Usando Destinos E-mail
As versões atuais do Harmony incluem alvos e-mail; eles são superiores para lidar com anexos e-mail, pois não requerem o uso de um plug-in.
Primeiro, crie um destino E-mail:
Em segundo lugar, crie um e-mail e defina o limite de tamanho do anexo:
Agora você pode usar esse destino e-mail para enviar a saída capturada.