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: Zpracování chyb a validace
description: Zkontrolujte a opravte chyby importu přímo v uživatelském rozhraní (UI) před potvrzením.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Ověření před importem
Po nahrání souboru a namapování polí Twenty vaše data ověří **před** importem. Díky tomu můžete chyby odhalit a opravit, aniž by to ovlivnilo vaše stávající data.
## Jak to funguje
1. **Nahrajte** svůj soubor CSV
2. **Namapujte** své sloupce na pole Twenty
3. **Zkontrolujte** možné chyby zvýrazněné žlutě
4. **Opravte chyby** přímo v uživatelském rozhraní (UI)
5. **Potvrďte** import
<VimeoEmbed videoId="1145273857" title="Ukázka videa" />
## Zobrazení chyb
Řádky s problémy jsou zvýrazněny **žlutě**. Můžete:
* **Přímo upravte buňku**, abyste chybu opravili
* **Odstraňte řádek**, abyste jej zcela přeskočili
Tato přímá úprava šetří čas — nemusíte se vracet do tabulky, opravovat chyby a soubor znovu nahrávat.
## Běžné typy chyb
### Duplicitní hodnoty
**Příčina**: Jedinečné pole (e-mail, doména) už v Twenty existuje nebo se ve vašem souboru vyskytuje dvakrát.
**Oprava**:
* Upravte duplicitní hodnotu v rozhraní importu
* Odstraňte jeden z duplicitních řádků
Podrobnosti o tom, jak se vynucuje jedinečnost, viz [Omezení jedinečnosti](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints).
### Neplatný formát
**Příčina**: Data neodpovídají očekávanému formátu (např. neplatný e-mail, nesprávný formát data).
**Oprava**: Upravte buňku tak, aby používala správný formát.
Viz [Mapování polí](/l/cs/user-guide/data-migration/capabilities/field-mapping) pro očekávaný formát každého typu pole.
### Chybějící povinná pole
**Příčina**: Povinné pole je prázdné.
**Oprava**: Zadejte hodnotu do povinného pole, nebo řádek odstraňte.
### Vztah nebyl nalezen
**Příčina**: Odkazovaný záznam neexistuje (např. doména společnosti, která nebyla importována).
**Oprava**:
* Nejprve importujte nadřazené záznamy
* Nebo opravte referenční hodnotu
Viz [Import relací](/l/cs/user-guide/data-migration/capabilities/import-relations) pro správné pořadí importu a postup propojení záznamů.
## Tipy pro méně chyb
1. **Stáhněte si šablonu** pro zobrazení očekávaného formátu před importem souboru
2. **Nejprve vyčistěte svá data** v tabulce
3. **Importujte soubory ve správném pořadí**, abyste importovali relace (Společnosti → Lidé → Příležitosti)
4. **Otestujte s malými dávkami** před plným importem
5. **Zkontrolujte duplicity** před nahráním
6. **Omezit každý soubor na 10 000 záznamů**

View File

@@ -0,0 +1,198 @@
---
title: Mapování polí
description: Jak funguje mapování polí při importu dat.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Jak funguje mapování polí
Když nahrajete soubor, Twenty analyzuje vaše sloupce a pokusí se je spárovat s existujícími poli.
### Automatické mapování
Twenty se snaží spárovat sloupce na základě:
* Názvů záhlaví sloupců (přesné nebo podobné shody)
* Detekce typů dat (datumů, čísel, e‑mailů)
* Běžné vzory polí
<Note>**Rychlý tip:** Exportujte několik řádků z objektu, který chcete importovat. Exportovaný soubor bude mít přesně takové názvy sloupců, jaké Twenty očekává, což při importu usnadní automatické mapování.</Note>
### Možnosti ručního mapování
U každého sloupce můžete:
* **Namapovat na pole**: Vyberte odpovídající pole Twenty z rozbalovací nabídky
* **Nemapovat**: Sloupec úplně přeskočte (data nebudou importována)
<Note>**Pole musí existovat před importem.** Import vytváří záznamy, nikoli pole. Vytvořte vlastní pole v **Nastavení → Datový model** před importem.</Note>
## Kompatibilita typů polí
Všechny typy polí dostupné v Datovém modelu jsou pro import podporovány.
Můžete také importovat hodnoty `id` a přiřadit konkrétní ID novým záznamům nebo aktualizovat stávající.
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## Požadavky na formát dat
<Note>**Některá pole mají speciální syntaxi.** Před přípravou importu doporučujeme stáhnout ukázkový soubor, abyste viděli očekávanou syntaxi pro každý typ pole.</Note>
### Adresová pole
Adresa je vnořené pole s více sloupci. Některé lze ponechat prázdné.
* **Adresa / Adresa 1**: První řádek adresy (ulice)
* **Adresa / Adresa 2**: Druhý řádek adresy (ulice)
* **Adresa / Město**: Název města
* **Adresa / Stát**: Stát nebo provincie
* **Adresa / Země**: Název země
* **Adresa / PSČ**: Poštovní směrovací číslo
### Pole typu Array
Použijte následující formát:
```
["value1","value2"]
```
### Booleovská pole
Použijte `TRUE` nebo `FALSE` (velkými písmeny) – ne `true` ani `false`
### Měnová pole
Měna je vnořené pole se dvěma sloupci, které je nutné **vyplnit obě**:
* **Částka / Částka**: Číselná hodnota (např. `1234.56`)
* **Částka / Měna**: Kód měny (např. `USD`, `EUR`)
### Datumová pole
Podporované formáty:
* `YYYY-MM-DD` (doporučeno)
* `MM/DD/YYYY`
* `DD/MM/YYYY`
* Formát ISO 8601
### Doménová pole
* Doporučujeme používat formát `https://domain.com`, abyste předešli vytváření duplicit, protože tento formát se používá u Společností vytvořených synchronizací poštovní schránky a kalendáře
* Lze vyplnit `Domain Label` a `Domain URL`: osvědčený postup je zadat do popisku `domain.com` a do URL `https://domain.com`
* Domény musí být v objektu Společnosti jedinečné
* **Domény musí být jedinečné v rámci importovaného souboru**
### E‑mailová pole
* Musí mít platný formát e‑mailu
* E‑maily musí být v objektu Osoby jedinečné
* **E‑maily musí být jedinečné v rámci importovaného souboru**
* Pro další e‑maily: použijte **E‑maily / Primární e‑mail** pro hlavní e‑mail a **E‑maily / Další e‑maily** v tomto formátu:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### ID polí
Zadání `id` při importu je volitelné. Pokud není uvedeno, Twenty jej automaticky vygeneruje.
Příklady použití mapování sloupce `id`:
* **Nastavit konkrétní ID**: Zvolte UUID pro nově vytvářené záznamy
* **Aktualizovat existující záznamy**: Spárujte je s existujícími záznamy, abyste je aktualizovali místo vytváření duplicit. V takovém případě doporučujeme nemapovat další jedinečná pole: mapování pouze jednoho jedinečného pole zajistí hladší import.
<Note>Pokud zadáte `id`, musí být ve formátu UUID (např. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
### Pole JSON
Použijte platný formát JSON:
```
{"key":"value","key2":"value2"}
```
### Pole odkazů
Podobně jako u doménových polí:
* Vyplňte oba sloupce s popiskem a adresou URL: **Odkazy / URL odkazu** a **Odkazy / Popisek odkazu**
* Použijte úplný formát URL: `https://example.com`
* Pro sekundární odkazy použijte sloupec **Odkazy / Sekundární odkazy** v tomto formátu:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### Pole s vícenásobným výběrem
Použijte **názvy API** (nikoli zobrazované popisky) v následujícím formátu:
```
["VALUE1","VALUE2"]
```
Viz [zde](#finding-api-names-for-select-fields), kde najdete názvy API.
<Note>Nové možnosti výběru se importem automaticky nevytvoří. Před importem je musíte přidat v **Nastavení → Datový model**.</Note>
<Warning>
**Import přepsá; nepřidává.**
Pokud má záznam již vybrány `VALUE2` a `VALUE3` a vy importujete `["VALUE1"]`, bude mít po importu pouze `VALUE1`. Předchozí výběry se nahrazují, neslučují.
</Warning>
### Číselná pole
* Pouze čísla
* Desetinná místa se oddělují tečkou: `1234.56`
* Bez oddělovačů tisíců
### Telefonní pole
Telefon je vnořené pole s více sloupci, které je **nutné vyplnit**
* **Telefony / Primární telefonní číslo**: Telefonní číslo (např. `4159095555`)
* **Telefony / Kód země primárního telefonu**: Kód země (např. `US`)
* **Telefony / Mezinárodní předvolba primárního telefonu**: Volací kód (např. `+1`)
### Hodnoticí pole
Použijte název API ve formátu: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
### Relační pole
Podívejte se prosím na náš samostatný článek: [Import relací mezi objekty](/l/cs/user-guide/data-migration/capabilities/import-relations)
### Výběrová Pole
Použijte **název API** možnosti (nikoli zobrazovaný popisek):
```
VALUE1
```
Viz [zde](#finding-api-names-for-select-fields), kde najdete názvy API.
<Note>Nové možnosti výběru nebudou importem vytvořeny automaticky. Před importem je musíte přidat v **Nastavení → Datový model**.</Note>
### Textová pole
* Není potřeba žádné speciální formátování
* Úvodní a koncové mezery jsou odstraněny
## Hledání názvů API
U polí typu Select, Multi-Select a Array s předdefinovanými možnostmi musíte použít **názvy API**, nikoli zobrazené štítky.
### Jak najít názvy API
1. Přejděte na **Nastavení → Datový model**
2. Vyberte objekt a pole
3. Povolte **Pokročilý režim** (přepínač je vpravo dole na stránce nastavení)
4. Zobrazte název API pro každou možnost
<VimeoEmbed videoId="1144910809" title="Ukázka videa" />

View File

@@ -0,0 +1,48 @@
---
title: Podporované formáty souborů
description: Formáty souborů podporované pro import dat v Twenty.
---
## Podporované formáty
Twenty podporuje pro import tři formáty souborů:
| Formát | Přípona | Poznámky |
| ------------------ | ------- | ------------------------------ |
| **CSV** | .csv | Doporučeno, nejkompatibilnější |
| **Excel** | .xlsx | Moderní formát Excelu |
| **Excel (starší)** | .xls | Starší formát Excelu |
## Požadavky na soubory
| Požadavek | Hodnota |
| ----------------- | ------------------------------------------ |
| **Kódování** | Doporučeno UTF-8 |
| **Limit záznamů** | 10,000 záznamů na soubor |
| **Struktura** | První řádek musí obsahovat záhlaví sloupců |
| **Obsah** | V každém souboru pouze jeden typ objektu |
## Osvědčené postupy pro CSV
* **Oddělovač**: Použijte čárku (`,`) nebo středník (`;`)
* **Textový kvalifikátor**: Použijte dvojité uvozovky (`"`) pro text obsahující čárky
* **Konce řádků**: Windows (CRLF) nebo Unix (LF), obojí je podporováno
* **Prázdné hodnoty**: Nechte buňky prázdné, nepoužívejte "NULL" ani "N/A"
## Osvědčené postupy pro Excel
Při exportu z Excelu:
* Odstraňte vzorce (exportujte pouze hodnoty)
* Odstraňte prázdné řádky na konci
* Zajistěte, aby nebyly sloučené buňky
* Použijte pouze první list
## Velké datové sady
Pro datové sady větší než 10,000 záznamů:
* Rozdělte na více souborů
* Nebo použijte [import přes API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api) pro neomezený počet záznamů
<Note>Pro velmi rozsáhlé migrace (100,000+ záznamů) je API výrazně rychlejší a spolehlivější než importy CSV.</Note>

View File

@@ -0,0 +1,148 @@
---
title: Import relací mezi objekty
description: Import relací mezi záznamy pomocí CSV.
---
## Přehled
Twenty podporuje import relací mezi objekty během importu CSV. To vám umožní propojit záznamy (např. přiřadit Lidi ke Společnostem) jako součást migrace dat.
<Note>**V současnosti podporováno pro import**: Relace jedna ku mnoha směřující na jeden typ objektu na každé straně (např. Lidé → Společnosti). Relace směřující k více typům objektů zatím nejsou pro import/export podporovány.</Note>
## Jak relace fungují v Twenty
### Jedna ku mnoha / Mnoho ku jedné
Twenty podporuje standardní relace, kde se jeden záznam propojuje s mnoha dalšími:
* **Jedna Společnost → Mnoho Lidí**: Společnost může mít více zaměstnanců, ale každá osoba patří do jedné společnosti
* **Jedna Společnost → Mnoho Příležitostí**: Společnost může mít více obchodů, ale každá příležitost patří k jedné společnosti
### Relace, které mohou směřovat k více typům objektů
Některé relace mohou propojit různé typy objektů. To funguje dvěma způsoby:
**Vzor 1: Mnoho záznamů se odkazuje vždy na jeden záznam u různých typů objektů**
K více typům objektu lze připojit několik poznámek nebo úloh:
* **Poznámky** mohou být současně propojeny s jednou Osobou, jednou Společností a jednou Příležitostí
* **Úkoly** mohou být současně propojeny s jednou Osobou, jednou Společností a jednou Příležitostí
Zde jsou Poznámky/Úkoly na straně „mnoho“. Každý z nich se váže na jeden záznam pro každý typ objektu.
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
**Vzor 2: Jeden záznam přijímá odkazy od mnoha záznamů různých typů objektů**
Projekt může přijímat odkazy od více záznamů napříč různými typy objektů:
* **Projekt** může mít k sobě připojeno mnoho Lidí, mnoho Společností a mnoho Poznámek
Zde je Projekt na straně „jedna“. Více záznamů z různých objektů se může odkazovat na tentýž Projekt.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**Omezení importu/exportu**: Relace, které směřují k více typům objektů (např. Poznámky → Lidé/Společnosti/Příležitosti), zatím **nejsou podporovány** při importu nebo exportu CSV.
* **Import**: Lze importovat pouze relace jedna ku mnoha směřující na jeden typ objektu na každé straně
* **Export**: Sloupce pro relace směřující k více typům objektů jsou aktuálně ponechány prázdné
Je to v našem plánu.
</Warning>
### Co dnes není podporováno
**Relace mnoho ku mnoha** zatím nejsou k dispozici. Například aktuálně nemůžete vytvořit relaci, kde:
* Mnoho Lidí je propojeno s mnoha Projekty
<Note>Mnoho k mnoha vztahům je naplánováno na H2 2026.</Note>
## Propojování záznamů během importu
<Note>**Připomenutí**: Importovat lze pouze relace jedna ku mnoha směřující na jeden typ objektu (např. Lidé → Společnosti). Relace směřující k více typům objektů (např. Poznámky → Lidé/Společnosti/Příležitosti) zatím nejsou podporovány.</Note>
### Krok 1: Určete strany „jedna“ a „mnoho“
Nejprve určete, který objekt je na straně „jedna“ a který je na straně „mnoho“ dané relace.
**Příklad**:
* **Společnost** je strana „jedna“ (jedna společnost má mnoho zaměstnanců)
* **Lidé** jsou strana „mnoho“ (každá osoba patří do jedné společnosti)
### Krok 2: Ujistěte se, že záznamy na straně „jedna“ existují
Před importem strany „mnoho“ musí záznamy na straně „jedna“ již v Twenty existovat.
* Nejprve importujte nebo vytvořte záznamy strany „jedna“ (např. Společnosti)
* Ověřte jejich jedinečný identifikátor. Může to být:
* Pole `id` (UUID v Twenty)
* Pole nastavené jako jedinečné (např. `domain` u Společností nebo externí ID z vašeho předchozího systému)
<Warning>Import selže, pokud je odkazováno na záznam, který neexistuje.</Warning>
### Krok 3: Připravte svůj soubor CSV
Přidejte do souboru CSV pro stranu „mnoho“ sloupec, který odkazuje na záznam strany „jedna“.
**Příklad**: Pro soubor CSV Lidé propojený se Společnostmi:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**Důležité**:
* Hodnota se musí **přesně shodovat** s jedinečným polem v záznamu Společnosti
* U domén používejte **URL domény** (např. `https://acme.com`), nikoli označení domény
* Mapujte pouze **jeden** jedinečný identifikátor na relaci: povede to k hladšímu importu
### Krok 4: Ujistěte se, že relační pole existuje
Před nahráním souboru se ujistěte, že mezi vašimi objekty existuje relační pole.
Pokud neexistuje:
1. Přejděte do **Nastavení → Datový model**
2. Vyberte svůj objekt (např. Lidé)
3. Vytvořte relační pole směřující na cílový objekt (např. Společnost)
### Krok 5: Nahrajte a namapujte relaci
1. Nahrajte svůj soubor CSV prostřednictvím rozhraní pro import
2. V kroku mapování polí najděte svůj relační sloupec (např. `companyDomain`)
3. Namapujte jej na relační pole (např. Společnost)
4. Twenty automaticky propojí každý záznam s odpovídajícím nadřazeným objektem
### Dostupná jedinečná pole pro relace
| Objekt | Dostupná jedinečná pole |
| -------------------------------------- | ----------------------------------------------- |
| **Společnosti** | `id`, `domain`, jakékoli vlastní jedinečné pole |
| **Lidé** | `id`, `email`, jakékoli vlastní jedinečné pole |
| **Členové pracovního prostoru** | `id`, `email` (ne jméno) |
| **Další standardní a vlastní objekty** | `id`, jakékoli pole označené jako jedinečné |
<Note>**Propojení na členy pracovního prostoru**: Pokud relace směřuje na členy pracovního prostoru (váš tým přihlašující se do Twenty), odkazujte je pomocí jejich **e-mailové adresy**, nikoli jména.</Note>
<Note>Doporučujeme používat `domain` pro Společnosti a `email` pro Lidi, protože jsou srozumitelné pro člověka a snadno se udržují v tabulkách.</Note>
<Note>**Připomenutí**: Měkce smazané záznamy (viditelné v Command Menu → Zobrazit smazané záznamy) se započítávají do kritérií jedinečnosti. Pokud naimportujete záznam se stejnou jedinečnou hodnotou jako má smazaný záznam, smazaný záznam bude obnoven. Více podrobností naleznete v [Omezeních jedinečnosti](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints).</Note>
## Pořadí importu
<Warning>
**Vždy nejprve importujte stranu „jedna“!**
1. **Společnosti** jako první (bez závislostí)
2. **Lidé** jako druzí (propojeni se Společnostmi)
3. **Příležitosti** jako třetí (propojené se Společnostmi/Lidmi)
4. **Vlastní objekty** podle jejich závislostí
Nadřazený záznam musí existovat dříve, než na něj můžete odkazovat.
</Warning>

View File

@@ -0,0 +1,72 @@
---
title: Omezení jedinečnosti
description: Jak Twenty prosazuje jedinečnost dat při importu.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## Přehled
Twenty vynucuje jedinečnost u vybraných polí, aby se předešlo duplicitním záznamům a zajistila integrita dat. Porozumění těmto omezením je zásadní pro úspěšné importy.
## Výchozí jedinečná pole
| Objekt | Jedinečná pole |
| ------------------- | ---------------------------------- |
| **Lidé** | `id`, `email` |
| **Společnosti** | `id`, `domain` |
| **Vlastní objekty** | pouze `id` (ve výchozím nastavení) |
<Note>Pole `id` je interní identifikátor Twenty, automaticky generovaný pro každý záznam. Používá formát UUID (např. `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).</Note>
## Vlastní jedinečná pole
Další jedinečná pole můžete definovat v **Nastavení → Datový model**:
1. Přejděte do **Nastavení → Datový model**
2. Vyberte objekt
3. Klikněte na pole
4. V nastavení pole zapněte **Jedinečné**
### Příklady použití vlastních jedinečných polí
* **Externí ID**: Ukládejte ID z jiných systémů (Salesforce ID, HubSpot ID)
* **Obchodní identifikátory**: osobní čísla zaměstnanců, zákaznické kódy
* **Alternativní kontaktní údaje**: profil na LinkedInu, telefonní číslo
<Note>Název pole `id` je vyhrazen pro interní ID Twenty. Pro externí identifikátory použijte jiný název, například `externalId` nebo `legacyId`.</Note>
## Chování importu
### Vytváření nových záznamů
Pokud hodnota jedinečného pole neexistuje, vytvoří se nový záznam.
### Aktualizace stávajících záznamů
Pokud hodnota jedinečného pole odpovídá existujícímu záznamu, tento záznam se **aktualizuje** novými daty.
<Warning>Pro **aktualizaci stávajících záznamů** se doporučuje **párovat pouze jedno jedinečné pole**.</Warning>
### Měkce smazané záznamy
<Warning>
**Smazané záznamy se započítávají do jedinečnosti.**
Měkce smazané záznamy (viditelné v Command Menu → Zobrazit smazané záznamy) jsou zahrnuty do kontrol jedinečnosti. Pokud naimportujete záznam se stejnou jedinečnou hodnotou jako smazaný záznam, smazaný záznam bude **obnoven** s novými daty.
</Warning>
## Detekce duplicit během importu
Během fáze validace:
* Duplicitní hodnoty ve vašem souboru jsou zvýrazněny žlutě
* Před zahájením importu můžete v uživatelském rozhraní upravit nebo odstranit duplicitní řádky
<VimeoEmbed videoId="1145246326" title="Ukázka videa" />
## Osvědčené postupy
1. **Odstraňte duplikáty** ze souboru před importem
2. Před importem **zkontrolujte existující záznamy** v Twenty
3. **Používejte externí ID** při migraci z jiných systémů
4. **Zahrňte jedinečná pole**, pokud chcete aktualizovat stávající záznamy