Files
upstream-twenty/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
upstream-mirror e7da97194a
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
2026-09-17 23:28:13 +05:00

226 lines
10 KiB
Plaintext

---
title: Importar relaciones entre objetos mediante CSV
description: Guía completa paso a paso para vincular registros durante la importación de CSV.
---
## Resumen
Esta guía explica cómo importar relaciones entre objetos—por ejemplo, vincular Personas con Empresas u Oportunidades con Personas.
<Note>**Qué se puede importar:** Solo relaciones de uno a muchos que apunten a un único tipo de objeto. Las relaciones que apuntan a varios tipos de objeto (como Notas vinculadas a Personas Y Empresas) aún no son compatibles con la importación.</Note>
## Comprender las relaciones
### ¿Qué es una relación "de uno a muchos"?
En una relación de uno a muchos:
* **Una** Empresa tiene **muchas** Personas (empleados)
* **Una** Empresa tiene **muchas** Oportunidades
* **Una** Persona tiene **muchas** Tareas
El lado "uno" es el **padre**. El lado "muchos" es el **hijo**.
### Relaciones comunes en Twenty
| Relación | Lado "Uno" (Padre) | Lado "Muchos" (Hijo) |
| ------------------------ | ------------------ | -------------------- |
| Empresas → Personas | Empresa | Personas |
| Empresas → Oportunidades | Empresa | Oportunidades |
| Personas → Tareas | Persona | Tareas |
| Personas → Notas | Persona | Notas |
## Paso 1: Identificar los lados "Uno" y "Muchos"
Antes de importar, determine qué objeto es el padre y cuál es el hijo.
**Pregúntese:** "¿UNO [Objeto A] tiene MUCHOS [Objeto B]?"
* Una Empresa → Muchas Personas ✓ (la Empresa es el padre)
* Una Persona → Muchas Empresas ✗ (Esto es incorrecto: una persona pertenece a una sola empresa)
## Paso 2: Importar primero los registros padre
El padre (lado "uno") debe existir en Twenty antes de poder hacer referencia a él.
**Orden de importación:**
1. **Empresas** primero (sin dependencias)
2. **Personas** en segundo lugar (enlazadas a Empresas)
3. **Oportunidades** en tercer lugar (enlazadas a Empresas y/o Personas)
4. **Tareas/Notas** (enlazadas a cualquiera de las anteriores)
<Warning>
**Si el registro padre no existe, la importación fallará.**
Verifique siempre que las Empresas estén importadas antes de importar Personas con referencias a Empresas.
</Warning>
## Paso 3: Anotar el identificador único del padre
Debe hacer referencia al registro padre mediante un **identificador único**. Opciones disponibles:
| Objeto padre | Identificadores únicos disponibles |
| ----------------------------------- | ------------------------------------------------------------------------- |
| **Empresas** | `id` (UUID), `domain` (recomendado) o cualquier campo único personalizado |
| **Personas** | `id` (UUID), `email` o cualquier campo único personalizado |
| **Miembros del espacio de trabajo** | `id` (UUID), `email` (no el nombre) |
| **Objetos personalizados** | `id` (UUID) o cualquier campo marcado como único |
<Note>**Recomendado:** Use `domain` para Empresas y `email` para Personas. Son legibles para humanos y fáciles de verificar en su hoja de cálculo.</Note>
### Cómo encontrar el identificador
Si necesita el `id`:
1. Exporte los registros padre desde Twenty
2. La exportación incluye la columna `id`
3. Use estos IDs en su archivo de registros hijo
## Paso 4: Verificar que el campo de relación exista
Antes de importar, asegúrese de que exista el campo de relación entre sus objetos.
**Para revisar o crear:**
1. Vaya a **Configuración → Modelo de datos**
2. Seleccione su objeto hijo (p. ej., Personas)
3. Busque un campo de relación que apunte al padre (p. ej., Empresa)
4. Si no existe, créelo:
* Haga clic en **+ Add field**
* Seleccione el tipo **Relation**
* Elija el objeto padre
## Paso 5: Preparar su archivo CSV
Agregue una columna a su archivo CSV de registros hijo que haga referencia al padre utilizando su identificador único.
### Ejemplo: Personas vinculadas a Empresas
**Su CSV de Personas:**
```csv
firstName,lastName,email,jobTitle,companyDomain
John,Smith,john@acme.com,CEO,https://acme.com
Jane,Doe,jane@widgets.co,CTO,https://widgets.co
Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
```
La columna `companyDomain` hace referencia al dominio de la Empresa.
### Requisitos de formato
| Identificador | Formato | Ejemplo |
| ------------------ | --------------------------- | -------------------------------------- |
| Dominio | Formato de URL | `https://acme.com` |
| Correo electrónico | Correo electrónico estándar | `john@acme.com` |
| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Warning>
**¡El formato del dominio importa!**
Use `https://domain.com` (no solo `domain.com`). Esto coincide con cómo Twenty almacena los dominios de las Empresas y evita errores de coincidencia.
</Warning>
### Reglas importantes
1. **Se requiere coincidencia exacta** — el valor debe coincidir exactamente con el registro padre
2. **Asigne solo UN identificador único** — no incluya `companyId` Y `companyDomain`
3. **Sensible a mayúsculas/minúsculas** — `Acme.com` ≠ `acme.com`
## Paso 6: Cargar y asignar la relación
1. Vaya al objeto hijo (p. ej., Personas)
2. Haga clic en **⋮** → **Importar registros**
3. Cargue su archivo CSV
4. En el paso de asignación de campos:
* Encuentre su columna de relación (p. ej., `companyDomain`)
* Asígnela al campo de relación **Company**
5. Complete las asignaciones restantes
6. Revise los errores y confirme
Twenty vinculará automáticamente cada registro hijo con el padre correspondiente.
## Paso 7: Verificar la importación
Después de importar:
1. Abra algunos registros hijo (p. ej., Personas)
2. Verifique que el campo de relación muestre el padre correcto (p. ej., Empresa)
3. Abra un registro padre y revise la sección de registros relacionados
## Errores comunes que se deben evitar
| Error | Problema | Solución |
| ----------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------- |
| **Orden de importación incorrecto** | Importar Personas antes que Empresas | Importe siempre primero los padres y luego los hijos |
| **Formato de dominio incorrecto** | Usar `acme.com` en lugar de `https://acme.com` | Use el formato de URL completo con `https://` |
| **Varios campos únicos** | Asignar ambos `companyId` Y `companyDomain` | Asigne solo UN identificador único |
| **Falta el campo de relación** | El campo de relación no existe en el modelo de datos | Créelo en **Configuración → Modelo de datos** antes de importar |
| **Registros inexistentes** | El registro padre no existe en Twenty | Importe primero los registros padre o verifique si hay errores tipográficos |
| **Diferencia de mayúsculas y minúsculas** | `Acme.com` en el archivo pero `acme.com` en Twenty | Asegure una coincidencia exacta de mayúsculas y minúsculas |
## Vincular a miembros del espacio de trabajo
Al vincular a miembros del espacio de trabajo (su equipo):
* Use su **dirección de correo electrónico**, no su nombre
* Ejemplo: `owner@yourcompany.com`, no "John Smith"
```csv
taskName,assignedTo
Follow up with client,john@yourcompany.com
Review proposal,jane@yourcompany.com
```
## Preguntas frecuentes
<AccordionGroup>
<Accordion title="¿Qué pasa si mi registro padre no tiene dominio ni correo electrónico?">
Tiene dos opciones:
1. Use el `id` de Twenty (exporte los registros padre para obtener sus IDs)
2. Cree un campo único personalizado en su modelo de datos para almacenar un ID externo de su sistema anterior
</Accordion>
<Accordion title="¿Puedo actualizar relaciones en registros existentes?">
¡Sí! Incluya el identificador único del registro hijo (p. ej., `email` para Personas) y el nuevo valor de la relación. La importación actualizará la relación.
</Accordion>
<Accordion title="¿Puedo importar relaciones de muchos a muchos?">
Las relaciones de muchos a muchos aún no son compatibles con la importación. Está previsto para el primer semestre de 2026.
</Accordion>
<Accordion title="¿Puedo vincular a varios tipos de objeto (como Notas a Personas Y Empresas)?">
Las relaciones que apuntan a varios tipos de objeto aún no son compatibles con la importación/exportación. Esto está en nuestra hoja de ruta.
</Accordion>
<Accordion title="¿Qué ocurre si un registro padre no existe?">
La importación mostrará un error para esa fila. Puedes hacerlo de las siguientes maneras:
* Importe el registro padre primero y luego vuelva a importar
* Corrija el valor de la referencia
* Elimine la fila de la importación
</Accordion>
<Accordion title="¿Por qué mi relación no se vincula correctamente?">
Causas comunes:
* Formato incorrecto (use `https://domain.com` para dominios)
* Diferencia de mayúsculas y minúsculas (verifique la ortografía exacta)
* El padre no existe (importe primero los padres)
* Asignar varios identificadores (use solo uno)
</Accordion>
</AccordionGroup>
<Warning>
**Recuerde: los registros eliminados lógicamente cuentan para la unicidad.**
Si recibe errores de "no encontrado" pero el registro parece existir, consulte Menú de comandos → Ver registros eliminados. Es posible que el padre haya sido eliminado lógicamente.
</Warning>
## Solución de Problemas
¿Tiene problemas? Revise:
* [Cómo corregir errores de importación](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
* [Capacidades de importación de relaciones](/l/es/user-guide/data-migration/capabilities/import-relations)
* [Restricciones de unicidad](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)