001c2097a3
Created by Github action <!-- mintlify-editor-comments:start --> Mintlify --- 0 threads from 0 users in Mintlify - No unresolved comments <!-- mintlify-editor-comments:end --> <!-- mintlify-comment--> <a href="https://dashboard.mintlify.com/twenty/twenty/editor/i18n-docs?source=pr_comment" target="_blank" rel="noopener noreferrer"><picture><source media="(prefers-color-scheme: dark)" srcset="https://d3gk2c5xim1je2.cloudfront.net/assets/open-mintlify-editor-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://d3gk2c5xim1je2.cloudfront.net/assets/open-mintlify-editor-light.svg"><img src="https://d3gk2c5xim1je2.cloudfront.net/assets/open-mintlify-editor-light.svg" alt="Open in Mintlify Editor"></picture></a> <!-- /mintlify-comment --> Co-authored-by: github-actions <github-actions@twenty.com>
226 lines
16 KiB
Plaintext
226 lines
16 KiB
Plaintext
---
|
||
title: Импорт связей между объектами с помощью CSV
|
||
description: Полное пошаговое руководство по связыванию записей при импорте CSV.
|
||
---
|
||
|
||
## Обзор
|
||
|
||
В этом руководстве показано, как импортировать связи между объектами — например, связывать Людей с Компаниями, или Возможности с Людьми.
|
||
|
||
<Note>**Что можно импортировать:** Только связи типа «один-ко-многим», указывающие на один тип объекта. Связи, указывающие на несколько типов объектов (например, Заметки, связанные с Людьми И Компаниями), пока не поддерживаются для импорта.</Note>
|
||
|
||
## Понимание связей
|
||
|
||
### Что такое связь «один-ко-многим»?
|
||
|
||
В связи «один-ко-многим»:
|
||
|
||
* **Одна** компания имеет **много** людей (сотрудников)
|
||
* **Одна** компания имеет **много** возможностей
|
||
* **Один** человек имеет **много** задач
|
||
|
||
Сторона «один» — это **родитель**. Сторона «многие» — это **дочерняя** сторона.
|
||
|
||
### Типичные связи в Twenty
|
||
|
||
| Связь | Сторона «один» (родитель) | Сторона «многие» (дочерняя) |
|
||
| ---------------------- | ------------------------- | --------------------------- |
|
||
| Компании → Люди | Компания | Люди |
|
||
| Компании → Возможности | Компания | Возможности |
|
||
| Люди → Задачи | Человек | Задачи |
|
||
| Люди → Заметки | Человек | Заметки |
|
||
|
||
## Шаг 1: Определите стороны «один» и «многие»
|
||
|
||
Перед импортом определите, какой объект является родительским, а какой — дочерним.
|
||
|
||
**Спросите себя:** «У одного [Объект A] есть много [Объект B]?»
|
||
|
||
* Одна Компания → Много Людей ✓ (Компания — родитель)
|
||
* Один Человек → Много Компаний ✗ (Это неверно — человек принадлежит одной компании)
|
||
|
||
## Шаг 2: Сначала импортируйте родительские записи
|
||
|
||
Родительская запись (сторона «один») должна существовать в Twenty, прежде чем вы сможете на неё сослаться.
|
||
|
||
**Порядок импорта:**
|
||
|
||
1. **Компании** в первую очередь (без зависимостей)
|
||
2. **Люди** во вторую очередь (связь с компаниями)
|
||
3. **Возможности** в третью очередь (связь с компаниями и/или людьми)
|
||
4. **Задачи/Заметки** (связь с любым из вышеперечисленных)
|
||
|
||
<Warning>
|
||
**Если родительская запись не существует, импорт завершится с ошибкой.**
|
||
|
||
Всегда проверяйте, что Компании импортированы до импорта Людей со ссылками на компании.
|
||
</Warning>
|
||
|
||
## Шаг 3: Запишите уникальный идентификатор родительской записи
|
||
|
||
Вам нужно ссылаться на родительскую запись с помощью **уникального идентификатора**. Доступные варианты:
|
||
|
||
| Родительский объект | Доступные уникальные идентификаторы |
|
||
| ----------------------------------- | -------------------------------------------------------------------------------- |
|
||
| **Компании** | `id` (UUID), `domain` (рекомендуется) или любое пользовательское уникальное поле |
|
||
| **Люди** | `id` (UUID), `email` или любое пользовательское уникальное поле |
|
||
| **Участники рабочего пространства** | `id` (UUID), `email` (не имя) |
|
||
| **Пользовательские объекты** | `id` (UUID) или любое поле, отмеченное как уникальное |
|
||
|
||
<Note>**Рекомендуется:** Используйте `domain` для Компаний и `email` для Людей. Они удобочитаемы и их легко проверить в вашей таблице.</Note>
|
||
|
||
### Поиск идентификатора
|
||
|
||
Если вам нужен `id`:
|
||
|
||
1. Экспортируйте родительские записи из Twenty
|
||
2. Экспорт включает столбец `id`
|
||
3. Используйте эти ID в файле дочерних записей
|
||
|
||
## Шаг 4: Убедитесь, что поле связи существует
|
||
|
||
Перед импортом убедитесь, что между вашими объектами существует поле связи.
|
||
|
||
**Чтобы проверить или создать:**
|
||
|
||
1. Перейдите в **Настройки → Модель данных**
|
||
2. Выберите ваш дочерний объект (например, Люди)
|
||
3. Найдите поле связи, указывающее на родителя (например, Компания)
|
||
4. Если его нет, создайте его:
|
||
* Нажмите **+ Добавить поле**
|
||
* Выберите тип **Связь**
|
||
* Выберите родительский объект
|
||
|
||
## Шаг 5: Подготовьте ваш файл CSV
|
||
|
||
Добавьте в ваш дочерний CSV столбец, который ссылается на родителя по его уникальному идентификатору.
|
||
|
||
### Пример: Связывание Людей с Компаниями
|
||
|
||
**Ваш CSV-файл для Людей:**
|
||
|
||
```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
|
||
```
|
||
|
||
Столбец `companyDomain` ссылается на домен Компании.
|
||
|
||
### Требования к формату
|
||
|
||
| Идентификатор | Формат | Пример |
|
||
| ----------------- | ----------------------------------- | -------------------------------------- |
|
||
| Домен | Формат URL | `https://acme.com` |
|
||
| Электронная почта | Стандартный адрес электронной почты | `john@acme.com` |
|
||
| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
|
||
|
||
<Warning>
|
||
**Формат домена имеет значение!**
|
||
|
||
Используйте `https://domain.com` (не просто `domain.com`). Это соответствует тому, как Twenty хранит домены Компаний, и предотвращает ошибки сопоставления.
|
||
</Warning>
|
||
|
||
### Важные правила
|
||
|
||
1. **Требуется точное совпадение** — значение должно в точности соответствовать родительской записи
|
||
2. **Сопоставляйте только ОДИН уникальный идентификатор** — не указывайте одновременно `companyId` И `companyDomain`
|
||
3. **С учётом регистра** — `Acme.com` ≠ `acme.com`
|
||
|
||
## Шаг 6: Загрузите и сопоставьте связь
|
||
|
||
1. Перейдите к дочернему объекту (например, Люди)
|
||
2. Нажмите **⋮** → **Импорт записей**
|
||
3. Загрузите ваш CSV-файл
|
||
4. На шаге сопоставления полей:
|
||
* Найдите столбец связи (например, `companyDomain`)
|
||
* Сопоставьте его с полем связи **Компания**
|
||
5. Завершите оставшееся сопоставление
|
||
6. Проверьте ошибки и подтвердите
|
||
|
||
Twenty автоматически свяжет каждую дочернюю запись с соответствующим родителем.
|
||
|
||
## Шаг 7: Проверьте импорт
|
||
|
||
После импорта:
|
||
|
||
1. Откройте несколько дочерних записей (например, Люди)
|
||
2. Убедитесь, что в поле связи указан правильный родитель (например, Компания)
|
||
3. Откройте родительскую запись и проверьте раздел связанных записей
|
||
|
||
## Распространённые ошибки, которых следует избегать
|
||
|
||
| Ошибка | Проблема | Решение |
|
||
| -------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------- |
|
||
| **Неправильный порядок импорта** | Импорт Людей раньше Компаний | Всегда сначала импортируйте родительские записи, затем дочерние |
|
||
| **Неверный формат домена** | Использование `acme.com` вместо `https://acme.com` | Используйте полный формат URL с `https://` |
|
||
| **Несколько уникальных полей** | Сопоставление одновременно `companyId` И `companyDomain` | Сопоставляйте только ОДИН уникальный идентификатор |
|
||
| **Отсутствует поле связи** | Поля связи нет в модели данных | Создайте его в **Настройки → Модель данных** перед импортом |
|
||
| **Несуществующие записи** | Родительская запись не существует в Twenty | Сначала импортируйте родительские записи или проверьте опечатки |
|
||
| **Несовпадение регистра** | `Acme.com` в файле, но `acme.com` в Twenty | Обеспечьте точное совпадение регистра |
|
||
|
||
## Связь с участниками рабочего пространства
|
||
|
||
При связывании с участниками рабочего пространства (вашей командой):
|
||
|
||
* Используйте их **адрес электронной почты**, а не имя
|
||
* Пример: `owner@yourcompany.com`, а не «John Smith»
|
||
|
||
```csv
|
||
taskName,assignedTo
|
||
Follow up with client,john@yourcompany.com
|
||
Review proposal,jane@yourcompany.com
|
||
```
|
||
|
||
## Часто задаваемые вопросы
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="Что, если у моей родительской записи нет домена или адреса электронной почты?">
|
||
У вас есть два варианта:
|
||
1. Используйте Twenty `id` (экспортируйте родительские записи, чтобы получить их ID)
|
||
2. Создайте пользовательское уникальное поле в вашей модели данных для хранения внешнего ID из вашей предыдущей системы
|
||
</Accordion>
|
||
|
||
<Accordion title="Могу ли я обновлять связи у существующих записей?">
|
||
Да! Укажите уникальный идентификатор дочерней записи (например, `email` для Людей) и новое значение связи. Импорт обновит связь.
|
||
</Accordion>
|
||
|
||
<Accordion title="Могу ли я импортировать связи многие-ко-многим?">
|
||
Связи многие-ко-многим пока не поддерживаются для импорта. Это запланировано на первое полугодие 2026 года.
|
||
</Accordion>
|
||
|
||
<Accordion title="Могу ли я связывать с несколькими типами объектов (например, Заметки с Людьми И Компаниями)?">
|
||
Связи, указывающие на несколько типов объектов, пока не поддерживаются для импорта/экспорта. Это запланировано в нашей дорожной карте.
|
||
</Accordion>
|
||
|
||
<Accordion title="Что происходит, если родительской записи не существует?">
|
||
Импорт покажет ошибку для этой строки. Вы можете либо:
|
||
* Сначала импортируйте родительскую запись, затем повторите импорт
|
||
* Исправьте ссылочное значение
|
||
* Исключите строку из импорта
|
||
</Accordion>
|
||
|
||
<Accordion title="Почему связь устанавливается некорректно?">
|
||
Распространённые причины:
|
||
* Неверный формат (для доменов используйте `https://domain.com`)
|
||
* Несовпадение регистра (проверьте точное написание)
|
||
* Родитель не существует (сначала импортируйте родителей)
|
||
* Сопоставление нескольких идентификаторов (используйте только один)
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
<Warning>
|
||
**Помните: записи, помеченные как удалённые, учитываются при проверке уникальности.**
|
||
|
||
Если вы получаете ошибки «not found», но запись, кажется, существует, проверьте Command Menu → See deleted records. Возможно, родитель был помечен как удалённый.
|
||
</Warning>
|
||
|
||
## Устранение неполадок
|
||
|
||
Возникли проблемы? Проверьте:
|
||
|
||
* [Как исправить ошибки импорта](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
|
||
* [Возможности импорта связей](/l/ru/user-guide/data-migration/capabilities/import-relations)
|
||
* [Ограничения уникальности](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
|