11
votes

Contrôlez le nombre de résultats d'un appel magento API

J'ai un programme que nous utilisons pour connecter notre magasin Magento à notre système de contrôle d'inventaire arrière de l'API. Actuellement ce qu'il fait est interroger l'API de Magento pour toutes les commandes en attente en attente, les insère dans le système d'extrémité arrière, puis définit leur statut au traitement de Magento. En raison de limitations de notre système d'inventaire, nous ne pouvons que insérer un nombre limité de commandes à la fois. Nous contrôlons cela en exécutant l'ensemble du processus via une boucle If si indiqué ci-dessous (FYI, le code a été modifié pour afficher uniquement les parties clés de ce problème): XXX

La chute évidente de faire C'est ainsi que je dois toujours tirer toutes les commandes en attente, même si je vais travailler avec seulement 10 d'entre eux. I.e. Si j'ai 200 commandes en attente, l'API renvoie à 200 d'entre eux, processus 10, puis saute le reste. Ce que je veux faire, c'est modifier le filtre de l'appel de l'API pour tirer seulement 10 commandes à la fois du traitement du statut. Cela me permettrait de supprimer la surcharge de la boucle If et de faire fonctionner le programme plus efficacement, car il ne reçoit que les données nécessaires.

Est-ce que quelqu'un sait comment appliquer ce type de filtre? Tout ce que j'ai vu suggérer que vous ne pouvez le faire que si vous connaissez les numéros de commande et définir des limites en fonction de cela. Merci pour votre aide !!!


2 commentaires

+1 pour une question clairement formée.


Je crois que cette question était déjà résolue, mais il vaut la peine de mentionner que l'API de Repose de Magento soutient la pagination et la limite.


3 Réponses :


0
votes

Vous devriez pouvoir utiliser Setpage, qui définit la clause de limite de requête en spécifiant le numéro de page (un indexé) et le nombre d'enregistrements par page.

$collection->setPage(2, 10);


1 commentaires

La Standard Magento Sales_Order API ne permet pas de passer une limite directement. L'OP aurait besoin de remplacer mage_sales_model_order_api :: éléments () pour le faire.



18
votes

Tous les appels API sont, éventuellement, juste exécuté du code PHP. Il y aura une seule méthode PHP quelque part qui accepte les arguments passés via l'appel de l'API, de sorte que votre meilleur pari est de suivre où ce code PHP est exécuté.

L'étape 1 est de trouver la configuration de l'appel de l'API. Dans les versions modernes de Magento, les configurations API sont conservées dans des fichiers nommés api.xml code> p> xxx pré>

une fois que vous avez trouvé tous les API . XML CODE> Fichiers, recherchez-les à l'intermédiaire à la fin de laquelle on configure votre "espace de noms d'API de haut niveau" (incertain de ce que cela est vraiment appelé par les développeurs internes) p> xxx pré> it On dirait que app / code / core / mage / ventes / etc / api.xml code> est le fichier que nous voulons, car il dispose d'une balise Code>. Ensuite, ouvrez le fichier et regardez le noeud code>. P>

$collection->addFieldToFilter($field, $value);


2 commentaires

C'est un brillant 101 sur les méthodes d'API de retour arrière, Alan. Je crois que ce sera très utile pour de nombreux utilisateurs (au moins pour ceux qui utilisent vraiment la recherche avant de demander ^^). +1 et ajouté aux favoris.


Excellent tutoriel, exactement ce dont j'avais besoin et m'a aidé à pousser tout ce problème à une meilleure solution. Merci beaucoup!



1
votes

Une solution rapide pour définir une limite consiste à localiser l'application / Code / Core / Mage / Sales / Modèle / Commande / API.PHP (et effectuez une écrasement de la classe) ALORS:

Modifier la méthode Signature pour accepter Une autre limite de paramètre $ Donc, la signature de la méthode ressemble à: xxx

puis, ajoutez la ligne suivante avant "foreach ($ ordercollection comme $ commande) {": < Pré> xxx

transmettez simplement la limite comme argument supplémentaire à l'appel d'API Sales_Order.list.

Booyah!


0 commentaires