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

一般的な使用例

ソースコピー先コピーするフィールド
会社商談業種、会社規模、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}}
タスクとノートの制限: タスクとノートのリレーションは多対多としてハードコードされており、ワークフローのトリガーやアクションではまだ使用できません。 これらのリレーションにアクセスするには、代わりにAPIを使用してください。

双方向同期

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

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

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

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

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

  1. トリガー: レコードが更新(人物、Is Primary Contact = true)
  2. レコードを更新: 会社の主担当者をこの人物に設定
無限ループを避けるため、双方向同期の取り扱いには注意してください。 更新前に値が実際に変更されたかを確認するフィルターを使用する。

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

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

目標: 人物から商談へ電話番号をコピーし、フォーマットする。
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 };
};

ベストプラクティス

ループを回避する

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

欠損データの取り扱い

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

パフォーマンス

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

関連