snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
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

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
---
title: Gestion des erreurs et validation
description: Examinez et corrigez les erreurs d'importation directement dans l'interface avant de confirmer.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Validation préalable à l'importation
Après avoir téléversé votre fichier et fait la correspondance des champs, Twenty valide vos données **avant** l'importation. Cela vous permet de détecter et de corriger les erreurs sans affecter vos données existantes.
## Comment ça marche
1. **Téléversez** votre fichier CSV
2. **Faites correspondre** vos colonnes aux champs de Twenty
3. **Passez en revue** les erreurs potentielles mises en évidence en jaune
4. **Corrigez les erreurs** directement dans l'interface
5. **Confirmez** l'importation
<VimeoEmbed videoId="1145273857" title="Démonstration vidéo" />
## Affichage des erreurs
Les lignes présentant des problèmes sont mises en évidence en **jaune**. Vous pouvez :
* **Modifiez la cellule directement** pour corriger l'erreur
* **Supprimez la ligne** pour l'ignorer complètement
Cette modification en ligne vous fait gagner du temps — inutile de revenir à votre feuille de calcul, de corriger les erreurs et de téléverser à nouveau.
## Types d'erreurs courants
### Valeurs en double
**Cause** : Un champ unique (email, domaine) existe déjà dans Twenty ou apparaît deux fois dans votre fichier.
**Correctif** :
* Modifiez la valeur en double dans l'interface d'importation
* Supprimez l'une des lignes en double
Voir [Contraintes d'unicité](/l/fr/user-guide/data-migration/capabilities/uniqueness-constraints) pour plus de détails sur la façon dont l'unicité est appliquée.
### Format invalide
**Cause** : Les données ne correspondent pas au format attendu (p. ex., email invalide, format de date incorrect).
**Correctif** : Modifiez la cellule pour utiliser le format correct.
Voir [Correspondance des champs](/l/fr/user-guide/data-migration/capabilities/field-mapping) pour le format attendu de chaque type de champ.
### Champs obligatoires manquants
**Cause** : Un champ obligatoire est vide.
**Correctif** : Saisissez une valeur dans le champ obligatoire ou supprimez la ligne.
### Relation introuvable
**Cause** : L'enregistrement référencé n'existe pas (p. ex., un domaine d'entreprise qui n'a pas été importé).
**Correctif** :
* Importez d'abord les enregistrements parents
* Ou corrigez la valeur de référence
Voir [Importation des relations](/l/fr/user-guide/data-migration/capabilities/import-relations) pour l'ordre d'importation correct et la manière de lier les enregistrements.
## Conseils pour réduire les erreurs
1. **Téléchargez le modèle** pour voir le format attendu avant d'importer votre fichier
2. **Nettoyez vos données** d'abord dans votre feuille de calcul
3. **Importez les fichiers dans le bon ordre** pour importer les relations (Entreprises → Personnes → Opportunités)
4. **Testez avec de petits lots** avant l'importation complète
5. **Vérifiez les doublons** avant de téléverser
6. **Limiter chaque fichier à 10 000 enregistrements**

View File

@@ -0,0 +1,198 @@
---
title: Mappage des champs
description: Comment fonctionne la cartographie des champs pendant l'importation des données.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Comment fonctionne la cartographie des champs
Lorsque vous téléchargez un fichier, 20 analysent vos colonnes et tentent de les faire correspondre aux champs existants.
### Mappage automatique
Vingt tentatives de faire correspondre les colonnes basées sur:
* Noms d'en-tête de colonne (correspondances exactes ou similaires)
* Détection du type de données (dates, chiffres, emails)
* Modèles de champs communs
<Note>**Astuce rapide:** Exporter quelques lignes depuis l'objet que vous voulez importer. Le fichier exporté aura le nom exact des colonnes à 20 attendus, rendant le mappage automatique sans problème pendant l'importation.</Note>
### Options de mappage manuel
Pour chaque colonne, vous pouvez:
* **Mapper à un champ**: Sélectionnez le champ correspondant à 20 dans un menu déroulant
* **Ne pas mapper** : Ignorer entièrement la colonne (les données ne seront pas importées)
<Note>**Les champs doivent exister avant l'importation.** L'importation crée des enregistrements, pas des champs. Créez des champs personnalisés sous **Paramètres → Modèle de données** avant d'importer.</Note>
## Compatibilité du type de champ
Tous les types de champs disponibles dans le Modèle de Données sont pris en charge pour l'importation.
Vous pouvez également importer des valeurs `id` pour assigner un ID spécifique à de nouveaux enregistrements ou mettre à jour les valeurs existantes.
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## Exigences du format de données
<Note>**Certains champs ont une syntaxe spéciale.** Nous vous recommandons de télécharger le fichier d'exemple avant de préparer votre importation afin de voir la syntaxe attendue pour chaque type de champ.</Note>
### Champs d'adresse
L'adresse est un champ imbriqué avec plusieurs colonnes. Certains peuvent être laissés vides.
* **Adresse / Adresse 1**: Rue ligne 1
* **Adresse / Adresse 2** : Rue ligne 2
* **Adresse / Ville** : Nom de la Ville
* **Adresse / État** : État ou province
* **Adresse / Pays** : Nom du pays
* **Adresse / Code postal**: Code postal
### Champs de tableau
Utilisez le format suivant :
```
["value1","value2"]
```
### Champs booléens
Utilisez `TRUE` ou `FALSE` (majuscule) - pas `true` ou `false`
### Champs de la devise
La devise est un champ imbriqué avec deux colonnes qui **doivent être remplies**:
* **Montant / Montant** : La valeur numérique (par exemple, `1234.56`)
* **Montant / Devise** : Le code de la devise (par exemple, `USD`, `EUR`)
### Champs de date
Formats pris en charge :
* `YYYY-MM-DD` (recommandé)
* `MM/DD/YYYYY`
* `JJ/MM/YYYY`
* ISO 8601 format
### Champs de domaine
* Il est recommandé d'utiliser le format `https://domain. om` pour éviter de créer des doublons, car c'est le format utilisé pour les entreprises créées par la boîte aux lettres et les synchronisations de calendrier
* Un `label de domaine` et `URL de domaine` peuvent être remplis : la meilleure pratique est de remplir `domain.com` dans l'étiquette et `https://domain.com` dans l'url
* Les domaines doivent être uniques au sein de l'objet Entreprises
* **Les domaines doivent être uniques dans le fichier à importer**
### Champs e-mail
* Doit être un format d'email valide
* Les e-mails doivent être uniques dans l'objet People
* **Les e-mails doivent être uniques dans le fichier à importer**
* Pour les e-mails supplémentaires: utilisez **Emails / Courriel Primaire** pour l'e-mail principal, et **Emails / E-mails Supplémentaires** avec ce format:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Champs ID
Spécifier un `id` pendant l'importation est optionnel. Vingt auto-génère une si elle n'est pas fournie.
Utiliser des cas pour mapper une colonne `id`:
* **Définit un ID spécifique** : Choisissez l'UUID pour les enregistrements nouvellement créés
* **Mettre à jour les enregistrements existants**: Faites correspondre avec les enregistrements existants pour les mettre à jour au lieu de créer des doublons. Dans ce cas, il est recommandé de ne pas cartographier les autres champs uniques: la cartographie d'un seul champ unique garantit une importation plus fluide.
<Note>Si vous fournissez un `id`, il doit être au format UUID (par exemple, `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
### Champs JSON
Utiliser un format JSON valide :
```
{"key":"value","key2":"value2"}
```
### Champs de liens
Semblable aux champs de domaine:
* Remplissez à la fois le libellé et les colonnes d'URL : **Liens / URL de liaison** et **Liens / Étiquette de lien**
* Utiliser le format complet de l'URL : `https://example.com`
* Pour les liens secondaires, utilisez la colonne **Liens / Liens secondaires** avec ce format :
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### Champs à sélection multiple
Utilisez les **noms de l'API** (pas les libellés d'affichage) dans le format suivant :
```
["VALUE1","VALUE2"]
```
Voir [here](#finding-api-names-for-select-fields) où trouver les noms de l'API.
<Note>Les nouvelles options de sélection ne seront pas créées automatiquement par l'importation. Ils doivent être ajoutés dans **Paramètres → Modèle de données** avant d'importer.</Note>
<Warning>
**Écraser l'import ; il ne l'ajoute pas.**
Si un enregistrement a déjà `VALUE2` et `VALUE3` sélectionnés, et que vous importez `["VALUE1"]`, l'enregistrement n'aura `VALUE1` qu'après l'importation. Les sélections précédentes sont remplacées, non fusionnées.
</Warning>
### Nombre de champs
* Numéros uniquement
* Les décimales utilisent la période: `1234.56`
* Pas de milliers de séparateurs
### Champs du téléphone
Le téléphone est un champ imbriqué avec plusieurs colonnes qui **doivent être remplies**
* **Téléphones / Numéro de téléphone principal**: le numéro de téléphone (par exemple, `4159095555`)
* **Téléphones / Code de pays de téléphone principal**: Code pays (par exemple, `US`)
* **Téléphones / Code d'appel téléphonique principal**: Code d'appel (par exemple, `+1`)
### Champs d'évaluation
Utilisez le format du nom de l'API: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
### Champs de relation
Veuillez consulter notre article dédié : [Importer des relations entre les objets](/l/fr/user-guide/data-migration/capabilities/import-relations)
### Champs de sélection
Utilisez le **nom de l'API** de l'option (pas l'étiquette d'affichage) :
```
VALUE1
```
Voir [ici](#finding-api-names-for-select-fields) où trouver les noms d'API.
<Note>Les nouvelles options de sélection ne seront pas créées automatiquement par l'importation. Elles doivent être ajoutées sous **Paramètres → Modèle de données** avant l'importation.</Note>
### Champs de texte
* Aucun formatage particulier requis
* Les espaces au début et à la fin sont supprimés
## Recherche des noms d'API
Pour les champs Select, Multi-Select et Array avec des options prédéfinies, vous devez utiliser les **noms d'API**, et non les libellés affichés.
### Comment trouver les noms d'API
1. Allez dans **Paramètres → Modèle de données**
2. Sélectionnez l'objet et le champ
3. Activez le **mode avancé** (bouton à bascule en bas à droite de la page des paramètres)
4. Affichez le nom d'API pour chaque option
<VimeoEmbed videoId="1144910809" title="Démonstration vidéo" />

View File

@@ -0,0 +1,48 @@
---
title: Formats de fichiers pris en charge
description: Formats de fichiers pris en charge pour l’importation de données dans Twenty.
---
## Formats pris en charge
Twenty prend en charge trois formats de fichiers pour l’importation :
| Format | Extension | Notes |
| ------------------ | --------- | ------------------------------ |
| **CSV** | .csv | Recommandé, le plus compatible |
| **Excel** | .xlsx | Format Excel moderne |
| **Excel (hérité)** | .xls | Ancien format Excel |
## Exigences relatives aux fichiers
| Exigence | Valeur |
| ---------------------------- | -------------------------------------------------------- |
| **Encodage** | UTF-8 recommandé |
| **Limite d’enregistrements** | 10 000 enregistrements par fichier |
| **Structure** | La première ligne doit contenir les en-têtes de colonnes |
| **Contenu** | Un seul type d’objet par fichier |
## Meilleures pratiques pour les fichiers CSV
* **Délimiteur** : Utilisez une virgule (`,`) ou un point-virgule (`;`)
* **Délimiteur de texte** : Utilisez des guillemets doubles (`"`) pour le texte contenant des virgules
* **Fins de ligne** : Windows (CRLF) ou Unix (LF) sont tous deux pris en charge
* **Valeurs vides** : Laissez les cellules vides, n’utilisez pas "NULL" ni "N/A"
## Meilleures pratiques pour Excel
Lors de l’exportation depuis Excel :
* Supprimez les formules (exportez uniquement les valeurs)
* Supprimez les lignes vides à la fin
* Assurez-vous qu’aucune cellule n’est fusionnée
* Utilisez uniquement la première feuille
## Jeux de données volumineux
Pour les jeux de données de plus de 10 000 enregistrements :
* Divisez en plusieurs fichiers
* Ou utilisez l’[importation via l’API](/l/fr/user-guide/data-migration/how-tos/import-data-via-api) pour un nombre illimité d’enregistrements
<Note>Pour des migrations très volumineuses (plus de 100 000 enregistrements), l’API est nettement plus rapide et plus fiable que les importations CSV.</Note>

View File

@@ -0,0 +1,148 @@
---
title: Importer des relations entre objets
description: Importer des relations entre enregistrements via CSV.
---
## Vue d'ensemble
Twenty prend en charge l'importation de relations entre objets lors de l'importation CSV. Cela vous permet de lier des enregistrements (p. ex., associer des Personnes à des Entreprises) dans le cadre de votre migration de données.
<Note>**Actuellement pris en charge pour l'importation** : Relations un-à-plusieurs pointant vers un seul type d'objet de chaque côté (p. ex., Personnes → Entreprises). Les relations pointant vers plusieurs types d'objet ne sont pas encore prises en charge pour l'import/export.</Note>
## Fonctionnement des relations dans Twenty
### Un à plusieurs / Plusieurs à un
Twenty prend en charge des relations standard où un enregistrement est lié à plusieurs autres :
* **Une Entreprise → Plusieurs Personnes** : Une entreprise peut avoir plusieurs employés, mais chaque personne appartient à une seule entreprise
* **Une Entreprise → Plusieurs Opportunités** : Une entreprise peut avoir plusieurs affaires, mais chaque opportunité appartient à une seule entreprise
### Relations pouvant pointer vers plusieurs types d'objet
Certaines relations peuvent se connecter à différents types d'objets. Cela fonctionne de deux façons :
**Modèle 1 : De nombreux enregistrements liés chacun à un enregistrement provenant de différents types d'objets**
Plusieurs Notes ou Tâches peuvent chacune être attachées à plusieurs types d'objets à la fois :
* **Notes** peuvent être liées à une Personne, une Entreprise et une Opportunité simultanément
* **Tâches** peuvent être liées à une Personne, une Entreprise et une Opportunité simultanément
Ici, les Notes/Tâches sont du côté "plusieurs". Chacune est liée à un enregistrement par type d'objet.
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
**Modèle 2 : Un enregistrement recevant des liens de nombreux enregistrements de différents types d'objets**
Un Projet peut recevoir des liens de plusieurs enregistrements provenant de différents types d'objets :
* **Un Projet** peut avoir de nombreuses Personnes qui lui sont liées, de nombreuses Entreprises qui lui sont liées, et de nombreuses Notes qui y sont rattachées
Ici, le Projet est du côté "un". Plusieurs enregistrements issus d'objets différents peuvent tous être liés au même Projet.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**Limitation d'import/export** : Les relations qui pointent vers plusieurs types d'objet (comme Notes → Personnes/Entreprises/Opportunités) ne sont **pas encore prises en charge** lors de l'import ou de l'export CSV.
* **Import** : Seules les relations un-à-plusieurs pointant vers un seul type d'objet de chaque côté peuvent être importées
* **Export** : Les colonnes pour les relations pointant vers plusieurs types d'objet sont actuellement laissées vides
C'est sur notre feuille de route.
</Warning>
### Ce qui n'est pas pris en charge aujourd'hui
**Les relations plusieurs à plusieurs** ne sont pas encore disponibles. Par exemple, vous ne pouvez pas actuellement créer une relation où :
* De nombreuses Personnes sont liées à de nombreux Projets
<Note>Beaucoup à de nombreuses relations sont prévues pour H2 2026.</Note>
## Lier des enregistrements lors de l'importation
<Note>**Rappel** : Seules les relations un-à-plusieurs pointant vers un seul type d'objet peuvent être importées (p. ex., Personnes → Entreprises). Les relations pointant vers plusieurs types d'objet (p. ex., Notes → Personnes/Entreprises/Opportunités) ne sont pas encore prises en charge.</Note>
### Étape 1 : Identifier les côtés "un" et "plusieurs"
Commencez par déterminer quel objet est du côté "un" et lequel est du côté "plusieurs" de la relation.
**Exemple**:
* **Entreprise** est le côté "un" (une entreprise a de nombreux employés)
* **Personnes** est le côté "plusieurs" (chaque personne appartient à une seule entreprise)
### Étape 2 : Assurez-vous que les enregistrements du côté "un" existent
Avant d'importer le côté "plusieurs", les enregistrements du côté "un" doivent déjà exister dans Twenty.
* Importez ou créez d'abord les enregistrements du côté "un" (p. ex., Entreprises)
* Validez leur identifiant unique. Cela peut être :
* L'`id` (UUID de Twenty)
* Un champ défini comme unique (p. ex., `domain` pour les Entreprises, ou un identifiant externe provenant de votre système précédent)
<Warning>L'importation échouera si une référence est faite à un enregistrement inexistant.</Warning>
### Étape 3 : Préparer votre fichier CSV
Ajoutez une colonne dans votre fichier CSV du côté "plusieurs" qui référence l'enregistrement du côté "un".
**Exemple** : Pour un fichier CSV Personnes lié aux Entreprises :
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**Important** :
* La valeur doit **correspondre exactement** au champ unique de l'enregistrement de l'Entreprise
* Pour les domaines, utilisez l'**URL de domaine** (p. ex., `https://acme.com`), pas le libellé de domaine
* N'associez qu'**un seul** identifiant unique par relation : cela rendra l'importation plus fluide
### Étape 4 : Vérifier que le champ de relation existe
Avant de téléverser votre fichier, assurez-vous que le champ de relation existe entre vos objets.
S'il n'existe pas :
1. Allez dans **Paramètres → Modèle de données**
2. Sélectionnez votre objet (p. ex., Personnes)
3. Créez un champ de relation pointant vers l'objet cible (p. ex., Entreprise)
### Étape 5 : Téléverser et associer la relation
1. Téléversez votre fichier CSV via l'interface d'importation
2. À l'étape de correspondance des champs, trouvez votre colonne de relation (p. ex., `companyDomain`)
3. Associez-la au champ de relation (p. ex., Entreprise)
4. Twenty liera automatiquement chaque enregistrement au parent correspondant
### Champs uniques disponibles pour les relations
| Objet | Champs uniques disponibles |
| ------------------------------------------- | ---------------------------------------------- |
| **Entreprises** | `id`, `domain`, tout champ unique personnalisé |
| **Personnes** | `id`, `email`, tout champ unique personnalisé |
| **Membres de l'espace de travail** | `id`, `email` (pas le nom) |
| **Autres objets standard et personnalisés** | `id`, tout champ marqué comme unique |
<Note>**Liaison vers les membres de l'espace de travail** : Lorsque la relation pointe vers des membres de l'espace de travail (votre équipe se connectant à Twenty), référencez-les par leur **adresse e-mail**, et non par leur nom.</Note>
<Note>Nous recommandons d'utiliser `domain` pour les Entreprises et `email` pour les Personnes, car ces valeurs sont lisibles par l'humain et faciles à maintenir dans les feuilles de calcul.</Note>
<Note>**Rappel** : Les enregistrements supprimés de manière logique (visibles sous Menu Commandes → Voir les enregistrements supprimés) comptent pour les critères d'unicité. Si vous importez un enregistrement avec la même valeur unique qu'un enregistrement supprimé, l'enregistrement supprimé sera restauré. Voir [Contraintes d'unicité](/l/fr/user-guide/data-migration/capabilities/uniqueness-constraints) pour plus de détails.</Note>
## Règle d'ordre d'importation
<Warning>
**Importez toujours d'abord le côté "un" !**
1. **Entreprises** d'abord (aucune dépendance)
2. **Personnes** en second (liées aux Entreprises)
3. **Opportunités** en troisième (liées aux Entreprises/Personnes)
4. **Objets personnalisés** en suivant leurs dépendances
L'enregistrement parent doit exister avant que vous puissiez y faire référence.
</Warning>

View File

@@ -0,0 +1,72 @@
---
title: Contraintes d'unicité
description: Comment Twenty impose l'unicité des données lors de l'importation.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Vue d'ensemble
Twenty impose l'unicité sur certains champs afin d'éviter les doublons et d'assurer l'intégrité des données. Comprendre ces contraintes est essentiel pour des importations réussies.
## Champs uniques par défaut
| Objet | Champs uniques |
| ------------------------ | ---------------------------- |
| **Personnes** | `id`, `email` |
| **Entreprises** | `id`, `domain` |
| **Objets personnalisés** | `id` uniquement (par défaut) |
<Note>Le champ `id` est l'identifiant interne de Twenty, généré automatiquement pour chaque enregistrement. Il utilise le format UUID (par exemple, `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
## Champs uniques personnalisés
Vous pouvez définir des champs uniques supplémentaires sous **Paramètres → Modèle de données** :
1. Allez dans **Paramètres → Modèle de données**
2. Sélectionnez l'objet
3. Cliquez sur un champ
4. Activez **Unique** dans les paramètres du champ
### Cas d'utilisation pour les champs uniques personnalisés
* **ID externes** : Stockez les ID provenant d'autres systèmes (Salesforce ID, HubSpot ID)
* **Identifiants métier** : Numéros d'employé, codes client
* **Coordonnées alternatives** : Profil LinkedIn, numéro de téléphone
<Note>Le nom de champ `id` est réservé à l'ID interne de Twenty. Utilisez un nom différent comme `externalId` ou `legacyId` pour les identifiants externes.</Note>
## Comportement de l'importation
### Création de nouveaux enregistrements
Si la valeur d'un champ unique n'existe pas, un nouvel enregistrement est créé.
### Mise à jour des enregistrements existants
Si la valeur d'un champ unique correspond à un enregistrement existant, cet enregistrement est **mis à jour** avec les nouvelles données.
<Warning>Pour **mettre à jour des enregistrements existants**, il est recommandé de **ne faire correspondre qu'un seul champ unique**.</Warning>
### Enregistrements supprimés de manière logique
<Warning>
**Les enregistrements supprimés de manière logique comptent pour l'unicité.**
Les enregistrements supprimés de manière logique (visibles sous Menu Commandes → Voir les enregistrements supprimés) sont inclus dans les vérifications d'unicité. Si vous importez un enregistrement avec la même valeur unique qu'un enregistrement supprimé, l'enregistrement supprimé sera **restauré** avec les nouvelles données.
</Warning>
## Détection des doublons lors de l'importation
Pendant la phase de validation :
* Les doublons dans votre fichier sont surlignés en jaune
* Vous pouvez modifier ou supprimer les lignes en double depuis l'interface avant de lancer l'importation
<VimeoEmbed videoId="1145246326" title="Démonstration vidéo" />
## Meilleures pratiques
1. **Supprimez les doublons** de votre fichier avant l'importation
2. **Vérifiez les enregistrements existants** dans Twenty avant l'importation
3. **Utilisez des ID externes** lors de la migration depuis d'autres systèmes
4. **Incluez des champs uniques** si vous souhaitez mettre à jour des enregistrements existants