Je construis un plugin qui lie WordPress et Salesforce comme ceci (mise à jour ici pour essayer de clarifier ce que fait le plugin):
salesforce_Push
: envoyer des données depuis WordPress à Salesforce. Cela se produit lorsqu'un nouvel élément (article, utilisateur, etc., dépend des paramètres de la carte) est créé/mis à jour/supprimé dans WordPress et que les données sont envoyées à l'API Salesforce pour créer/mettre à jour/supprimer l'objet mappé. Le mappage est basé sur l'ID de l'élément (ID utilisateur à ID contact, par exemple).salesforce_pull
: recherchez dans Salesforce les objets créés/mis à jour/supprimés qui doivent revenir dans WordPress (en fonction des paramètres de la carte). Par exemple, un contact est mis à jour dans Salesforce; cela devrait mettre à jour l'utilisateur correspondant dans WordPress.Il existe deux méthodes wp_schedule_event
: une pour Push et une pour Pull. Les méthodes ci-dessus envoient des données aux événements, puis le traitement a lieu (soit d'appeler une méthode de l'API Salesforce, soit une méthode WordPress, pour créer/mettre à jour/supprimer un élément).
Actuellement, voici ce qui se passe:
wp_schedule_event
. Par exemple, toutes les 5 minutes, il envoie de nouveaux utilisateurs à Salesforce et leur crée des contacts, ou les met à jour s'ils sont déjà mappés sur des utilisateurs de WordPress.wp_schedule_event
, elle charge les données de cet élément à partir de l'API Salesforce et l'envoie à salesforce_pull
, où elle appellera des méthodes pour créer/mettre à jour/supprimer des objets dans WordPress (cette partie n'est pas encore terminée).Le problème est le suivant:
En n ° 1, lorsqu'un élément Salesforce est créé ou mis à jour en fonction de l'activité WordPress (salesforce_Push
), il tente également d'appeler la méthode salesforce_pull
car il se rend compte que quelque chose a changé dans Salesforce.
Cela crée une boucle qui ne sera pas satisfaite, car chaque système essaye continuellement de mettre à jour l'autre. J'ai essayé de déterminer le type de vérification à exécuter sur chaque méthode pour savoir si elle venait juste d'être appelée par l'autre méthode, mais je suis pour l'instant incapable d'en créer une qui n'arrête pas également les modifications légitimes dans le système.
Un événement que j'aimerais arrêter serait le suivant:
(C’est ce qui se passe actuellement, pour être clair.)
Un événement que j'aimerais autoriser serait le suivant:
Vous devez créer une variable d'index de version de données utilisateur chaque fois qu'elle change d'incrément. Cela devrait vous aider à savoir quelle est la version la plus récente du jeu de données. Vous pouvez utiliser la valeur de cet index pour déterminer si une mise à jour doit avoir lieu ou non.
(Réponse du commentaire)