> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-clara.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# 関連レコードのデータを表示

> ワークフローを使用して、関連レコードのデータ（例：商談上の会社情報）を表示します。

関連レコードのデータを自分のレコード上に直接表示します — たとえば、会社の従業員数をその会社の商談に表示します。 入れ子フィールドがネイティブに利用可能になるまで、このワークフローによる回避策が役立ちます。

## 一般的な使用例

| ソース | コピー先 | コピーするフィールド     |
| --- | ---- | -------------- |
| 会社  | 商談   | 業種、会社規模、ARR    |
| 人物  | 商談   | メール、電話、役職      |
| 商談  | 会社   | 直近の商談金額、直近の受注日 |

## 基本的なフィールドのコピー

### 例: 連絡先のメールを商談にコピー

**目標**: 商談で連絡担当者を設定したとき、その人物のメールを商談にコピーして簡単に参照できるようにする。

### 前提条件

ワークフローを作成する前に、**設定 → データモデル → 商談** でコピー先フィールドを作成します:

* 連絡先メール（タイプ: Email）
* 連絡先電話（タイプ: Phone）

### セットアップ

1. **トリガー**: レコードが更新（商談、連絡担当者フィールド）

2. **フィルター**: 連絡担当者が空でないことを確認

3. **レコード検索**: リンクされた人物を見つける
   * オブジェクト: People
   * フィルター: ID が `{{trigger.object.pointOfContact.id}}` に等しい

4. **レコードを更新**:
   * オブジェクト: Opportunities
   * レコード: `{{trigger.object.id}}`
   * 連絡先メール: `{{searchRecords[0].email}}`
   * 連絡先電話: `{{searchRecords[0].phone}}`

## 複数フィールドのコピー

### 例: 関連するすべての商談に会社情報を同期

**目標**: 会社の詳細が変更されたら、関連するすべての商談を更新する。

### セットアップ

1. **トリガー**: レコードが更新（会社）
   * フィールド: 業種、会社規模、年間売上高

2. **レコード検索**: この会社のすべての商談を見つける
   * オブジェクト: Opportunities
   * フィルター: 会社 ID が `{{trigger.object.id}}` に等しい

3. **イテレーター**: 各商談をループ処理する

4. **レコードを更新** (イテレーター内):
   * オブジェクト: Opportunities
   * レコード: `{{iterator.currentItem.id}}`
   * 会社の業種: `{{trigger.object.industry}}`
   * 会社規模: `{{trigger.object.companySize}}`
   * 会社のARR: `{{trigger.object.annualRevenue}}`

## レコード作成時のコピー

### 例: 会社データで商談を事前入力

**目標**: 会社にリンクされた商談を作成するとき、主要な会社情報を自動コピーする。

### 前提条件

**設定 → データモデル → 商談** でコピー先フィールドを作成します:

* 会社の業種（タイプ: Text）
* 会社規模（タイプ: Number）

### セットアップ

1. **トリガー**: レコードが作成（商談）
   * フィルター: 会社が空でない

2. **レコード検索**: リンクされた会社の詳細を取得
   * オブジェクト: Companies
   * フィルター: ID が `{{trigger.object.company.id}}` に等しい

3. **レコードを更新**:
   * オブジェクト: Opportunities
   * レコード: `{{trigger.object.id}}`
   * 会社の業種: `{{searchRecords[0].industry}}`
   * 会社規模: `{{searchRecords[0].employees}}`

<Note>
  **タスクとノートの制限**: タスクとノートのリレーションは多対多としてハードコードされており、ワークフローのトリガーやアクションではまだ使用できません。 これらのリレーションにアクセスするには、代わりに[API](/l/ja/developers/api)を使用してください。
</Note>

## 双方向同期

### 例: 主担当者を同期した状態に保つ

**目標**: 会社の主担当者が変更されたら、その人物を更新する。 人物が主担当者になったときは、会社を更新する。

### ワークフロー 1: 会社 → 人物

1. **トリガー**: レコードが更新（会社、主担当者フィールド）
2. **レコードを更新**: 人物の "Is Primary Contact" を true に設定
3. **レコード検索**: 以前の主担当者を見つける
4. **レコードを更新**: 以前の連絡先の "Is Primary Contact" を false に設定

### ワークフロー 2: 人物 → 会社

1. **トリガー**: レコードが更新（人物、Is Primary Contact = true）
2. **レコードを更新**: 会社の主担当者をこの人物に設定

<Note>
  無限ループを避けるため、双方向同期の取り扱いには注意してください。 更新前に値が実際に変更されたかを確認するフィルターを使用する。
</Note>

## コードによる複雑なマッピング

### 例: コピー時にデータを変換

**目標**: 人物から商談へ電話番号をコピーし、フォーマットする。

```javascript theme={null}
export const main = async (params) => {
  const { phone } = params;

  if (!phone) return { formattedPhone: null };

  // Remove non-numeric characters
  const digits = phone.replace(/\D/g, '');

  // Format as (XXX) XXX-XXXX
  const formatted = digits.length === 10
    ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
    : phone;

  return { formattedPhone: formatted };
};
```

## ベストプラクティス

### ループを回避する

* 互いにトリガーし合って終わらないワークフローを作成しない
* 特定のフィールド条件を使用する
* 値が実際に変更されたかを確認するチェックを追加する

### 欠損データの取り扱い

* コピー前に常にソースレコードの存在を確認する
* 任意フィールドには既定値を用意する
* ソースフィールドが空の場合はフィルターでスキップする

### パフォーマンス

* 多数のレコードにコピーする場合はバッチ更新を使用する
* 大規模な同期処理にはスケジュールされたワークフローを使用する
* 複数レコードの更新にはイテレーターの使用を検討する

## 関連

* [ワークフローのアクション](/l/ja/user-guide/workflows/capabilities/workflow-actions)
* [ワークフローのトリガー](/l/ja/user-guide/workflows/capabilities/workflow-triggers)
