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
149 lines
9.0 KiB
Plaintext
149 lines
9.0 KiB
Plaintext
---
|
||
title: オブジェクト間のリレーションをインポートする
|
||
description: CSV を使ってレコード間のリレーションをインポートします。
|
||
---
|
||
|
||
## 概要
|
||
|
||
Twenty は、CSV インポート時にオブジェクト間のリレーションのインポートをサポートしています。 これにより、データ移行の一環としてレコードをリンクできます(例:連絡先を会社に関連付ける)。
|
||
|
||
<Note>**現在インポートでサポート**:各側が単一のオブジェクトタイプを指す一対多リレーション(例:連絡先 → 会社)。 複数のオブジェクトタイプを指すリレーションは、現時点ではインポート/エクスポートに対応していません。</Note>
|
||
|
||
## Twenty におけるリレーションの仕組み
|
||
|
||
### 1 対多 / 多対 1
|
||
|
||
Twenty は、1 件のレコードが複数のレコードにリンクする標準的なリレーションをサポートしています:
|
||
|
||
* **1 社 → 複数の連絡先**:1 つの会社には複数の従業員が所属できますが、各連絡先は 1 つの会社に所属します
|
||
* **1 社 → 複数の商談**:1 つの会社は複数の商談を持てますが、各商談は 1 つの会社に属します
|
||
|
||
### 複数のオブジェクトタイプを指すことができるリレーション
|
||
|
||
一部のリレーションは、異なる種類のオブジェクトに接続できます。 これは 2 つのパターンで機能します:
|
||
|
||
**パターン 1:異なるオブジェクトタイプからの多数のレコードが、それぞれ 1 件のレコードにリンクする場合**
|
||
|
||
複数のメモまたはタスクは、それぞれ複数のオブジェクトタイプに一度にアタッチできます。
|
||
|
||
* **メモ**は、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます
|
||
* **タスク**は、連絡先 1 件、会社 1 社、商談 1 件に同時にリンクできます
|
||
|
||
ここでは、メモ/タスクが「多」の側です。 それぞれがオブジェクトタイプごとに 1 件のレコードへリンクします。
|
||
|
||
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
|
||
|
||
**パターン 2:1 件のレコードが、異なるオブジェクトタイプの多数のレコードからリンクを受け取る場合**
|
||
|
||
プロジェクトは、異なるオブジェクトタイプにわたる複数のレコードからリンクを受け取ることができます:
|
||
|
||
* **プロジェクト**には、多数の連絡先がリンクされ、多数の会社がリンクされ、多数のメモが添付される可能性があります
|
||
|
||
ここでは、プロジェクトが「1」の側です。 異なるオブジェクトの複数のレコードが、同じプロジェクトにすべてリンクできます。
|
||
|
||
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
|
||
|
||
<Warning>
|
||
**インポート/エクスポートの制限**:複数のオブジェクトタイプを指すリレーション(例:メモ → 連絡先/会社/商談)は、CSV のインポートやエクスポートでは**まだサポートされていません**。
|
||
|
||
* **インポート**:各側が単一のオブジェクトタイプを指す一対多のリレーションのみインポートできます
|
||
* **エクスポート**:複数のオブジェクトタイプを指すリレーションの列は、現在空のままになります
|
||
|
||
これはロードマップにあります。
|
||
</Warning>
|
||
|
||
### 現在サポートされていないもの
|
||
|
||
**多対多リレーション**はまだ利用できません。 たとえば、現在は次のようなリレーションを作成できません:
|
||
|
||
* 多数の連絡先が多数のプロジェクトにリンクされる
|
||
|
||
<Note>H22026年には多くの関係が予定されています。</Note>
|
||
|
||
## インポート時にレコードをリンクする
|
||
|
||
<Note>**リマインダー**:各側が単一のオブジェクトタイプを指す一対多のリレーションのみインポートできます(例:連絡先 → 会社)。 複数のオブジェクトタイプを指すリレーション(例:メモ → 連絡先/会社/商談)は、まだサポートされていません。</Note>
|
||
|
||
### ステップ 1: 「1」と「多」の側を特定する
|
||
|
||
まず、どのオブジェクトがリレーションの「1」の側で、どのオブジェクトが「多」の側かを特定します。
|
||
|
||
**例**:
|
||
|
||
* **会社**が「1」の側(1 つの会社に多くの従業員がいる)
|
||
* **連絡先**が「多」の側(各人は 1 つの会社に所属する)
|
||
|
||
### ステップ 2: 「1」の側のレコードが存在することを確認する
|
||
|
||
「多」の側をインポートする前に、「1」の側のレコードが Twenty に既に存在している必要があります。
|
||
|
||
* まず「1」の側のレコード(例:会社)をインポートまたは作成します
|
||
* それらの一意の識別子を検証します。 これは次のいずれかです:
|
||
* `id`(Twenty の UUID)
|
||
* 一意に設定されたフィールド(例:会社の `domain`、または以前のシステムの外部 ID)
|
||
|
||
<Warning>存在しないレコードを参照している場合、インポートは失敗します。</Warning>
|
||
|
||
### ステップ 3: CSV ファイルを準備する
|
||
|
||
「多」の側の CSV ファイルに、「1」の側のレコードを参照する列を追加します。
|
||
|
||
**例**:会社にリンクする連絡先の CSV ファイルの場合:
|
||
|
||
```
|
||
firstName,lastName,email,companyDomain
|
||
John,Smith,john@acme.com,https://acme.com
|
||
Jane,Doe,jane@widgets.co,https://widgets.co
|
||
```
|
||
|
||
**重要**:
|
||
|
||
* 値は会社レコード上の一意フィールドと**完全に一致**している必要があります
|
||
* ドメインの場合は、ドメインラベルではなく、**ドメイン URL**(例:`https://acme.com`)を使用してください
|
||
* リレーションごとに**1 つ**の一意の識別子のみをマッピングしてください。そうすることで、よりスムーズにインポートできます
|
||
|
||
### ステップ 4: リレーションフィールドが存在することを確認する
|
||
|
||
ファイルをアップロードする前に、オブジェクト間にリレーションフィールドが存在することを確認してください。
|
||
|
||
存在しない場合は:
|
||
|
||
1. **設定 → データモデル** に移動
|
||
2. オブジェクト(例:連絡先)を選択する
|
||
3. 対象オブジェクト(例:会社)を指すリレーションフィールドを作成する
|
||
|
||
### ステップ 5: リレーションをアップロードしてマッピングする
|
||
|
||
1. インポート UI から CSV ファイルをアップロードする
|
||
2. フィールドのマッピング手順で、リレーション列(例:`companyDomain`)を見つける
|
||
3. それをリレーションフィールド(例:会社)にマッピングする
|
||
4. Twenty が各レコードを一致する親に自動でリンクします。
|
||
|
||
### リレーションで利用可能な一意フィールド
|
||
|
||
| オブジェクト | 利用可能な一意フィールド |
|
||
| ----------------------------- | ---------------------------- |
|
||
| **会社** | `id`、`domain`、任意のカスタム一意フィールド |
|
||
| **連絡先** | `id`、`email`、任意のカスタム一意フィールド |
|
||
| **ワークスペースメンバー** | `id`、`email`(名前ではありません) |
|
||
| **その他の標準オブジェクトおよびカスタムオブジェクト** | `id`、一意としてマークされた任意のフィールド |
|
||
|
||
<Note>**ワークスペースメンバーへのリンク**:リレーションの参照先がワークスペースメンバー(Twenty にログインするあなたのチーム)の場合、名前ではなく**メールアドレス**で参照してください。</Note>
|
||
|
||
<Note>会社には `domain`、連絡先には `email` を使用することをおすすめします。これらは人間が読みやすく、スプレッドシートでの管理も容易です。</Note>
|
||
|
||
<Note>**リマインダー**:ソフト削除されたレコード(コマンドメニュー → 削除済みレコードを表示 で確認可能)は、一意性の判定に含まれます。 削除済みレコードと同じ一意の値を持つレコードをインポートすると、その削除済みレコードが復元されます。 詳細は[一意性制約](/l/ja/user-guide/data-migration/capabilities/uniqueness-constraints)を参照してください。</Note>
|
||
|
||
## インポート順のルール
|
||
|
||
<Warning>
|
||
**必ず「1」の側を先にインポートしてください!**
|
||
|
||
1. **会社**を最初に(依存関係なし)
|
||
2. **連絡先**を次に(会社にリンク)
|
||
3. **商談**を 3 番目に(会社/連絡先にリンク)
|
||
4. **カスタムオブジェクト**は依存関係に従って
|
||
|
||
参照する前に、親レコードが存在している必要があります。
|
||
</Warning>
|