web-dev-qa-db-ja.com

Wp_schedule_eventアクションに2つの可能な方向がある場合、無限ループを回避する方法

私はこのようにWordPressとSalesforceをリンクするプラグインを作成しています(プラグインが何をするのかを明確にするためにここで更新します)。

  1. salesforce_Push:WordPressからSalesforceにデータを送信します。これは、新しいアイテム(マップ設定によっては投稿、ユーザーなど)がWordPressで作成/更新/削除され、そのデータがSalesforce APIに送信されてマッピングオブジェクトが作成/更新/削除されたときに発生します。マッピングはアイテムのID(たとえば、ユーザーIDから連絡先IDへ)に基づいて行われます。
  2. salesforce_pull:(マップ設定に基づいて)WordPressに戻ってくるべき作成/更新/削除されたオブジェクトについてSalesforceを確認してください。たとえば、連絡先はSalesforceで更新されます。これでWordPressの対応するユーザーが更新されます。
  3. オブジェクト行(たとえば、特定のユーザーIDから特定の連絡先IDなど)とオブジェクト行(たとえば、連絡先のユーザー)をリンクするテーブルがあります。

2つのwp_schedule_eventメソッドがあります。1つはPush用、もう1つはpull用です。上記のメソッドがイベントにデータを送信してから、処理が行われます(Salesforce APIメソッドまたはWordPressメソッドを呼び出してアイテムを作成/更新/削除します)。

現在のところ、これが起こります。

  1. 私はWordPress(localhost上)でアイテムを作成/更新/削除します。次回プッシュwp_schedule_eventが実行されるときに、Salesforceでも同じことが起こります。たとえば、5分ごとにSalesforceに新しいユーザを送信して連絡先を作成したり、すでにWordPressユーザにマッピングされている場合はそれらを更新したりします。
  2. Salesforceでマップアイテムを作成/更新/削除します。次回pull wp_schedule_eventが実行されるとき、Salesforce APIからそのアイテムのデータをロードし、それをsalesforce_pullに送信します。ここで、WordPressでオブジェクトを作成/更新/削除するメソッドを呼び出します(この部分はまだ完成していません)。

問題はこれです:

#1では、SalesforceアイテムがWordPressアクティビティ(salesforce_Push)に基づいて作成または更新されたときに、Salesforceで何かが変更されたことを認識しているため、salesforce_pullメソッドも呼び出そうとします。

これは、各システムが他のシステムを更新しようとし続けるため、満足できないループを作成します。私は各メソッドが他のメソッドによって呼び出されたかどうかを確認するためにどのような種類のチェックを実行するのかを決定しようとしていますが、システムの正当な編集を止めることのできないものを作成することはできません。

やめたいイベントは次のようになります。

  1. WordPressユーザーがプロファイルを更新すると、それがSalesforceに送信されて連絡先が更新されます。
  2. Salesforceは、ユーザを更新するために同じ変更をWordPressに送り返します。

(これは現在起こっていることです、明確にするために)

許可したいイベントは次のようになります。

  1. WordPressユーザーがプロファイルを更新すると、それがSalesforceに送信されて連絡先が更新されます。
  2. Salesforceはユーザのための金融取引を処理し、彼らの寄付履歴を更新し、それをWordPressに送り返します。
5

増分を変更するたびに、ユーザーデータバージョンインデックス変数を作成する必要があります。これは、データセットの最新バージョンがどれであるかを追跡するのに役立ちます。そのインデックスの値を使用して、更新が発生するかどうかを判断できます。

(コメントからの回答)

1
Nicolai