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: Gestionarea erorilor și validarea
description: Revizuiți și corectați erorile de import direct în UI înainte de confirmare.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Validare înainte de import
După ce încărcați fișierul și mapați câmpurile, Twenty vă validează datele **înainte** de import. Acest lucru vă permite să depistați și să corectați erorile fără a afecta datele existente.
## Cum Funcționează
1. **Încărcați** fișierul CSV
2. **Mapați** coloanele la câmpurile Twenty
3. **Revizuiți** erorile potențiale evidențiate cu galben
4. **Corectați erorile** direct în UI
5. **Confirmați** importul
<VimeoEmbed videoId="1145273857" title="Demonstrație video" />
## Afișarea erorilor
Rândurile cu probleme sunt evidențiate cu **galben**. Puteți:
* **Editați celula direct** pentru a corecta eroarea
* **Eliminați rândul** pentru a-l omite complet
Această editare în linie economisește timp — nu mai este nevoie să reveniți la foaia de calcul, să corectați erorile și să reîncărcați.
## Tipuri comune de erori
### Valori duplicate
**Cauză**: Un câmp unic (email, domeniu) există deja în Twenty sau apare de două ori în fișier.
**Remediere**:
* Editați valoarea duplicată în UI-ul de import
* Eliminați unul dintre rândurile duplicate
Consultați [Constrângeri de unicitate](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints) pentru mai multe detalii despre cum este aplicată unicitatea.
### Format invalid
**Cauză**: Datele nu corespund formatului așteptat (de ex., adresă de e-mail invalidă, format de dată greșit).
**Remediere**: Editați celula pentru a folosi formatul corect.
Consultați [Maparea câmpurilor](/l/ro/user-guide/data-migration/capabilities/field-mapping) pentru formatul așteptat al fiecărui tip de câmp.
### Lipsesc câmpuri obligatorii
**Cauză**: Un câmp obligatoriu este gol.
**Remediere**: Introduceți o valoare în câmpul obligatoriu sau eliminați rândul.
### Relația nu a fost găsită
**Cauză**: Înregistrarea de referință nu există (de ex., un domeniu de Companie care nu a fost importat).
**Remediere**:
* Importați mai întâi înregistrările părinte
* Sau corectați valoarea de referință
Consultați [Importul relațiilor](/l/ro/user-guide/data-migration/capabilities/import-relations) pentru ordinea corectă de import și cum să legați înregistrările.
## Sfaturi pentru mai puține erori
1. **Descărcați șablonul** pentru a vedea formatul așteptat înainte de a importa fișierul dvs.
2. **Curățați datele** mai întâi în foaia de calcul
3. **Importați fișierele în ordinea corectă** pentru a importa relațiile (Companii → Persoane → Oportunități)
4. **Testați cu loturi mici** înainte de importul complet
5. **Verificați duplicatele** înainte de încărcare
6. **Limitați fiecare fișier la 10.000 de înregistrări**

View File

@@ -0,0 +1,198 @@
---
title: Maparea câmpurilor
description: Cum funcționează maparea câmpurilor în timpul importului de date.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Cum funcționează maparea câmpurilor
Când încărcați un fișier, Twenty analizează coloanele și încearcă să le potrivească cu câmpurile existente.
### Mapare automată
Twenty încearcă să potrivească coloanele pe baza:
* Numele antetelor de coloană (potriviri exacte sau similare)
* Detecția tipului de date (date, numere, e-mailuri)
* Tipare comune de câmp
<Note>**Sfat rapid:** Exportați câteva rânduri din obiectul pe care doriți să-l importați. Fișierul exportat va avea exact numele de coloane pe care Twenty le așteaptă, ceea ce face ca maparea automată să fie fără probleme în timpul importului.</Note>
### Opțiuni de mapare manuală
Pentru fiecare coloană, puteți:
* **Mapați la un câmp**: Selectați câmpul Twenty corespunzător dintr-un meniu derulant
* **Nu mapați**: Omiteți complet coloana (datele nu vor fi importate)
<Note>**Câmpurile trebuie să existe înainte de import.** Importul creează înregistrări, nu câmpuri. Creați câmpuri personalizate în **Setări → Model de date** înainte de import.</Note>
## Compatibilitatea tipurilor de câmp
Toate tipurile de câmp disponibile în Modelul de date sunt acceptate pentru import.
Puteți importa și valori `id` pentru a atribui un ID specific înregistrărilor noi sau pentru a le actualiza pe cele existente.
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## Cerințe privind formatul datelor
<Note>**Unele câmpuri au o sintaxă specială.** Vă recomandăm să descărcați fișierul exemplu înainte de pregătirea importului, pentru a vedea sintaxa așteptată pentru fiecare tip de câmp.</Note>
### Câmpuri de adresă
Adresa este un câmp îmbricat cu mai multe coloane. Unele pot fi lăsate necompletate.
* **Adresă / Adresă 1**: Linia 1 a adresei stradale
* **Adresă / Adresă 2**: Linia 2 a adresei stradale
* **Adresă / Oraș**: Numele orașului
* **Adresă / Stat**: Stat sau provincie
* **Adresă / Țară**: Numele țării
* **Adresă / Cod poștal**: Cod poștal/ZIP
### Câmpuri de tip array
Folosiți următorul format:
```
["value1","value2"]
```
### Câmpuri booleene
Folosiți `TRUE` sau `FALSE` (cu majuscule) - nu `true` sau `false`
### Câmpuri de monedă
Moneda este un câmp îmbricat cu două coloane care trebuie ambele completate:
* **Sumă / Sumă**: Valoarea numerică (de ex., `1234.56`)
* **Sumă / Monedă**: Codul monedei (de ex., `USD`, `EUR`)
### Câmpuri de dată
Formate acceptate:
* `YYYY-MM-DD` (recomandat)
* `MM/DD/YYYY`
* `DD/MM/YYYY`
* Format ISO 8601
### Câmpuri de domeniu
* Este recomandat să folosiți formatul `https://domain.com` pentru a evita crearea de duplicate, deoarece acesta este formatul folosit pentru Companiile create de sincronizările cu căsuța poștală și calendarul
* Se pot completa un `Domain Label` și un `Domain URL`: cea mai bună practică este să completați `domain.com` în etichetă și `https://domain.com` în URL
* Domeniile trebuie să fie unice în obiectul Companii
* **Domeniile trebuie să fie unice în fișierul de importat**
### Câmpuri de e-mail
* Trebuie să fie în format de e-mail valid
* E-mailurile trebuie să fie unice în obiectul Persoane
* **E-mailurile trebuie să fie unice în fișierul de importat**
* Pentru e-mailuri suplimentare: folosiți **E-mailuri / E-mail principal** pentru e-mailul principal și **E-mailuri / E-mailuri suplimentare** cu acest format:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### Câmpuri ID
Specificarea unui `id` în timpul importului este opțională. Twenty generează automat unul dacă nu este furnizat.
Cazuri de utilizare pentru maparea unei coloane `id`:
* **Setați un ID specific**: Alegeți UUID-ul pentru înregistrările nou create
* **Actualizați înregistrările existente**: Potriviți cu înregistrările existente pentru a le actualiza în loc să creați duplicate. În acest caz, se recomandă să nu mapați celelalte câmpuri unice: maparea unui singur câmp unic asigură un import mai lin.
<Note>Dacă furnizați un `id`, acesta trebuie să fie în format UUID (de ex., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
### Câmpuri JSON
Folosiți un format JSON valid:
```
{"key":"value","key2":"value2"}
```
### Câmpuri pentru linkuri
Similar cu câmpurile de domeniu:
* Completați ambele coloane, eticheta și URL-ul: **Linkuri / URL link** și **Linkuri / Etichetă link**
* Folosiți formatul URL complet: `https://example.com`
* Pentru linkurile secundare, folosiți coloana **Linkuri / Linkuri secundare** cu acest format:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### Câmpuri cu selecție multiplă
Folosiți **numele API** (nu etichetele de afișare) în următorul format:
```
["VALUE1","VALUE2"]
```
Consultați [aici](#finding-api-names-for-select-fields) unde puteți găsi numele API.
<Note>Opțiunile noi de selectare nu vor fi create automat de import. Acestea trebuie adăugate în **Setări → Model de date** înainte de import.</Note>
<Warning>
**Importă suprascrieri; nu adaugă.**
Dacă o înregistrare are deja selectate `VALUE2` și `VALUE3`, iar importați `["VALUE1"]`, înregistrarea va avea doar `VALUE1` după import. Selecțiile anterioare sunt înlocuite, nu îmbinate.
</Warning>
### Câmpuri numerice
* Doar numere
* Zecimalele folosesc punctul: `1234.56`
* Fără separatori pentru mii
### Câmpuri de telefon
Telefonul este un câmp îmbricat cu mai multe coloane care **trebuie completate**
* **Telefoane / Număr de telefon principal**: Numărul de telefon (de ex., `4159095555`)
* **Telefoane / Codul de țară al telefonului principal**: Codul de țară (de ex., `US`)
* **Telefoane / Prefixul de apelare al telefonului principal**: Prefixul de apelare (de ex., `+1`)
### Câmpuri de rating
Folosiți formatul numelui API: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
### Câmpuri de relație
Consultați articolul nostru dedicat: [Importul relațiilor dintre obiecte](/l/ro/user-guide/data-migration/capabilities/import-relations)
### Câmpuri de selectare
Folosiți **numele API** al opțiunii (nu eticheta de afișare):
```
VALUE1
```
Consultați [aici](#finding-api-names-for-select-fields) unde puteți găsi numele API.
<Note>Opțiunile noi de selectare nu vor fi create automat în urma importului. Acestea trebuie adăugate în **Setări → Model de date** înainte de import.</Note>
### Câmpuri text
* Nu este necesară nicio formatare specială
* Spațiile de la început și de la sfârșit sunt eliminate
## Găsirea numelor API
Pentru câmpurile Select, Multi-Select și Array cu opțiuni predefinite, trebuie să utilizați **numele API**, nu etichetele de afișare.
### Cum găsiți numele API
1. Accesați **Setări → Model de date**
2. Selectați obiectul și câmpul
3. Activați **Modul avansat** (comutator în dreapta jos a paginii de setări)
4. Vizualizați numele API pentru fiecare opțiune
<VimeoEmbed videoId="1144910809" title="Demonstrație video" />

View File

@@ -0,0 +1,48 @@
---
title: Formate de fișiere acceptate!
description: Formate de fișier acceptate pentru importul de date în Twenty.
---
## Formate acceptate
Twenty acceptă trei formate de fișier pentru import:
| Format | Extensie | Notițe |
| ----------------- | -------- | ------------------------------ |
| **CSV** | .csv | Recomandat, cel mai compatibil |
| **Excel** | .xlsx | Format Excel modern |
| **Excel (vechi)** | .xls | Format Excel mai vechi |
## Cerințe pentru fișiere
| Cerință | Valoare |
| -------------------------- | -------------------------------------------------- |
| **Codare** | Se recomandă UTF-8 |
| **Limită de înregistrări** | 10.000 de înregistrări pe fișier |
| **Structură** | Primul rând trebuie să conțină antetele coloanelor |
| **Conținut** | Un singur tip de obiect pe fișier |
## Cele mai bune practici pentru CSV
* **Delimitator**: utilizați virgula (`,`) sau punct și virgulă (`;`)
* **Calificator de text**: utilizați ghilimele duble (`"`) pentru text care conține virgule
* **Sfârșituri de linie**: Windows (CRLF) sau Unix (LF), ambele sunt acceptate
* **Valori goale**: Lăsați celulele necompletate, nu folosiți "NULL" sau "N/A"
## Cele mai bune practici pentru Excel
Când exportați din Excel:
* Eliminați formulele (exportați doar valorile)
* Ștergeți rândurile goale de la final
* Asigurați-vă că nu există celule îmbinate
* Folosiți doar prima foaie
## Seturi de date mari
Pentru seturi de date mai mari de 10.000 de înregistrări:
* Împărțiți în mai multe fișiere
* Sau folosiți [importul prin API](/l/ro/user-guide/data-migration/how-tos/import-data-via-api) pentru un număr nelimitat de înregistrări
<Note>Pentru migrarea unor volume foarte mari (peste 100.000 de înregistrări), API-ul este semnificativ mai rapid și mai fiabil decât importurile CSV.</Note>

View File

@@ -0,0 +1,148 @@
---
title: Importați relațiile dintre obiecte
description: Importați relațiile dintre înregistrări prin CSV.
---
## Prezentare generală
Twenty acceptă importul relațiilor dintre obiecte în timpul importului CSV. Acest lucru vă permite să conectați înregistrări (de ex., să atașați Persoane la Companii) ca parte a migrării datelor.
<Note>**În prezent acceptat pentru import**: Relații de tip unu-la-mulți care indică spre un singur tip de obiect pe fiecare parte (de ex., Persoane → Companii). Relațiile care indică către mai multe tipuri de obiecte nu sunt încă acceptate pentru import/export.</Note>
## Cum funcționează relațiile în Twenty
### Unu la mulți / Mulți la unu
Twenty acceptă relații standard în care o înregistrare se leagă de multe altele:
* **O Companie → Multe Persoane**: O companie poate avea mai mulți angajați, dar fiecare persoană aparține unei singure companii
* **O Companie → Multe Oportunități**: O companie poate avea mai multe oportunități, dar fiecare oportunitate aparține unei singure companii
### Relații care pot indica către mai multe tipuri de obiecte
Unele relații se pot conecta la diferite tipuri de obiecte. Acest lucru funcționează în două moduri:
**Modelul 1: Multe înregistrări care se leagă fiecare de o singură înregistrare din tipuri de obiecte diferite**
Mai multe note sau sarcini pot fi atașate fiecăruia la mai multe tipuri de obiecte simultan:
* **Notele** pot fi legate simultan de o Persoană, o Companie și o Oportunitate
* **Sarcinile** pot fi legate simultan de o Persoană, o Companie și o Oportunitate
Aici, Notele/Sarcinile se află pe partea „mulți”. Fiecare se leagă de o singură înregistrare pentru fiecare tip de obiect.
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
**Modelul 2: O înregistrare care primește legături de la multe înregistrări din tipuri de obiecte diferite**
Un Proiect poate primi legături de la multiple înregistrări din diferite tipuri de obiecte:
* **Un Proiect** poate avea multe Persoane legate de el, multe Companii legate de el și multe Note atașate la el
Aici, Proiectul se află pe partea „unu”. Mai multe înregistrări din obiecte diferite se pot conecta toate la același Proiect.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**Limitare de import/export**: Relațiile care indică către mai multe tipuri de obiecte (cum ar fi Note → Persoane/Companii/Oportunități) nu sunt **încă acceptate** la importul sau exportul CSV.
* **Import**: Numai relațiile unu-la-mulți care indică spre un singur tip de obiect pe fiecare parte pot fi importate
* **Export**: Coloanele pentru relațiile care indică către mai multe tipuri de obiecte sunt în prezent lăsate necompletate
Această funcționalitate este în planul nostru de dezvoltare.
</Warning>
### Ce nu este acceptat astăzi
**Relațiile mulți-la-mulți** nu sunt încă disponibile. De exemplu, în prezent nu puteți crea o relație în care:
* Multe Persoane sunt legate de multe Proiecte
<Note>Multe relatii sunt planificate pentru H2 2026.</Note>
## Asocierea înregistrărilor în timpul importului
<Note>**Reamintire**: Doar relațiile unu-la-mulți care indică spre un singur tip de obiect pot fi importate (de ex., Persoane → Companii). Relațiile care indică către mai multe tipuri de obiecte (de ex., Note → Persoane/Companii/Oportunități) nu sunt încă acceptate.</Note>
### Pasul 1: Identificați părțile „unu” și „mulți”
Mai întâi, determinați care obiect se află pe partea „unu” și care pe partea „mulți” a relației.
**Exemplu**:
* **Compania** este partea „unu” (o companie are mulți angajați)
* **Persoane** este partea „mulți” (fiecare persoană aparține unei singure companii)
### Pasul 2: Asigurați existența înregistrărilor de pe partea „unu”
Înainte de a importa partea „mulți”, înregistrările de pe partea „unu” trebuie să existe deja în Twenty.
* Importați sau creați mai întâi înregistrările de pe partea „unu” (de ex., Companii)
* Validați identificatorul lor unic. Acesta poate fi:
* `id` (UUID-ul Twenty)
* Un câmp setat ca unic (de ex., `domain` pentru Companii sau un ID extern din sistemul dvs. anterior)
<Warning>Importul va eșua dacă se face referire la o înregistrare care nu există.</Warning>
### Pasul 3: Pregătiți fișierul CSV
Adăugați o coloană în fișierul CSV pentru partea „mulți” care face referire la înregistrarea de pe partea „unu”.
**Exemplu**: Pentru un fișier CSV cu Persoane care se leagă de Companii:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**Important**:
* Valoarea trebuie să se potrivească **exact** cu câmpul unic din înregistrarea Companiei
* Pentru domenii, folosiți **URL-ul domeniului** (de ex., `https://acme.com`), nu eticheta domeniului
* Mapați doar **un** identificator unic per relație: acest lucru duce la un import mai lin
### Pasul 4: Verificați existența câmpului de relație
Înainte de a încărca fișierul, asigurați-vă că există câmpul de relație între obiectele dvs.
Dacă nu există:
1. Accesați **Setări → Model de date**
2. Selectați obiectul (de ex., Persoane)
3. Creați un câmp de relație care indică spre obiectul țintă (de ex., Companie)
### Pasul 5: Încărcați și mapați relația
1. Încărcați fișierul CSV prin interfața de import
2. În pasul de mapare a câmpurilor, găsiți coloana relației (de ex., `companyDomain`)
3. Mapați-o la câmpul de relație (de ex., Companie)
4. Twenty va lega automat fiecare înregistrare de părintele corespunzător
### Câmpuri unice disponibile pentru relații
| Obiect | Câmpuri unice disponibile |
| ------------------------------------------ | -------------------------------------------- |
| **Companii** | `id`, `domain`, orice câmp unic personalizat |
| **Persoane** | `id`, `email`, orice câmp unic personalizat |
| **Membri ai spațiului de lucru** | `id`, `email` (nu numele) |
| **Alte obiecte standard și personalizate** | `id`, orice câmp marcat ca unic |
<Note>**Conectarea la Membrii Workspace-ului**: Când relația indică către Membrii Workspace-ului (echipa dvs. care se autentifică în Twenty), referiți-vă la ei prin **adresa de email**, nu prin nume.</Note>
<Note>Recomandăm folosirea `domain` pentru Companii și `email` pentru Persoane, deoarece acestea sunt ușor de citit și ușor de întreținut în foi de calcul.</Note>
<Note>**Reamintire**: Înregistrările șterse soft (vizibile în Command Menu → See deleted records) se iau în calcul pentru criteriile de unicitate. Dacă importați o înregistrare cu aceeași valoare unică ca o înregistrare ștearsă, înregistrarea ștearsă va fi restaurată. Consultați [Constrângeri de unicitate](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints) pentru mai multe detalii.</Note>
## Regula ordinii de import
<Warning>
**Importați întotdeauna mai întâi partea „unu”!**
1. **Companii** mai întâi (fără dependențe)
2. **Persoane** în al doilea rând (legate de Companii)
3. **Oportunități** în al treilea rând (legate de Companii/Persoane)
4. **Obiecte personalizate** respectând dependențele lor
Înregistrarea părinte trebuie să existe înainte de a o putea referi.
</Warning>

View File

@@ -0,0 +1,72 @@
---
title: Constrângeri de unicitate
description: Cum impune Twenty unicitatea datelor în timpul importului.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Prezentare generală
Twenty impune unicitatea pentru anumite câmpuri pentru a preveni înregistrările duplicate și a asigura integritatea datelor. Înțelegerea acestor constrângeri este esențială pentru importuri reușite.
## Câmpuri unice implicite
| Obiect | Câmpuri unice |
| ------------------------- | -------------------- |
| **Persoane** | `id`, `email` |
| **Companii** | `id`, `domain` |
| **Obiecte personalizate** | doar `id` (implicit) |
<Note>Câmpul `id` este identificatorul intern al Twenty, generat automat pentru fiecare înregistrare. Acesta folosește formatul UUID (de ex., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
## Câmpuri unice personalizate
Puteți defini câmpuri unice suplimentare în **Setări → Model de date**:
1. Accesați **Setări → Model de date**
2. Selectați obiectul
3. Faceți clic pe un câmp
4. Activați **Unique** în setările câmpului
### Cazuri de utilizare pentru câmpuri unice personalizate
* **ID-uri externe**: Stocați ID-uri din alte sisteme (Salesforce ID, HubSpot ID)
* **Identificatori de afaceri**: Numere de angajat, coduri de client
* **Informații de contact alternative**: Profil LinkedIn, număr de telefon
<Note>Numele câmpului `id` este rezervat pentru ID-ul intern al Twenty. Folosiți un nume diferit, precum `externalId` sau `legacyId`, pentru identificatori externi.</Note>
## Comportamentul importului
### Crearea de înregistrări noi
Dacă valoarea unui câmp unic nu există, se creează o înregistrare nouă.
### Actualizarea înregistrărilor existente
Dacă valoarea unui câmp unic se potrivește cu o înregistrare existentă, acea înregistrare este **actualizată** cu noile date.
<Warning>Pentru a **actualiza înregistrările existente**, se recomandă să **potriviți un singur câmp unic**.</Warning>
### Înregistrări șterse logic
<Warning>
**Înregistrările șterse logic se iau în calcul pentru unicitate.**
Înregistrările șterse logic (vizibile în Command Menu → See deleted records) sunt incluse în verificările de unicitate. Dacă importați o înregistrare cu aceeași valoare unică ca o înregistrare ștearsă, înregistrarea ștearsă va fi **restaurată** cu noile date.
</Warning>
## Detectarea duplicatelor în timpul importului
În timpul etapei de validare:
* Duplicatele din fișier sunt evidențiate cu galben
* Puteți edita sau elimina rândurile duplicate din interfață înainte de a începe importul
<VimeoEmbed videoId="1145246326" title="Demonstrație video" />
## Cele mai bune practici
1. **Eliminați duplicatele** din fișier înainte de import
2. **Verificați dacă există înregistrări** în Twenty înainte de import
3. **Folosiți ID-uri externe** când migrați din alte sisteme
4. **Includeți câmpuri unice** dacă doriți să actualizați înregistrările existente