Je travaille sur une intégration Salesforce pour une application à fort trafic où nous souhaitons automatiser le processus d'importation des enregistrements de Salesforce dans notre application. Pour être clair, je ne travaille pas du côté de Salesforce (c'est-à-dire Apex), mais plutôt en utilisant l'API de repos Salesforce à partir de l'autre application.Comment puis-je interroger l'API Salesforce pour rechercher des enregistrements qui répondent aux critères et qui n'ont jamais été consultés par mon application?
La première idée consistait à utiliser l'heure limite pour la création de l'enregistrement où nous allions augmenter ce temps sur chaque sondage en fonction de l'heure de création du demandeur dans le dernier sondage. On s'est vite rendu compte que ça ne marcherait pas pour ça. Dans la requête, d'autres filtres peuvent inclure un champ d'état dans Salesforce, par exemple, où l'enregistrement doit uniquement être importé après la définition d'un certain statut. Cela rendrait le temps de création de la vérification ou tout autre élément non fiable, car un enregistrement plus ancien pourrait devenir pertinent pour notre importation automatique.
Mon idée suivante consistait à interroger l'API Salesforce pour trouver des enregistrements toutes les quelques heures. Afin d'éviter d'importer le même enregistrement deux fois, la seule façon que je pouvais penser à faire est de garder la trace des ID que nous avons déjà tenté d'importer et les utiliser pour faire un pas en bon état:
SELECT #{columns} FROM #{sobject_name}
WHERE Id NOT IN #{ids_we_already_imported} AND #{other_filters}
Mon grand À ce stade, la question était de savoir si Salesforce avait ou non une limite à la longueur de la clause WHERE. A travers quelques recherches, je vois qu'il ya en fait plusieurs limites:
La prochaine chose que je considérais comme accomplissait des requêtes pour trouver tous les ID dans Salesforce qui répondent aux conditions des autres filtres sans vérifier l'ID lui-même . Ensuite, nous pourrions prendre cette liste d'identifiants et supprimer ceux que nous avons déjà suivis de notre côté pour trouver une condition IN plus petite que nous pourrions définir pour trouver toutes les données sur les enregistrements dont nous avons réellement besoin.
Cela ne semble toujours pas complètement fiable cependant. Je vois qu'une seule requête ne peut renvoyer que 2 000 lignes et avoir seulement un décalage jusqu'à 2000. Si nous avons déjà importé 2000 enregistrements, la première requête pourrait ne pas avoir de lignes nécessaires à importer, mais nous ne pouvons pas la compenser pour obtenir les lignes pertinentes en raison de ces limitations. Avec ces limitations je ne peux pas trouver un moyen fiable de trouver les enregistrements pertinents à importer que le nombre d'enregistrements que nous avons déjà importé se développe. J'ai l'impression que ce serait une utilisation courante d'une intégration Salesforce, mais je ne trouve rien à ce sujet. Comment puis-je faire cela sans avoir à m'inquiéter des problèmes lorsque nous atteignons un volume élevé?
il n'y a pas 2000 limite sur la requête, les 2000 premières lignes seront retournées mais vous pouvez accéder au reste d'entre eux [en obtenant la valeur du champ nextRecordsUrl] – superfell
Merci!Je n'avais aucune idée qu'il y avait un moyen intégré pour obtenir le reste des résultats de la requête! Cela permettrait certainement le plan que j'ai expliqué ci-dessus de travailler. – mikewoj