メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.twenty.com/llms.txt

Use this file to discover all available pages before exploring further.

Iterator を使用すると、レコードの配列をループし、各レコードに対してアクションを実行できます。 これは、Search Records で返された複数のレコードや Webhook で受信したレコードを処理する必要があるワークフローに不可欠です。

Iterator を使用するタイミング

シナリオ
検索結果を処理見つかった各人物にメールを送信
Webhook の配列を処理各アイテムごとに順番にレコードを作成
一括更新計算された値で複数のレコードを更新
通知イベントについて複数人に通知

Iterator の理解

Iterator は入力として配列を想定しています。 その後、次を実行します:
  1. 配列から最初のアイテムを取り出す
  2. そのアイテムを使って Iterator 内のすべてのアクションを実行する
  3. 次のアイテムに進む
  4. すべてのアイテムが処理されるまで繰り返す

基本的なセットアップ

例: 検索結果の全員にメールを送信

目標: 特定の会社のすべての連絡先を見つけ、各人にパーソナライズされたメールを送信します。

ステップ 1: レコードを検索

  1. Search Records」アクションを追加
  2. オブジェクト: People
  3. フィルター: Company が “Acme Inc” に等しい
  4. これにより、People の配列が返されます

ステップ 2: 結果の有無を確認

  1. Filter」アクションを追加
  2. 条件: {{searchRecords.length}} が 0 より大きい
  3. これにより、結果が空の場合の Iterator エラーを防止します

ステップ 3: Iterator を追加

  1. Iterator」アクションを追加
  2. 配列の入力: {{searchRecords}} を選択
  3. これでループが作成されます

ステップ 4: Iterator 内にアクションを追加

Iterator の後に配置したアクションは、各アイテムに対して実行されます:
  1. Send Email」アクションを追加(Iterator 内)
  2. 宛先: {{iterator.currentItem.email}}
  3. 件名: こんにちは {{iterator.currentItem.firstName}}!
  4. 本文: 現在のアイテムのフィールドを使用したパーソナライズメッセージ

結果

Search Records が 5 人を返した場合、Iterator は次を実行します:
  • 1 人目にメールを送信
  • 2 人目にメールを送信
  • … 5 人すべてに対して続行

現在のアイテムのデータにアクセスする

Iterator 内では、現在のレコードにアクセスするために {{iterator.currentItem}} を使用します:
変数説明
{{iterator.currentItem}}現在のレコードオブジェクト全体
{{iterator.currentItem.id}}レコード ID
{{iterator.currentItem.email}}メールフィールド
{{iterator.currentItem.company.name}}関連する会社名
{{iterator.index}}配列内の現在の位置(0 始まり)

よくあるパターン

複数レコードを更新

目標: 期限超過のタスクをすべて “Late” としてマークします。
1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
2. Filter (length > 0)
3. Iterator (searchRecords)
   └── Update Record
       - Object: Tasks
       - Record: {{iterator.currentItem.id}}
       - Status: Late

配列からレコードを作成

目標: 複数のアイテムを含む注文を Webhook が受信したら、各アイテムのレコードを作成します。
1. Webhook Trigger (receives items array)
2. Filter (items.length > 0)
3. Iterator (trigger.body.items)
   └── Create Record
       - Object: Order Items
       - Name: {{iterator.currentItem.name}}
       - Quantity: {{iterator.currentItem.qty}}
       - Related Order: {{trigger.body.orderId}}

ループ内の条件付き処理

目標: 有効なメールアドレスを持つ連絡先にのみメールを送信します。
1. Search Records (People)
2. Iterator (searchRecords)
   └── Filter (currentItem.email is not empty)
       └── Send Email
           - To: {{iterator.currentItem.email}}

トラブルシューティング

”Iterator expects an array”

原因: 配列ではなく単一のレコードを渡しました。 対処: 単一のレコードではなく、Search Records の結果または配列フィールドを渡していることを確認してください。
✅ Correct: {{searchRecords}}
❌ Wrong: {{searchRecords[0]}}

Iterator が実行されない

原因: 配列が空です。 対処: Iterator の前にフィルターを追加し、配列の長さを確認します:
Filter: {{searchRecords.length}} > 0

アクションが過剰に実行される

原因: Search Records が想定より多くのレコードを返しました。 対処:
  • Search Records により具体的なフィルターを追加する
  • Search Records に上限を設定する(最大 200)
  • 追加条件のために Iterator 内にフィルターを追加する

パフォーマンス上の考慮事項

  • クレジット使用量: 各イテレーションでアクション実行分のクレジットを消費します
  • 時間: 大きな配列は処理に時間がかかります
  • 制限: 非常に大きな処理はバッチ化を検討してください
  • レート制限: 繰り返しが多いと外部 API 呼び出しがレート制限に達する可能性があります

ベストプラクティス

  1. エラーを避けるため、Iterator の前に配列の長さを必ず確認
  2. すべてのアイテムを処理する必要がない場合はループ内にフィルターを追加
  3. 何をループしているか分かるように Iterator ステップの名前を変更
  4. 小さな配列でテストしてから大きなデータセットを処理する
  5. ワークフローの実行を監視して、イテレーションが想定どおりに完了することを確認する

関連