無限ループ
無限ループとは何か、いつ発生するのか
無限ループとは、レシピ内のアクションがそのレシピを再度トリガーすることにより、レシピが継続的に実行されるロジックエラーです。
無限ループは、複数のアプリケーションがあり、データがアプリケーションAからアプリケーションBへ移動してからAに戻る場合など、レシピが双方向同期を実行しているときに最もよく発生します。
レシピが無限ループに陥っているかどうかを確認する方法
次の場合、レシピが無限ループに陥っている可能性があります。
- トランザクション数が予想外に多い
- アプリケーションに新しいトリガーイベントがないのにレシピがトリガーされる
- レシピによって作成されたオブジェクトの重複がアプリケーション内に多数存在する
無限ループに陥っているサンプルレシピ
次の例は、無限ループが発生する仕組みを示しています。
無限ループエラーを引き起こすレシピ
トリガーがSalesforceの新規または更新されたContactsを取得します。
レシピは、取引先責任者のメールアドレスを持つ既存のMarketoリードがあるかどうかを確認します。 まだ存在しない場合、レシピはMarketoリードを作成します。
最後のステップで、レシピはMarketoリードの詳細を使用してSalesforceの取引先責任者を更新します。
無限ループエラーが発生する理由
最後の更新ステップにより、Salesforceの取引先責任者が更新された状態になります。 その結果、レシピがトリガーされて別のジョブが開始されます。
無限ループは、複数のレシピを同時に実行していて、あるレシピが、オブジェクトの更新によってトリガーされる別のレシピを更新するという同様の問題が発生した場合にも発生する可能性があります。
Workatoはレコードが更新されたことをどのように認識しますか
Workatoは、Last Modified日時フィールドを使用して更新されたレコードを識別します。 レコードが最近更新された場合、トリガーされて新しいレシピジョブが作成されます。
トリガーフィルターを使用した無限ループの防止
レシピの再トリガーを停止するには、トリガーにフィルターを実装します。 これを実行する方法の例は次のとおりです。
無限ループを防ぐためのトリガー条件を追加
処理しないレコードを除外するには、トリガーフィルターを使用します。 このサンプルレシピでは、MarketoリードIDのみを確認しているため、既存のMarketo Acquisition DateがすでにあるすべてのSalesforce取引先責任者を無視できます。
これらのSalesforce取引先責任者を除外することで、その取引先責任者はレシピによって無視され、無限ループは発生しません。
ベストプラクティス: カスタムフィールドの作成
Workatoによって同期されたジョブを識別するためのフィールドを、接続済みアプリケーションに作成します。 上記の例では、Salesforce OpportunityのMarketo Acquisition Dateフィールドはデフォルトで空にしておく必要があります。
そのため、一般的に使用されるフィールドをこの目的に使用することは推奨されません。誤って入力され、そのジョブがトリガーで除外される可能性があるためです。
Last updated: