Ir al contenido

La migración es, ante todo, un proyecto de calidad

También en 19 idiomas

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Українська · Français (Canada) · Deutsch (Schweiz)

In a fruit packing shed, crates of sound apples move along the line, and one crate of bruised and split apples is set apart on the floor.
Imagen generada con IA

Módulo 1 de 5 del capítulo Migración y sincronización, capítulo 10 del curso Data Architect. Cada módulo se sostiene por sí solo. Anterior: el capítulo anterior, Integración y movimiento de datos · Siguiente: Cargar con volumen

La pregunta que responde este módulo: ¿qué debería pasarles a los datos antes de empezar a cargarlos en Salesforce?

Un proyecto de migración puede engañarte. Tienes datos aquí, los necesitas allí, así que alguien empieza a hablar de Data Loader, la Bulk API, archivos CSV, tamaños de lote y orden de carga. Esas cosas importan. No es por donde empiezo. Mi primera pregunta es: ¿qué es exactamente lo que estamos a punto de mover? Si el origen contiene clientes duplicados, direcciones no válidas, valores obsoletos, relaciones rotas y quince años de datos que nadie necesita, Salesforce se convertirá encantado en el nuevo hogar de todo eso. Cargar más rápido no lo arregla. La migración es, ante todo, un proyecto de calidad.

Este es el panorama de Steve Trucking del Checkpoint 1, el fin de semana en que se retira RouteDesk. RouteDesk es la herramienta de escritorio de despacho que usaban los coordinadores dentro de cada centro de distribución para convertir los manifiestos en rutas. Guarda ocho años de historial de entregas, unos 5 millones de entregas, y la calidad varía según el centro de distribución. En el Checkpoint 1 decidimos retirarla, y dejamos una pregunta abierta: ¿qué entra en la organización, si es que entra algo? Esa es una decisión de migración, y este es el capítulo para ella.

La flecha que se ejecuta una vez El panorama de Steve Trucking del Checkpoint 1, en los mismos lugares, el fin de semana en que se retira RouteDesk: las personas a la izquierda, Salesforce con Field Service en el centro con el portal de socios minoristas y la página de seguimiento, la capa de integración del capítulo 9 a su derecha, y los sistemas a su alrededor: Snowflake, FleetLink, el ERP de finanzas, el almacenamiento de fotos y RouteDesk, que se retira, con 8 años y unos 5 millones de entregas. Una flecha nueva, en ámbar, la migración a la que se acerca este módulo, lleva lo que sigue abierto de RouteDesk a Salesforce, migrado una vez. Debajo: una flecha se ejecuta una vez y luego desaparece; una migración es una integración con final. ARRIBA: IDENTIDAD, APPEXCHANGE, WEB PERSONAS DERECHA: SISTEMAS INTERNOS ABAJO: CANALES DE CLIENTES ABAJO A LA DERECHA: SOCIOS Y PROVEEDORES Coordinadores de despacho 45, en 9 centros de distribución de socios Equipos de entrega ~700 en 330 camiones Atención al cliente y oficina 100: servicio, operaciones, finanzas Usuarios de socios minoristas ~300 en 3 socios Destinatarios ~1 millón al año IdP corporativo SSO solo para el personal de oficina Portal de socios minoristas Página de seguimiento INTEGRACIÓN Snowflake historial de estados, análisis FleetLink el GPS en bruto se queda aquí ERP de finanzas factura a los socios, paga a los equipos Almacenamiento de fotos 4–5 millones al año, fuera del núcleo RouteDesk se retira: 8 años, ~5 millones de entregas Teléfono agentes de atención al cliente Correo electrónico email-to-case Proveedor de SMS y correo electrónico mensaje del día anterior, con un enlace Redrock API REST, webhooks Keystone CSV por SFTP Brightwave EDI a través de una red de terceros Salesforce Field Service, una org en EE. UU. un enlace, sin inicio de sesión solo el personal de oficina llamadas casos que entran manifiestos entrantes estado saliente manifiestos entrantes estado saliente manifiestos entrantes estado saliente upserts, clave del socio eventos de estado eventos de estado solo la última posición recuentos de entregas recuentos de entregas fotos, desde la app de los equipos día anterior, con un enlace lo que sigue abierto: migrado una vez Salesforce una comunidad personas identidad, apps, web un sistema interno un canal de clientes la capa de integración parte del sistema que abre la conexión; la etiqueta dice qué se mueve un certificado compartido: confianza, sin llamada directa la migración a la que nos acercamos El panorama del Checkpoint 1, el fin de semana en que se retira RouteDesk. Una flecha se ejecuta una vez y luego desaparece: una migración es una integración con final. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Una flecha nueva. Se ejecuta una vez y luego desaparece.

Una migración es una flecha en el panorama como cualquier otra. Se aplica todo lo que el capítulo 9 le pedía a una flecha: qué se mueve, cuánto, con qué clave, quién demuestra que llegó. La diferencia es que esta flecha tiene un final. Cuando termina, RouteDesk se apaga y la flecha desaparece del dibujo. Eso hace fácil precipitarse, porque “solo lo hacemos una vez”. Pero los datos que lleva se quedan en Salesforce durante años.

Mover datos malos más rápido no es un éxito

Sección titulada «Mover datos malos más rápido no es un éxito »

El sistema heredado tiene 500.000 registros de clientes, y migramos 500.000 registros de clientes. ¿Tuvimos éxito? Quizá. ¿Y si 40.000 son duplicados, 75.000 no han tenido actividad en diez años, miles tienen códigos de estado no válidos, algunos no tienen un identificador utilizable, algunos hijos apuntan a padres que ya no existen y algunos campos significan cosas distintas según cuándo se creó el registro? El informe puede seguir diciendo 500.000 en el origen, 500.000 en el destino, 100 por ciento cargado, y el proyecto puede seguir siendo un fracaso. La integridad importa, pero la integridad por sí sola no demuestra calidad.

Así que, antes de diseñar la carga, quiero entender el origen. ¿Qué datos existen, y qué significan? ¿Qué antigüedad tienen, qué fiabilidad, qué campos se usan de verdad, qué valores son válidos, qué relaciones existen, en qué identificadores puedo confiar? ¿Qué debería sobrevivir a la migración, y qué no? Aquí es donde vencen los capítulos anteriores: el capítulo 4 nos enseñó el panorama de la empresa, el capítulo 5 que la calidad hay que diseñarla, el capítulo 6 la identidad y la autoridad. La migración lo aplica todo a un conjunto de datos existente. No es solo mover filas. Es decidir qué partes del pasado merecen formar parte de la arquitectura futura.

Migrar, archivar o descartar, y saber por qué

Sección titulada «Migrar, archivar o descartar, y saber por qué »

Un inventario de migración necesita al menos tres respuestas: migrar, archivar o descartar según la política. Un detalle transaccional de hace cinco años puede tener que conservarse por cumplimiento sin vivir en el modelo de datos activo; unos datos temporales obsoletos pueden no tener ni requisito de retención ni valor; el historial puede pertenecer a un archivo en el que se pueda buscar. El principio de ciclo de vida del capítulo 7 era “diseña la salida”, y la migración es el momento perfecto para aplicarlo. No arrastres cada registro solo porque está ahí.

Así que acércate a RouteDesk y desmóntalo, una clase de datos cada vez.

Migrar, archivar o descartar Una tabla de lo que hay en RouteDesk, con una decisión para cada clase de datos. Entregas aún no realizadas, unas 6.400 con dos días de antelación: migrar, a las órdenes de trabajo de Salesforce, porque los equipos las necesitan el lunes por la mañana. Entregadas dentro del plazo de reclamación de 60 días, unas 190.000: migrar, a Salesforce, para que el caso de una reclamación se vincule a su orden de trabajo. Entregadas y más antiguas, unos 4,8 millones: archivar, en Snowflake por la clave del socio, para las reclamaciones y los informes a cinco años. Planes de ruta y borradores de los coordinadores, de ocho años: descartar por política, una vez que el negocio confirme que nadie debe conservarlos. La columna de la decisión está resaltada. Debajo: retirar un sistema no es mover todos los registros; sabe por qué se mueve, o no, cada clase de datos. LO QUE HAY EN ROUTEDESK CUÁNTO DECISIÓN ADÓNDE VA, Y POR QUÉ Entregas aún no realizadas unas 6.400 (dos días por delante) Migrar Órdenes de trabajo de Salesforce: los equipos las necesitan el lunes por la mañana Entregadas, dentro del plazo de reclamación de 60 días unas 190.000 (60 días) Migrar Salesforce, para que el caso de una reclamación se vincule a su orden de trabajo Entregadas, más antiguas unos 4,8 millones Archivo histórico Snowflake, por la clave del socio: reclamaciones e informes a cinco años Planes de ruta y borradores de los coordinadores ocho años de ellos Descartar, por política A ningún sitio, una vez que el negocio confirme que nadie debe conservarlos Retirar un sistema no es mover todos los registros. Sabe por qué se mueve, o no, cada clase de datos. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Cada clase de datos recibe una decisión, un lugar y un motivo.

Las entregas aún no realizadas tienen que entrar: los manifiestos llegan con uno o dos días de antelación, así que el fin de semana del corte RouteDesk guarda unos dos días de trabajo, unas 6.400 entregas, y los equipos las necesitan el lunes por la mañana. El historial reciente entra por las reclamaciones. Una reclamación por daños es un caso en Salesforce, y el agente que la gestiona necesita la entrega que hay detrás. Así que también entran las entregas que siguen dentro del plazo de reclamación. Steve Trucking acepta reclamaciones durante 60 días después de una entrega, así que son unas 190.000 órdenes de trabajo más. Si el negocio hubiera dicho 30 días, sería la mitad. El plazo es una cifra del negocio, no nuestra.

Los otros 4,8 millones de entregas van a Snowflake, adonde el Checkpoint 1 ya envía el historial de estados, guardados por la clave del socio para que una reclamación sobre una entrega antigua pueda seguir encontrándola, y para que los informes a cinco años de la dirección sigan funcionando. No pertenecen al núcleo operativo: eso convertiría Salesforce en la residencia de jubilación de RouteDesk, y el capítulo 7 mostró lo que cuestan las órdenes de trabajo con volumen. ¿Y los planes de ruta y los borradores de los coordinadores? Ocho años de planes de ayer no tienen valor una vez hechas las entregas. Pero eso no lo decido yo solo.

El error opuesto es “no necesitamos lo antiguo”. ¿Quién lo decidió? ¿Legal, finanzas, operaciones, servicio, cumplimiento? El arquitecto de datos no debería inventarse la política de conservación durante una migración; traducimos el requisito de negocio y normativo a arquitectura. Antes de excluir datos, establece si deben conservarse, durante cuánto tiempo, dónde, quién necesita acceso y si deben sobrevivir sus relaciones y sus identificadores de origen. Ocho años de nombres, direcciones y números de teléfono de destinatarios es exactamente ese tipo de pregunta: archivarlos no es lo mismo que conservarlos para siempre. El objetivo no es migrar menos. Es saber por qué se mueve, o no, cada clase de datos.

Conocimiento para el examen. Migra lo que el sistema nuevo necesita para funcionar, no todo lo que guardaba el antiguo. Espera un escenario con años de historial heredado: la respuesta suele ser migrar los registros activos y recientes y archivar el resto fuera de Salesforce, donde siga siendo accesible, con la decisión de conservación tomada por el negocio, no por el equipo de migración.

Antes de los pasos, el lugar. Toda esta preparación ocurre fuera de Salesforce, en una base de datos de trabajo propia: Postgres, SQL Server, Oracle, MySQL, incluso SQLite para un trabajo pequeño, lo que conozca el equipo. No en Salesforce, y no en una hoja de cálculo que va de correo en correo. Lo llamo el almacén de datos de preparación, o el almacén de preparación para abreviar. Está en medio: el origen lo alimenta, y él alimenta a Salesforce.

El almacén de datos de preparación está en medio Tres tarjetas en fila. A la izquierda, el origen: RouteDesk, 8 años y unos 5 millones de entregas. En medio, resaltado: el almacén de datos de preparación, una base de datos como Postgres, SQL Server, Oracle o MySQL, donde los datos se estandarizan, limpian, enriquecen, desduplican y validan. A la derecha, el destino: Salesforce, una organización en Estados Unidos. La extracción de RouteDesk entra en el almacén de datos de preparación, conservada en bruto; el almacén de datos de preparación carga el resultado en Salesforce; y Salesforce devuelve lo que ya tiene, y los ID de lo que se cargó. Debajo: prepara fuera y luego carga el resultado; el almacén guarda el origen, los pasos y una copia de lo que Salesforce ya tiene. EL ORIGEN EN MEDIO EL DESTINO RouteDesk 8 años, ~5 millones de entregas Almacén de datos de preparación Postgres, SQL Server, Oracle, MySQL: estandarizar, limpiar, enriquecer, desduplicar, validar Salesforce una organización en Estados Unidos extracción, conservada en bruto cargar el resultado lo que ya hay, y los ID de vuelta Prepara fuera y luego carga el resultado. El almacén guarda el origen, los pasos y una copia de lo que Salesforce ya tiene. CÓMO LEERLO donde ocurre la preparación © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

El almacén de datos de preparación está en medio. Cada paso de este módulo ocurre dentro de él.

La extracción llega ahí en bruto. La estandarización, la limpieza, el enriquecimiento, la desduplicación y la validación se ejecutan todas ahí, como código. La cuarentena es una tabla, los recuentos son consultas, y todo puede volver a ejecutarse desde el principio. Algunas herramientas conectan una base de datos así directamente con Salesforce, copiando los datos hacia abajo y enviando los cambios de vuelta; otras exportan archivos para un cargador de datos. Hay muchas formas de cargar datos. El principio no cambia: prepáralos fuera y luego carga el resultado.

Y guarda más que el origen. Trae también las partes relevantes de la organización de destino. ¿Por qué? Porque la desduplicación tiene que comparar con lo que ya está en Salesforce, y cuando el superviviente de una fusión es un registro que ya está allí, los hijos nuevos necesitan su clave para vincularse a él. No puedes decidir la fusión sin tener los dos lados delante. Para RouteDesk, el almacén de preparación guarda la extracción de RouteDesk y una copia de lo que Salesforce ya tiene: las cuentas de los socios minoristas, los productos y los territorios de servicio, los casos de reclamación con sus referencias de entrega y las órdenes de trabajo que la nueva integración ya ha creado, porque los socios no dejan de enviar manifiestos por nuestro fin de semana del corte.

Luego practicas. Ejecuta la preparación, carga un sandbox, concilia, encuentra la regla que estaba mal, corrígela, vuelve a ejecutarlo todo. Para cuando llegamos a producción, la preparación se ha ejecutado muchas veces, y es aburrida. Ese es el objetivo.

Mi orden: estandarizar, limpiar, enriquecer, eliminar duplicados, validar

Sección titulada «Mi orden: estandarizar, limpiar, enriquecer, eliminar duplicados, validar »

Cuando preparo datos para una migración, trabajo en este orden, y el orden importa. Los cinco pasos ocurren en el almacén de datos de preparación.

Estandarizar. Lleva los valores equivalentes a una sola forma. Un origen tiene CA, California y Calif.; otro tiene US, USA y United States. Una empresa llega como Steve Plumbing, Steve's Plumbing y Steve's Plumbing LLC. Los números de teléfono llegan como 5555550142, (555) 555-0142 y +1 555 555 0142. Antes de comparar registros o aplicar reglas de emparejamiento, necesitamos saber qué diferencias son de formato y cuáles tienen significado.

Los nombres son la trampa clásica. Tuve un sistema con el nombre y el apellido en un solo campo, y el contacto de Salesforce los necesita por separado. “Daniel Reyes” se separa fácilmente. Luego te encuentras con “Mr. Daniel Reyes”, “Daniel Reyes PhD”, “Daniel Reyes III” y nombres con dos apellidos, como Roberto González Suárez, donde González no es un segundo nombre: sepáralo mal y tienes un problema. Construye los patrones (dos palabras, tres palabras, un tratamiento, un sufijo), ejecuta las separaciones y haz que el cliente valide los resultados.

Limpiar. Ocúpate de lo que está mal, es inutilizable u obsoleto: códigos no válidos, fechas imposibles, errores ortográficos, valores de relleno, campos con datos que no corresponden a su significado. Mapea los valores de las listas de selección a propósito: un estado de prospecto heredado Cold podría convertirse en Closed en el destino. Cuando la lista es larga (he visto 200 valores), construye una tabla de transformación y haz que el negocio rellene el destino para cada valor de origen. Salesforce valida las listas de selección de forma estricta, así que detéctalos antes de que lleguen, y no esperes a que las reglas de validación te digan qué contiene tu origen.

El “la calidad varía según el centro de distribución” de RouteDesk aparece justo aquí. Cada centro de distribución creó sus propios códigos de estado durante ocho años, así que el mismo resultado llega escrito de nueve maneras. La tabla de transformación asigna cada uno de ellos a los valores de estado de la orden de trabajo en Salesforce:

Centro de distribuciónRouteDesk diceEstado de la orden de trabajo
CD 1DLVCompleted
CD 4Delivered - OKCompleted
CD 7DONE/INSTCompleted (la instalación está en su partida)
CD 1NHCannot Complete (no había nadie en casa)
CD 4RefusedCannot Complete
CD 7CXLCanceled

Las dos columnas de la izquierda salen del perfilado de la extracción; la columna de la derecha la pone el negocio, no nosotros. Completed, Cannot Complete y Canceled son tres de los valores de estado estándar de la orden de trabajo (WorkOrder (se abre en una pestaña nueva), Object Reference, Winter ‘27, consultado el 2026-10-27). Fíjate en la tercera fila: un código de RouteDesk llevaba dos hechos, la entrega y la instalación, y el modelo de destino los mantiene separados.

Enriquecer. A veces la información que falta se puede añadir de forma fiable: una dirección normalizada, un código postal a partir de la ciudad y el estado, un condado, una geolocalización, una correspondencia de un código heredado con la nueva taxonomía de la empresa, un identificador de empresa. El enriquecimiento necesita procedencia. Si añadimos o cambiamos información, quiero saber de dónde salió y por qué confío en ella. Algunas de las entregas más antiguas de RouteDesk no nombran al socio minorista en absoluto, porque cada centro de distribución atendía a un socio y todo el mundo lo sabía. El centro de distribución y el formato del número de pedido nos dicen qué socio era. Eso es enriquecimiento a partir de una regla que podemos mostrar, no una suposición.

Eliminar duplicados. Luego encuentra los registros que representan la misma cosa del mundo real. ¿Por qué no empezar por aquí? Porque emparejar datos sucios es más difícil: Steve's Plumbing y STEVES PLUMBING LLC son mucho más fáciles de comparar después de estandarizar. Elimina duplicados dentro de los datos entrantes y luego frente a lo que ya está en Salesforce. La regla del capítulo 6 sigue aplicándose: fusionar es destructivo; vincular no. No colapses registros porque una puntuación difusa parezca convincente.

Validar. Por último, prueba los datos transformados contra el destino: la información obligatoria presente, los valores de referencia válidos, las relaciones resolubles, las claves únicas donde deben serlo, los valores encajando en el modelo, las reglas de autoridad preservadas. Solo entonces quiero hablar en serio de la carga. Y no esperes que la herramienta de importación lo detecte todo. El propio proyecto de Trailhead de Salesforce sobre el importador de NPSP lo deja claro: detecta los valores de lista de selección no válidos y los campos obligatorios que faltan, pero si una hoja de cálculo convirtió un código postal como 02134 en el número 2134, el importador carga los cuatro dígitos (Perform an Import Dry Run (se abre en una pestaña nueva), Trailhead, consultado el 2026-10-27). Es una razón más para que la preparación viva en una base de datos con columnas con tipo, no en una hoja de cálculo.

Estandarizar, limpiar, enriquecer, desduplicar, validar Un embudo, de arriba abajo. La extracción de RouteDesk, de nueve centros de distribución, conservada tal como salió: la evidencia. Estandarizar: los códigos de estado de nueve centros en una sola lista, y una sola forma para teléfonos y direcciones. Limpiar: fechas imposibles, teléfonos de relleno, productos escritos a mano. Apartado a cuarentena: una entrega sin número de pedido del socio, sin clave con la que cargarla. Enriquecer: el socio minorista, a partir del centro de distribución y el número de pedido. Desduplicar: un manifiesto revisado introducido dos veces es una entrega, no dos. Apartado, fusionado: el duplicado, con un plan para sus paradas y notas. Validar contra Salesforce: claves únicas, productos y territorios que se resuelven. Apartado a cuarentena: una partida cuyo producto no existe en Salesforce. Abajo, resaltado: listo para cargar, y un recuento que concilia con la extracción. Debajo: los registros malos necesitan un lugar adonde ir, una cuarentena con el motivo, un responsable y un plazo; ni descartados en silencio ni metidos a la fuerza. La extracción de RouteDesk, de nueve CD conservada tal como salió: la evidencia Estandarizar los códigos de estado de nueve CD en una sola lista; una sola forma para teléfonos y direcciones Limpiar fechas imposibles, teléfonos de relleno, productos escritos a mano Set aside: a cuarentena una entrega sin número de pedido del socio: sin clave con la que cargarla Enriquecer el socio minorista, a partir del CD y el número de pedido Desduplicar un manifiesto revisado introducido dos veces es una entrega, no dos Set aside: fusionado el duplicado, con un plan para sus paradas y notas Validar contra Salesforce: claves únicas, productos y territorios que se resuelven Set aside: a cuarentena una partida cuyo producto no existe en Salesforce Listo para cargar y un recuento que concilia con la extracción Los registros malos necesitan un lugar adonde ir: una cuarentena con el motivo, un responsable y un plazo. Ni descartados en silencio ni metidos a la fuerza. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Cinco pasos, en orden. Un registro que falla uno va a algún lugar visible, con su motivo.

Conocimiento para el examen. La calidad de los datos se arregla antes de la carga, no después. Conoce los pasos de preparación (estandarizar, limpiar, enriquecer, desduplicar, validar) y por qué importa el orden: no puedes emparejar registros de forma fiable hasta que sus valores tienen una sola forma. Los valores de las listas de selección se asignan con una tabla de transformación que firma el negocio, porque Salesforce rechaza los valores que no tiene una lista de selección restringida.

La tentación es “metamos primero todo en Salesforce y ya lo limpiaremos después”. No me gusta como opción por defecto. En cuanto los datos malos están en producción, participan en producción: los usuarios los ven, la automatización, los informes, las integraciones y los agentes los ven, los duplicados empiezan a acumular registros relacionados y la limpieza se vuelve más difícil. Donde sea práctico, mejora los datos antes de que entren en el destino. No hay que arreglar cada imperfección histórica; es una decisión de coste y beneficio. Pero “ya lo limpiaremos más adelante” no es una estrategia de migración. Es deuda técnica con fecha de lanzamiento.

Y no todos los registros merecen el mismo esfuerzo. Un cliente activo con pedidos abiertos, casos abiertos, contratos vigentes y relaciones de facturación es distinto de uno que compró algo una vez hace nueve años. Puede que haya que conservar los dos. Para los datos críticos y activos puedo exigir una validación más estricta, más enriquecimiento, una revisión de duplicados más atenta y una conciliación detallada; para el historial de poco valor, conservar la trazabilidad puede importar más que dejar cada registro perfecto. La arquitectura consiste en parte en decidir dónde crea valor el esfuerzo de calidad. Para RouteDesk, las 6.400 entregas a las que irán los equipos el lunes reciben las comprobaciones más estrictas. Los 4,8 millones que van al archivo necesitan bien sus claves y sus fechas; nadie va a corregir ocho años de erratas en las notas de entrega.

Conserva la identidad del origen, y carga por claves

Sección titulada «Conserva la identidad del origen, y carga por claves »

Uno de los errores más fáciles es perder la capacidad de rastrear un registro de Salesforce hasta su origen. Si el cliente heredado CUST-847291 se convierte en la cuenta 001…, sigo queriendo saber que vino de CUST-847291, para la conciliación, la resolución de problemas, las recargas, la auditoría, el emparejamiento de los registros hijos, el análisis de una reversión y las preguntas que llegan después del lanzamiento. El nuevo ID de Salesforce importa dentro de Salesforce; no borra la identidad del origen. Es el principio del External ID del capítulo 9. La migración y la integración se encuentran en la identidad.

En Steve Trucking se encuentran en un solo campo. Cada orden de trabajo ya lleva la clave del socio, Partner_Delivery_Key__c, un External ID marcado como único, con valores como REDROCK-8472914-1 (capítulo 9, módulo 2). RouteDesk guardaba el número de pedido del socio en cada entrega, así que la migración construye la misma clave y hace upsert con ella, exactamente como la integración. Eso importa el fin de semana del corte: si Redrock reenvía un manifiesto para el martes después de que hayamos cargado el martes desde RouteDesk, la integración encuentra la orden de trabajo migrada y la actualiza en lugar de crear una segunda. El propio número de entrega de RouteDesk viene también, en un campo normal, para que cualquiera pueda rastrear una orden de trabajo hasta el registro del que procede.

Así que no reconstruyas las relaciones por nombre (“busca la cuenta cuyo Name es Acme Distribution”). Si el contacto heredado lleva Legacy_Account_ID = CUST-847291 y la cuenta de Salesforce lleva ese identificador como External ID, la relación se reconstruye de forma determinista. Bulk API lo hace en el propio archivo de carga: un encabezado de columna como WorkOrder.Partner_Delivery_Key__c dice “encuentra a mi padre por este campo indexado”, y Salesforce busca el ID del padre por ti (Relationship Fields in a Header Row (se abre en una pestaña nueva), Bulk API 2.0 and Bulk API Developer Guide, consultado el 2026-10-27). Las claves convierten “creo que este hijo va aquí” en “sé de qué padre procede”, y eso importa más a medida que crece el Número de Ceros.

Las relaciones también crean una secuencia. Si los contactos hacen referencia a cuentas, las cuentas deben existir primero; si las partidas hacen referencia a pedidos y productos, esos van antes. Así que una migración no es una carga gigante. Son los datos de referencia, los padres, los hijos, las uniones y luego el historial dependiente, en un orden que dicta el modelo de datos de destino. Es una razón más para que el arquitecto de datos participe en la planificación de la migración: el modelo nos dice cómo hay que montar la migración. Este es el trabajo abierto de RouteDesk, sobre el modelo del Checkpoint 1.

El modelo fija el orden de carga Cuatro oleadas de izquierda a derecha. Oleada 1, lo que ya está o los datos de referencia: las cuentas de los socios minoristas, ya en Salesforce; los territorios de servicio, los nueve centros de distribución; los tipos de trabajo: entrega, instalación, retirada; y los productos, los SKU y los servicios. Oleada 2, el padre, resaltado: las órdenes de trabajo, con upsert por Partner_Delivery_Key__c, cada una apuntando a su socio minorista por la clave del socio, a su territorio por el código del centro de distribución y a su tipo de trabajo. Oleada 3, sus hijos: las citas de servicio, la visita programada y su franja, que apuntan a su orden de trabajo por la clave del socio; y las partidas de orden de trabajo, los artículos de cada entrega, que apuntan a su orden de trabajo por la clave del socio y a su producto por el SKU. Oleada 4, lo que apunta a ella: los casos de reclamación ya en Salesforce, actualizados para apuntar a su orden de trabajo por la clave del socio. Debajo: los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre; el modelo fija el orden. OLEADA 1: LO QUE YA ESTÁ, O REFERENCIA OLEADA 2: EL PADRE OLEADA 3: SUS HIJOS OLEADA 4: LO QUE APUNTA A ÉL Productos SKU y servicios Cuentas de socios minoristas ya en Salesforce Territorios de servicio los nueve CD Tipos de trabajo entrega, instalación, retirada Los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre. El modelo fija el orden. CÓMO LEERLO el padre en torno al que se construye la migración © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Oleada 1: aquello a lo que apuntarán las órdenes de trabajo tiene que existir primero. La mayor parte ya existe.

El modelo fija el orden de carga Cuatro oleadas de izquierda a derecha. Oleada 1, lo que ya está o los datos de referencia: las cuentas de los socios minoristas, ya en Salesforce; los territorios de servicio, los nueve centros de distribución; los tipos de trabajo: entrega, instalación, retirada; y los productos, los SKU y los servicios. Oleada 2, el padre, resaltado: las órdenes de trabajo, con upsert por Partner_Delivery_Key__c, cada una apuntando a su socio minorista por la clave del socio, a su territorio por el código del centro de distribución y a su tipo de trabajo. Oleada 3, sus hijos: las citas de servicio, la visita programada y su franja, que apuntan a su orden de trabajo por la clave del socio; y las partidas de orden de trabajo, los artículos de cada entrega, que apuntan a su orden de trabajo por la clave del socio y a su producto por el SKU. Oleada 4, lo que apunta a ella: los casos de reclamación ya en Salesforce, actualizados para apuntar a su orden de trabajo por la clave del socio. Debajo: los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre; el modelo fija el orden. OLEADA 1: LO QUE YA ESTÁ, O REFERENCIA OLEADA 2: EL PADRE OLEADA 3: SUS HIJOS OLEADA 4: LO QUE APUNTA A ÉL Productos SKU y servicios Cuentas de socios minoristas ya en Salesforce Territorios de servicio los nueve CD Tipos de trabajo entrega, instalación, retirada Órdenes de trabajo upsert por Partner_Delivery_Key__c por la clave del socio por nombre del tipo por código de CD Los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre. El modelo fija el orden. CÓMO LEERLO el padre en torno al que se construye la migración © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Oleada 2: las órdenes de trabajo, con upsert por la clave del socio.

El modelo fija el orden de carga Cuatro oleadas de izquierda a derecha. Oleada 1, lo que ya está o los datos de referencia: las cuentas de los socios minoristas, ya en Salesforce; los territorios de servicio, los nueve centros de distribución; los tipos de trabajo: entrega, instalación, retirada; y los productos, los SKU y los servicios. Oleada 2, el padre, resaltado: las órdenes de trabajo, con upsert por Partner_Delivery_Key__c, cada una apuntando a su socio minorista por la clave del socio, a su territorio por el código del centro de distribución y a su tipo de trabajo. Oleada 3, sus hijos: las citas de servicio, la visita programada y su franja, que apuntan a su orden de trabajo por la clave del socio; y las partidas de orden de trabajo, los artículos de cada entrega, que apuntan a su orden de trabajo por la clave del socio y a su producto por el SKU. Oleada 4, lo que apunta a ella: los casos de reclamación ya en Salesforce, actualizados para apuntar a su orden de trabajo por la clave del socio. Debajo: los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre; el modelo fija el orden. OLEADA 1: LO QUE YA ESTÁ, O REFERENCIA OLEADA 2: EL PADRE OLEADA 3: SUS HIJOS OLEADA 4: LO QUE APUNTA A ÉL Productos SKU y servicios Cuentas de socios minoristas ya en Salesforce Territorios de servicio los nueve CD Tipos de trabajo entrega, instalación, retirada Órdenes de trabajo upsert por Partner_Delivery_Key__c Partidas de orden de trabajo los artículos de cada entrega Citas de servicio la visita programada y su franja por la clave del socio por nombre del tipo por código de CD por la clave del socio por SKU por la clave del socio Los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre. El modelo fija el orden. CÓMO LEERLO el padre en torno al que se construye la migración © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Oleada 3: los hijos, cada uno encontrando su orden de trabajo por la misma clave.

El modelo fija el orden de carga Cuatro oleadas de izquierda a derecha. Oleada 1, lo que ya está o los datos de referencia: las cuentas de los socios minoristas, ya en Salesforce; los territorios de servicio, los nueve centros de distribución; los tipos de trabajo: entrega, instalación, retirada; y los productos, los SKU y los servicios. Oleada 2, el padre, resaltado: las órdenes de trabajo, con upsert por Partner_Delivery_Key__c, cada una apuntando a su socio minorista por la clave del socio, a su territorio por el código del centro de distribución y a su tipo de trabajo. Oleada 3, sus hijos: las citas de servicio, la visita programada y su franja, que apuntan a su orden de trabajo por la clave del socio; y las partidas de orden de trabajo, los artículos de cada entrega, que apuntan a su orden de trabajo por la clave del socio y a su producto por el SKU. Oleada 4, lo que apunta a ella: los casos de reclamación ya en Salesforce, actualizados para apuntar a su orden de trabajo por la clave del socio. Debajo: los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre; el modelo fija el orden. OLEADA 1: LO QUE YA ESTÁ, O REFERENCIA OLEADA 2: EL PADRE OLEADA 3: SUS HIJOS OLEADA 4: LO QUE APUNTA A ÉL Productos SKU y servicios Cuentas de socios minoristas ya en Salesforce Territorios de servicio los nueve CD Tipos de trabajo entrega, instalación, retirada Órdenes de trabajo upsert por Partner_Delivery_Key__c Partidas de orden de trabajo los artículos de cada entrega Citas de servicio la visita programada y su franja Casos de reclamación ya en Salesforce: actualizar la búsqueda por la clave del socio por nombre del tipo por código de CD por la clave del socio por SKU por la clave del socio por la clave del socio Los padres antes que los hijos, y cada hijo encuentra a su padre por una clave, nunca por un nombre. El modelo fija el orden. CÓMO LEERLO el padre en torno al que se construye la migración © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Oleada 4: los casos de reclamación que ya están en Salesforce reciben su vínculo con la entrega. El modelo fija el orden.

Conocimiento para el examen. Guarda la clave de cada registro heredado en un campo External ID, carga los padres antes que los hijos y deja que cada hijo encuentre a su padre por esa clave: un upsert por el External ID, y una columna de relación en el archivo de carga (Parent.External_Id__c) en lugar de buscar los ID de Salesforce. Así las recargas actualizan en lugar de duplicar, y cada registro se puede rastrear hasta su origen.

Los registros fusionados necesitan una estrategia para los hijos

Sección titulada «Los registros fusionados necesitan una estrategia para los hijos »

Este es el problema que la gente subestima. El análisis descubre que los clientes heredados A, B y C son el mismo cliente, así que el destino recibe una sola cuenta. Bien. Pero A tiene 12 casos, B tiene 4 pedidos y C tiene 3 contactos. Fusiona los padres conceptualmente sin rediseñar el mapeo de los hijos y habrás resuelto el padre y roto las relaciones. Cada decisión de eliminación de duplicados necesita una estrategia para los hijos.

RouteDesk tiene su propia versión. Cuando un socio revisaba un manifiesto el mismo día, un coordinador a veces volvía a introducir la entrega en lugar de editarla. Ahora RouteDesk tiene dos entregas con el mismo número de pedido del socio: una con la franja antigua y dos paradas, otra con la franja nueva y las notas del equipo. Salesforce tendrá una sola orden de trabajo, porque la clave del socio es única. ¿Qué franja gana, y qué pasa con las paradas y las notas de la otra?

Primero, los campos: cuando dos registros coinciden, ¿qué valores ganan? Un vacío frente a un valor es fácil. Un conflicto no: ¿Steven o Stephen?, ¿el correo de Salesforce o el de la carga? Elige un superviviente y decide campo a campo, y luego pon casos de ejemplo delante del negocio pronto, para que sus huellas estén en las decisiones.

Luego los hijos. Veo tres opciones: añadir los hijos al superviviente, no cargar los hijos del registro fusionado, o cargar el registro fusionado como inactivo, vinculado al superviviente, con sus hijos conservados en él.

Tres maneras de gestionar los hijos de un registro fusionado Tres paneles iguales, tres maneras de gestionar los hijos de un registro fusionado. Añadir los hijos al superviviente, un registro con todo: en RouteDesk, las paradas y notas de las dos entregas pasan a la única orden de trabajo; obtienes todo en un solo lugar, sencillo de usar; cuesta que se mezcle el historial de un registro fusionado; elígelo cuando una fusión errónea sea poco probable y el historial importe. No cargar los hijos del registro fusionado, un registro limpio: en RouteDesk, las paradas y notas del duplicado se quedan en el archivo; obtienes un registro limpio y nada confuso; cuesta ese historial, que desaparece de Salesforce; elígelo cuando nadie necesite ese historial en el día a día. Cargarlo inactivo, vinculado al superviviente, un archivo de su propio historial: en RouteDesk, el duplicado se carga como cancelado, apuntando al superviviente, con sus paradas; obtienes cada hijo rastreado y nada perdido; cuesta un registro que aparece en la búsqueda y puede confundir a los usuarios, y necesita su propia clave; elígelo cuando una fusión errónea sea cara y haya que rastrear cada hijo. Debajo: cada fusión necesita una estrategia para los hijos; sopesa el beneficio de unir los datos frente al riesgo de unir los registros equivocados. Añadir los hijos al superviviente un registro con todo EN ROUTEDESK Las paradas y notas de las dos entregas pasan a la única orden de trabajo OBTIENES Todo en un solo lugar, sencillo de usar CUESTA Se mezcla el historial del registro fusionado CUÁNDO ELEGIRLA Una fusión errónea es poco probable y el historial importa No cargar los hijos del registro fusionado un registro limpio EN ROUTEDESK Las paradas y notas del duplicado se quedan en el archivo OBTIENES Un registro limpio, y nada confuso CUESTA Ese historial desaparece de Salesforce CUÁNDO ELEGIRLA Nadie necesita ese historial en el día a día Cargarlo inactivo, vinculado al superviviente un archivo de su propio historial EN ROUTEDESK El duplicado se carga como cancelado, apuntando al superviviente, con sus paradas OBTIENES Cada hijo rastreado, nada perdido CUESTA Aparece en la búsqueda y puede confundir a los usuarios; necesita su propia clave CUÁNDO ELEGIRLA Una fusión errónea es cara y hay que rastrear cada hijo Cada fusión necesita una estrategia para los hijos. Sopesa el beneficio de unir los datos frente al riesgo de unir los registros equivocados. © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Tres maneras, ninguna gratis. Fíjate en la tercera en RouteDesk: el duplicado inactivo no puede reutilizar la clave del socio, porque ya la tiene el superviviente, así que necesita una clave propia.

Elijas la que elijas, ocurre en el almacén de preparación, antes de cargar nada. Ahí es donde se elige el superviviente, a veces un registro que ya está en Salesforce, traído con su clave. Ahí es donde cada hijo recibe la clave del padre al que apuntará. Y ahí es donde el registro fusionado conserva sus hijos, los entrega o se deja fuera. Salesforce recibe el resultado de la fusión, no el trabajo de hacerla.

¿Cómo elijo? Depende de lo críticos que sean los datos y de si necesitamos trazabilidad hasta lo que se cargó. Y sopesa el riesgo frente al beneficio de fusionar en absoluto. Unir el historial de compras de dos personas equivocadas en una lista de clientes minoristas es una molestia; mostrar la medicación de un paciente en el registro de otro es una infracción grave. Cuanto más alto es lo que está en juego en un emparejamiento erróneo, más conservadora es la fusión. Decidas lo que decidas, ¿se puede seguir rastreando cada hijo hasta su origen? Eliminar duplicados en una migración no es “ejecutar el emparejamiento de duplicados en las cuentas”. Importa todo el grafo de relaciones.

He estado al otro lado de esto. Un minorista al que le compraba desde mis tiempos de universidad estaba migrando sus datos de clientes, y cuando miramos, Steve Simpson aparecía con media docena de correos y direcciones postales: mi dirección de la universidad, la casa que alquilé, los sitios posteriores. ¿Deberíamos fusionarlos? Hay otros Steve Simpson por ahí. El negocio decidió que unir mi historial antiguo no compensaba el riesgo de fusionarme con el Steve Simpson equivocado. Esa es la pregunta que tiene que responder cada fusión: ¿cuál es el beneficio de juntar los datos, y cuál es el riesgo de elegir a las personas equivocadas?

Conocimiento para el examen. Desduplica antes de la carga, dentro de los datos entrantes y frente a lo que ya está en Salesforce, con reglas de emparejamiento y un superviviente elegido campo a campo. Espera la pregunta siguiente: ¿qué pasa con los registros hijos del registro fusionado? Volver a asignarlos al superviviente, dejarlos fuera (y archivarlos) o conservarlos en un registro inactivo vinculado. Cada opción tiene un coste.

Transformaciones repetibles, origen en bruto conservado

Sección titulada «Transformaciones repetibles, origen en bruto conservado »

El estado heredado A pasa a ser Active, I pasa a Inactive, S pasa a Suspended. ¿Dónde vive ese mapeo? No en la memoria de alguien, ni en una fórmula de Excel copiada de forma distinta en tres archivos, ni como un paso manual el viernes por la noche. Si recargamos mañana, deberíamos obtener el mismo resultado, así que los mapeos, las reglas de estandarización y limpieza, las transformaciones, las decisiones de eliminación de duplicados y la generación de claves tienen que ser reproducibles. El proceso de migración es código, aunque algunas piezas no estén escritas literalmente en un lenguaje de programación.

Y no destruyas el punto de partida. Guarda la extracción original en tablas en bruto, exactamente como salió, y no las cambies nunca. Cada paso escribe su resultado en una nueva tabla intermedia: estandarizada, limpia, desduplicada, lista para cargar. Cuando algo parece mal, quiero saber si ya estaba mal en el origen, si lo cambió nuestra transformación, si lo cambió la carga o si lo cambió después la automatización de Salesforce, y con todas las tablas conservadas puedo recorrerlas hacia atrás y averiguarlo. Sobrescribe tu única copia del origen mientras la limpias y pierdes la evidencia.

Aprendí lo mucho que compensa esto en una migración de soporte. Una empresa trasladaba su servicio de soporte de Zendesk a Salesforce, y los tickets de Zendesk se parecían mucho a los casos de Salesforce, pero no del todo. Así que cargué cada exportación de Zendesk en una base de datos SQL como tablas en bruto, una por cada estructura de Zendesk: organizaciones, usuarios, tickets, campos personalizados, comentarios, archivos adjuntos. Luego construí tablas intermedias que se acercaban cada vez más a la estructura de Salesforce, con las correspondencias de campos y de listas de selección guardadas como tablas propias. Después cargué Salesforce desde esas tablas y traje de vuelta los ID de Salesforce. Al final cada fila tenía tres cosas: su clave original de Zendesk, las transformaciones que se le habían aplicado, que nunca eran de un solo sentido, y su clave de Salesforce. Eso es lo que me permitió hacer cargas parciales y recargas siempre que lo necesité.

Este es el mismo diseño para RouteDesk, paso a paso.

Tres juegos de claves Cuatro columnas de izquierda a derecha. RouteDesk: las entregas con el número de entrega de RouteDesk como clave, los artículos de entrega con el número de artículo, las paradas con el número de parada. Las tablas en bruto del almacén de preparación, sin cambios: rd_delivery, rd_item y rd_stop, cada una tal como se extrajo, con su clave. Las tablas del almacén de preparación con forma de Salesforce: sf_work_order, con la clave del socio construida y el estado convertido; sf_work_order_line_item, con el producto asignado por SKU; sf_service_appointment, con la franja y el territorio; generadas a partir de las tablas en bruto, con las tablas de correspondencia de estado y de producto, firmadas por el negocio, en ámbar. Salesforce: las órdenes de trabajo, resaltadas, con el ID de Salesforce, la clave del socio y el número de RouteDesk, con upsert; las partidas de orden de trabajo y las citas de servicio, insertadas. Por último, flechas azul marino devuelven cada ID de Salesforce a su fila en las tablas con forma de Salesforce. Debajo: las claves del origen, las transformaciones y las claves de Salesforce, todo conservado; ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. ROUTEDESK PREPARACIÓN: EN BRUTO PREPARACIÓN: FORMA DE SALESFORCE SALESFORCE entregas clave: número de entrega de RouteDesk Artículos de entrega clave: número de artículo Paradas clave: número de parada rd_delivery tal como se extrajo, con su clave rd_item tal como se extrajo, con su clave rd_stop tal como se extrajo, con su clave extraer extraer extraer Las claves del origen, las transformaciones y las claves de Salesforce, todo conservado. Ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. CÓMO LEERLO una tabla de transformación: la regla, guardada como datos el ID de Salesforce, escrito de vuelta en su fila © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Extraer: una tabla en bruto por cada estructura de RouteDesk, cada fila con su clave de RouteDesk. Estas tablas no cambian nunca.

Tres juegos de claves Cuatro columnas de izquierda a derecha. RouteDesk: las entregas con el número de entrega de RouteDesk como clave, los artículos de entrega con el número de artículo, las paradas con el número de parada. Las tablas en bruto del almacén de preparación, sin cambios: rd_delivery, rd_item y rd_stop, cada una tal como se extrajo, con su clave. Las tablas del almacén de preparación con forma de Salesforce: sf_work_order, con la clave del socio construida y el estado convertido; sf_work_order_line_item, con el producto asignado por SKU; sf_service_appointment, con la franja y el territorio; generadas a partir de las tablas en bruto, con las tablas de correspondencia de estado y de producto, firmadas por el negocio, en ámbar. Salesforce: las órdenes de trabajo, resaltadas, con el ID de Salesforce, la clave del socio y el número de RouteDesk, con upsert; las partidas de orden de trabajo y las citas de servicio, insertadas. Por último, flechas azul marino devuelven cada ID de Salesforce a su fila en las tablas con forma de Salesforce. Debajo: las claves del origen, las transformaciones y las claves de Salesforce, todo conservado; ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. ROUTEDESK PREPARACIÓN: EN BRUTO PREPARACIÓN: FORMA DE SALESFORCE SALESFORCE entregas clave: número de entrega de RouteDesk Artículos de entrega clave: número de artículo Paradas clave: número de parada rd_delivery tal como se extrajo, con su clave rd_item tal como se extrajo, con su clave rd_stop tal como se extrajo, con su clave Tablas de correspondencia estado y producto, firmadas por el negocio sf_work_order clave del socio construida, estado convertido sf_work_order_line_item producto asignado por SKU sf_service_appointment franja y territorio extraer extraer extraer generar generar generar estado producto Las claves del origen, las transformaciones y las claves de Salesforce, todo conservado. Ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. CÓMO LEERLO una tabla de transformación: la regla, guardada como datos el ID de Salesforce, escrito de vuelta en su fila © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Generar: tablas nuevas con forma de Salesforce, construidas a partir de las tablas en bruto con las tablas de correspondencia. Las tablas en bruto siguen ahí.

Tres juegos de claves Cuatro columnas de izquierda a derecha. RouteDesk: las entregas con el número de entrega de RouteDesk como clave, los artículos de entrega con el número de artículo, las paradas con el número de parada. Las tablas en bruto del almacén de preparación, sin cambios: rd_delivery, rd_item y rd_stop, cada una tal como se extrajo, con su clave. Las tablas del almacén de preparación con forma de Salesforce: sf_work_order, con la clave del socio construida y el estado convertido; sf_work_order_line_item, con el producto asignado por SKU; sf_service_appointment, con la franja y el territorio; generadas a partir de las tablas en bruto, con las tablas de correspondencia de estado y de producto, firmadas por el negocio, en ámbar. Salesforce: las órdenes de trabajo, resaltadas, con el ID de Salesforce, la clave del socio y el número de RouteDesk, con upsert; las partidas de orden de trabajo y las citas de servicio, insertadas. Por último, flechas azul marino devuelven cada ID de Salesforce a su fila en las tablas con forma de Salesforce. Debajo: las claves del origen, las transformaciones y las claves de Salesforce, todo conservado; ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. ROUTEDESK PREPARACIÓN: EN BRUTO PREPARACIÓN: FORMA DE SALESFORCE SALESFORCE entregas clave: número de entrega de RouteDesk Artículos de entrega clave: número de artículo Paradas clave: número de parada rd_delivery tal como se extrajo, con su clave rd_item tal como se extrajo, con su clave rd_stop tal como se extrajo, con su clave Tablas de correspondencia estado y producto, firmadas por el negocio sf_work_order clave del socio construida, estado convertido sf_work_order_line_item producto asignado por SKU sf_service_appointment franja y territorio Órdenes de trabajo ID de Salesforce, clave del socio, número de RouteDesk Partidas de orden de trabajo ID de Salesforce Citas de servicio ID de Salesforce extraer extraer extraer generar generar generar estado producto upsert insert insert Las claves del origen, las transformaciones y las claves de Salesforce, todo conservado. Ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. CÓMO LEERLO una tabla de transformación: la regla, guardada como datos el ID de Salesforce, escrito de vuelta en su fila © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Cargar: las órdenes de trabajo con upsert por la clave del socio, y luego sus hijos.

Tres juegos de claves Cuatro columnas de izquierda a derecha. RouteDesk: las entregas con el número de entrega de RouteDesk como clave, los artículos de entrega con el número de artículo, las paradas con el número de parada. Las tablas en bruto del almacén de preparación, sin cambios: rd_delivery, rd_item y rd_stop, cada una tal como se extrajo, con su clave. Las tablas del almacén de preparación con forma de Salesforce: sf_work_order, con la clave del socio construida y el estado convertido; sf_work_order_line_item, con el producto asignado por SKU; sf_service_appointment, con la franja y el territorio; generadas a partir de las tablas en bruto, con las tablas de correspondencia de estado y de producto, firmadas por el negocio, en ámbar. Salesforce: las órdenes de trabajo, resaltadas, con el ID de Salesforce, la clave del socio y el número de RouteDesk, con upsert; las partidas de orden de trabajo y las citas de servicio, insertadas. Por último, flechas azul marino devuelven cada ID de Salesforce a su fila en las tablas con forma de Salesforce. Debajo: las claves del origen, las transformaciones y las claves de Salesforce, todo conservado; ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. ROUTEDESK PREPARACIÓN: EN BRUTO PREPARACIÓN: FORMA DE SALESFORCE SALESFORCE entregas clave: número de entrega de RouteDesk Artículos de entrega clave: número de artículo Paradas clave: número de parada rd_delivery tal como se extrajo, con su clave rd_item tal como se extrajo, con su clave rd_stop tal como se extrajo, con su clave Tablas de correspondencia estado y producto, firmadas por el negocio sf_work_order clave del socio construida, estado convertido sf_work_order_line_item producto asignado por SKU sf_service_appointment franja y territorio Órdenes de trabajo ID de Salesforce, clave del socio, número de RouteDesk Partidas de orden de trabajo ID de Salesforce Citas de servicio ID de Salesforce extraer extraer extraer generar generar generar estado producto upsert insert insert ID de vuelta ID de vuelta ID de vuelta Las claves del origen, las transformaciones y las claves de Salesforce, todo conservado. Ahora puedes recargar, cargar una parte o rastrear cualquier registro hasta su procedencia. CÓMO LEERLO una tabla de transformación: la regla, guardada como datos el ID de Salesforce, escrito de vuelta en su fila © 2026 Twinshark LLC · stevetecharc.com
Clic para ampliar

Claves de vuelta: cada ID de Salesforce se escribe en su fila. Ahora cada fila sabe de dónde vino, qué se le hizo y dónde acabó.

Así que ninguna transformación puede perder fidelidad. Si un paso descarta información (recorta una nota, elimina un código que no reconoció, se queda con uno de dos valores contradictorios sin decir cuál), no puedo rastrear hacia atrás a través de él, y no puedo repetir la ejecución y obtener la misma respuesta. Conserva las tablas en bruto, conserva las tablas intermedias, conserva lo que envió cada carga y lo que volvió. Entonces puedes volver a ejecutarlo todo desde la extracción en bruto en cualquier momento, y tienes el historial de cada carga. Esta es la versión de la migración del linaje: conserva de dónde vinieron los datos y qué les hiciste.

A veces la preparación está dentro de Salesforce

Sección titulada «A veces la preparación está dentro de Salesforce »

El almacén de preparación no es el único lugar donde preparar. En unos pocos casos especiales, la última parada antes de los objetos reales es un objeto personalizado sencillo dentro de Salesforce: una fila plana por registro de origen, sin automatización, cargado rápido. Luego un proceso por lotes recorre las filas y construye los registros reales. Lo he usado cuando la propia lógica de Salesforce tenía que crear los registros y era demasiado lenta para cargar a través de ella: un proceso de programación que tardaba unos segundos por cita. El módulo 3 vuelve sobre ese caso.

Salesforce usa el mismo patrón en sus propios productos, y vale la pena aprender de él. Nonprofit Success Pack carga primero una hoja de cálculo en su objeto NPSP Data Import. Una ejecución de prueba busca coincidencias sin crear nada. Luego el importador crea las cuentas, los contactos y las donaciones, y escribe el ID de cada registro nuevo en la fila de la que procede (How the Import Process Works (se abre en una pestaña nueva), Salesforce Help, consultado el 2026-10-27). Es una referencia, no una regla: preparar dentro de Salesforce es el caso especial, no la forma de cargarlo todo.

Para RouteDesk, un traslado de una sola vez con mucha limpieza y fusión, el almacén de preparación fuera de Salesforce hace el trabajo, y la carga envía el resultado.

Los registros malos necesitan un lugar adonde ir

Sección titulada «Los registros malos necesitan un lugar adonde ir »

De 500.000 registros, 497.800 superan la validación y 2.200 no. ¿Los descartamos en silencio? No. ¿Metemos basura a la fuerza en los campos obligatorios? No. ¿Detenemos el proyecto hasta que cada registro histórico sea perfecto? Probablemente no. Quiero una cuarentena y un camino de corrección que registren qué registro de origen falló, por qué, qué regla lo rechazó, si hay que corregirlo antes del corte, quién es responsable de la decisión y si puede aplazarse. Ahora las excepciones son trabajo de arquitectura visible en lugar de pérdida de datos oculta.

Antes de llamar malo a un registro, mira la regla que lo rechazó. A veces el registro está bien y la regla está mal. El marco Well-Architected de Salesforce lo dice claramente: “las decisiones de arquitectura de datos determinan qué poblaciones se vuelven visibles, e invisibles”, y un correo electrónico obligatorio “excluye a las poblaciones que no tienen acceso fiable a internet ni direcciones de correo electrónico personales” (Fairness (se abre en una pestaña nueva), consultado el 2026-10-27). RouteDesk tiene miles de entregas en las que el destinatario solo dio un número de teléfono. Si la nueva orden de trabajo exige un correo electrónico, esos no son registros malos. Son personas reales a las que la regla volvería invisibles. Arregla la regla, no a la persona.

Luego demuestra la transformación antes de la carga. ¿Con cuántos registros de origen empezamos, cuántos excluimos a propósito, cuántos duplicados se consolidaron, cuántos están listos, cuántos en cuarentena, cuántas relaciones padre-hijo se resuelven, y cuáles son los totales de control? Si las cifras no cuadran antes de la carga, cargar más rápido no ayudará. El módulo 4 demuestra la migración con recuentos, totales, comprobaciones puntuales e informes agregados, pero la prueba empieza aquí.

La IA puede ayudar a limpiar. No puede inventarse la verdad.

Sección titulada «La IA puede ayudar a limpiar. No puede inventarse la verdad. »

La IA es útil en la migración: sugerir mapeos, encontrar valores sospechosos, agrupar posibles duplicados, detectar anomalías, generar código de transformación, explicar patrones en los registros rechazados. Pero si un proceso de enriquecimiento decide “esta empresa probablemente está en Arizona”, probablemente no basta. Y si decide que dos clientes se parecen lo suficiente como para fusionarlos, recuerda el capítulo 6: un falso emparejamiento puede hacer más daño que quedarse corto emparejando. Usa la IA para acelerar la investigación. No dejes que fabrique en silencio datos de la empresa con autoridad.

Más allá del examen: lo que cambia la IA. La IA puede acelerar drásticamente el perfilado, el mapeo, la detección de anomalías y el emparejamiento de candidatos durante una migración. Mantén reglas deterministas, procedencia y revisión humana en torno a las decisiones que crean, fusionan o alteran datos de negocio con autoridad.

  • Qué datos del origen se migran, se archivan o se excluyen, según el valor de negocio y los requisitos de retención.
  • Dónde ocurre la preparación (un almacén de preparación fuera de Salesforce, un objeto de staging dentro, o ambos), y qué partes de la organización de destino se traen para fusionar con ellas.
  • Cómo se estandarizan, limpian, enriquecen, depuran de duplicados y validan los datos antes de entrar en el destino.
  • Qué identificadores de origen y qué linaje sobreviven, para que cada registro de destino importante pueda rastrearse y conciliarse.
  • El orden de carga que dicta el modelo de datos de destino, y las claves que usa cada hijo para encontrar a su padre.
  • Cómo tratan las decisiones de eliminación de duplicados los campos y los hijos en todo el grafo de relaciones, sopesadas según la criticidad, la trazabilidad y el riesgo de una fusión errónea.
  • Qué reglas de transformación y de gestión de excepciones deben ser repetibles antes de que empiece cualquier carga en producción.

No midas la migración por las filas cargadas

Sección titulada «No midas la migración por las filas cargadas »

“Cargamos 500.000 de 500.000 registros” me dice que el cargador funcionó. Yo quiero saber: ¿movimos los datos correctos, mejoramos lo que había que mejorar, preservamos la identidad y las relaciones, consolidamos los duplicados con seguridad? ¿Podemos explicar lo que excluimos, reproducir la transformación, rastrear un registro de Salesforce hasta su origen y demostrar el resultado? Haz primero ese trabajo. Luego ya nos preocuparemos de lo rápido que podemos cargarlo.