Capture Cambios de Datos con Cambios de Tablas o Archivos
Caso de Uso
Cuando otros patrones para la captura de datos modificados no son viables (Patrón de integración para la captura de datos modificados mediante consultas basadas en marcas de tiempo Patrón de integración para la captura de datos modificados mediante valores de campo de origen, Patrón de integración para la captura de datos modificados mediante fuentes de archivo Patrón de integración: Captura de datos modificados: en tiempo real/basado en eventos), se puede aplicar este patrón.
Este patrón se aplica en los casos en que la fuente no tiene una marca de tiempo, no se puede cambiar para proporcionar un campo que se usará para consultar o no puede enviar cambios.
Este patrón supone que los registros de origen y de destino se pueden comparar y las diferencias se pueden aislar. Por ejemplo, suponga que una tabla de clientes en un origen tiene 150 filas y la tabla de clientes en el destino tiene 100 filas. El objetivo es determinar las filas en el origen que son Nuevas (no existen en el destino), Diferentes (misma fila y datos diferentes) y Faltantes (la fila no existe en el destino). Si es Nuevo, insértelo en el objetivo. Si es Diferente, actualice la fila en el destino. Si falta, eliminar del objetivo.
La documentación de la función Jitterbit Diff tiene explicaciones detalladas de las diferentes funciones Diff: Funciones Diff.
Un caso de uso frecuente de este patrón es que se necesita un proceso para recuperar un cambio en una tabla de base de datos de un período al siguiente.
Advertencia
Las funciones de diferencias solo se pueden usar en un único Agente Privado, ya que las instantáneas de diferencias no se comparten. No lo use en un Grupo de Agentes con más de un agente. No son compatibles con Agentes en Nube.
Ejemplo 1: Comparación de Base de Datos a Base de Datos
En este ejemplo, el cliente tiene una base de datos que respalda un sistema transaccional y quería sincronizar ciertos objetos comerciales con un almacén de datos externo para fines de auditoría.
Los pasos básicos son:
- Inicialice el Diff y agregue registros a la instantánea en el disco. Si no es la primera vez que se ejecuta el proceso, se seleccionarán los nuevos registros.
- Pasar nuevos registros a la transformación y actualizar la base de datos de destino.
- Procesar las actualizaciones (cambios desde la última vez que se ejecutó el proceso)
- Pase a la transformación y actualice la base de datos de destino.
- Procesar las eliminaciones
- Pase a la transformación y actualice la base de datos de destino.
La operación Principal impulsa una serie de operaciones encadenadas, seleccionando solo una tabla como ejemplo.
Al pasar un 'false
argumento, el RunOperation()
funciones (ver Funciones generales del generador de fórmulas) se ejecutará de forma asíncrona:
InitializeDiff es llamado y evaluado. Si falla, se llama a ResetDiff.
DiffKeyList establece el identificador único del registro.
Si es la primera vez que se ejecuta, todos los registros del origen se agregarán a la instantánea. De lo contrario, seleccionará los nuevos registros.
Si hay una falla, entonces la cadena de operación se cancela.
Esta es la transformación utilizada por la operación. Tenga en cuenta que si bien hay una fuente de base de datos, si la llamada a la operación está precedida por una llamada Diff, la fuente de la operación no se usa. Si se llama a DiffUpdate, entonces se llama a esta operación y obtenemos el resultado de la función DiffUpdate:
Llama a DiffUpdate. Tenga en cuenta el uso de una etiqueta de variable global para indicar al objetivo qué tipo de acción se realizó.
Mostrando este secuencia de comandos en aras de la integridad. El cliente deseaba almacenar un registro de las filas nuevas y modificadas, no sincronizar dos almacenes de datos. Entonces, los procesos Diff incorporaron un método para generar claves únicas que mostrarán los cambios en el mismo registro a lo largo del tiempo.
Ejemplo 2: Comparación de Organización a Organización
Este ejemplo compara dos objetos de Salesforce simultáneamente.
En general, los pasos Diff son:
- Limpiar el antiguo archivo Diff (ResetDiff). No hacemos un seguimiento de los cambios a lo largo del tiempo. Estamos rastreando las diferencias entre los archivos de origen y de destino a partir de este momento.
- Crear el Diff (InitializeDiff). Esto le asigna un nombre único que se utilizará como clave para el directorio Diff que se creará en el disco del servidor de Agente Privado. El nombre del objeto se utiliza como el nombre Diff.
- Establecer el campo clave (DiffKeyList). Esto le dirá a Diff qué campo de la fila es el campo clave y se usará para comparar filas específicas en el nuevo archivo Diff con filas en el archivo Diff antiguo.
- Rellene la diferencia (DiffAdd) de la tabla de clientes de destino (en este caso, un archivo csv creado al consultar la tabla de clientes de destino). Las filas del "origen" (en este caso, el archivo csv creado al consultar la tabla de clientes de destino) se leen en el archivo Diff. El comportamiento es diferente si el archivo Diff está vacío, es decir, si es la primera vez que se crea el Diff.
- Guardar el Diff (DiffComplete). En este punto, hay una instantánea de la tabla de clientes de destino en el disco del servidor de Agente Privado.
- Inicie la comparación del origen (en este caso, un archivo csv creado al consultar la tabla de clientes de origen) con el destino (un archivo csv creado al consultar la tabla de clientes de destino), comenzando con la lectura de los registros en el archivo csv de origen (DiffAdd). Entonces, mientras usamos la misma función DiffAdd que la anterior, se comporta de manera diferente ya que hay un archivo Diff existente. Esta vez compara los dos archivos y genera las nuevas filas según el campo establecido por DiffKeyList
- Comparar en base a cambios (DiffUpdate). Diff aplica un hash a los registros individuales tanto en el archivo antiguo como en el nuevo, e identificará los registros modificados en función de la misma clave pero con diferentes hashes. Esto generará las filas modificadas.
- Guardar el Diff (DiffComplete).
- Eliminar el Diff (ResetDiff).
Este ejemplo tiene dos organizaciones de Salesforce con objetos y campos idénticos. La organización de origen contiene datos que deben agregarse o actualizarse en la organización de destino. Debido al uso de disparadores y actualizaciones, simplemente consultar la fuente en función de la marca de tiempo de un objeto no es viable. Hacer una copia completa, consultando todo el origen y modificando el destino es un método viable, pero para conjuntos de datos muy grandes puede llevar mucho tiempo. La preferencia aquí fue hacer una migración de las diferencias entre las organizaciones de origen y de destino utilizando Diff() funciones.
Dado que Diff solo puede funcionar con bases de datos o archivos CSV, las consultas de origen y destino se convierten a ese formato:
Esto consulta el destino y hay una operación similar que consulta la fuente.
Tenga en cuenta que la consultar se limita a los datos comerciales, excluyendo los datos del sistema como LastModifiedDate, que será diferente del origen y el destino, así como los ID de registro. Además, los encabezados se seleccionan según se necesiten para ayudar al usuario a ver los datos. El objetivo de respaldo es idéntico, excepto por la organización de la fuerza de ventas.
Se usa una fuente de almacenamiento temporal, donde se usa una variable global para el nombre del archivo y se ignora la primera línea.
El objetivo es un archivo de almacenamiento temporal. Puede ser un sitio FTP o un recurso compartido de archivos de red. Nuevamente, se usa una variable global para seleccionar dinámicamente el nombre del archivo.
Este ejemplo utiliza un objeto Apttus estándar. Este formato de archivo se utilizará repetidamente en la cadena de operaciones. En este caso, los objetos de origen y de destino utilizan un ID externo llamado 'Jitterbit_Key' para asociar registros en las diferentes organizaciones. Diff usará esto para identificar las nuevas filas, así como las filas actualizadas.
Esto realizará la inserción de datos según la salida del archivo Diff.
Nuevamente, el uso de una variable global para seleccionar dinámicamente un nombre de archivo:
Reutilizando el formato de archivo, que ahora está asignado al objeto Apttus.
Notas importantes:
Subject_Operation_Name es una variable local y se usa para contener una cadena que se usa repetidamente.
Mejores Prácticas
SourceOrg y TargetOrg son variables de proyecto de Jitterbit que contienen el nombre de la organización. Una variable de proyecto es un valor que está disponible para todos los objetos Jitterbit que pueden trabajar con una variable. Tenga en cuenta que el formato en el editor de secuencia de comandos es verde y en cursiva:
Las variables del proyecto se definen en Jitterbit Design Studio:
Se llama a otra secuencia de comandos, que permite la captura de la salida y la agrega como archivo adjunto a un correo. Esto requiere el uso de un complemento Enviar Correo con archivo adjunto en el objetivo. (Ver actualización a continuación).
El Diff Add and Update
la operación se usa repetidamente ya que las fuentes y los destinos usan una variable ("$OutputFile") para seleccionar dinámicamente los archivos para procesar. Esto permite en gran medida las operaciones de reutilización.
Método Actualizado Usando Objetivos de Correo
Las versiones actuales de Harmony incluyen objetivos de correo; son superiores para manejar archivos adjuntos de correo, ya que no requieren el uso de un complemento.
Primero, cree un objetivo de Correo:
En segundo lugar, cree un correo y establezca el límite de tamaño de los archivos adjuntos:
Ahora puede usar este destino de correo para enviar la salida capturada.