# 無限ループ
# 無限ループの定義とそれが発生する状況
無限ループとは、レシピ内のアクションがレシピを再びトリガーしているため、レシピが実行され続けるロジックエラーです。
無限ループは、レシピが 双方向 の同期を実行しているときに最も頻繁に発生します。たとえば、複数のアプリケーションがあり、データをアプリケーション A からアプリケーション B に移動してから、アプリケーション A に戻す場合などです。
# レシピで無限ループが発生しているかどうかを示す目印
次の場合に、レシピで無限ループが生じている可能性があります。
- トランザクションの数が予想以上に多い
- アプリケーションで 新しいトリガーイベントがない のに、レシピがトリガーされる
- レシピによって作成されたアプリケーション内でオブジェクトの 重複 が多数ある
# 無限ループが発生しているレシピの例
以下の例では、無限ループが発生する様子を示しています。
レシピで発生する無限ループエラー
トリガーが、Salesforce から新規の取引先責任者または更新された取引先責任者を取得します。
レシピが、既存の Marketo リードが存在するかどうかを取引先責任者のメールで確認します。存在していない場合、レシピが Marketo リードを作成します。
最後に、レシピが Salesforce の取引先責任者を Marketo リードの詳細で更新します。
# 無限ループエラーが発生する理由
最後の更新ステップで Salesforce の取引先責任者が更新されると、レシピが別のジョブをトリガーします。
同時に実行している 複数のレシピ があり、類似の問題が発生した場合にも、無限ループが生じることがあります。たとえば、あるレシピが、オブジェクトの更新によってトリガーされる別のレシピを更新している場合などです。
更新済みのレコードを Workato が認識するしくみ
Workato は、 最終更新 日時のフィールドを使用して更新済みのレコードを特定します。レコードが最近更新されている場合に、新しいレシピジョブがトリガーされ、作成されます。
# トリガーフィルターを使用して無限ループを防止
レシピの再トリガーを停止するために、トリガーでフィルターを適用します。これを実行する方法の例を以下に示します。
無限ループを防止するトリガー条件の追加
トリガーフィルターを使用して、処理対象ではないレコードを除外します。上のサンプルレシピでは、Marketo リード ID の有無だけを確認しているので、既存の Marketo Acquisition Date を持つ Salesforce の取引先責任者はすべて無視できます。
こうして除外された Salesforce の取引先責任者はレシピで無視されるため、無限ループの発生が抑制されます。
# ベストプラクティス - カスタム項目の作成
Workato によって同期されるジョブを識別するために、接続されたアプリケーション内に項目を作成します。上記の例では、Salesforce Opportunity の [Marketo Acquisition Date] 項目がデフォルトで空になります。
よく使用される項目をこの目的に使用すると、誤って入力され、トリガーでそのジョブが除外される可能性があるため、そのような項目を使用することは推奨されません。
Last updated: 2023/8/31 1:07:14