Introduction
Ceci est un suivi de la vidéo que j’ai partagée la semaine dernière sur l’atténuation du problème de l’épuisement des appels API à l’aide de notifications et SignalR. Dans cet article de blog, je fournis plus de détails, ainsi que le code que vous pouvez utiliser dans votre implémentation des informations que j’ai présentées.
Réception des notifications push Acumatica
Dans les étapes suivantes, je vais vous montrer directement comment vous pouvez recevoir des notifications push d’Acumatica dans une application Windows Forms.
À l’aide des données de démonstration des ventes d’Acumatica, apportez les modifications de configuration simples suivantes. Ouvrez le fichier web.config et recherchez la section appSettings et définissez la clé EnablePushNotifications sur true.
Ensuite, créez une enquête générique qui fournit les modifications que vous devez suivre. Appelons-le « TestInqSO ». Ensuite, nous ajouterions une table SOOrder et des champs à une grille - tels que Status, OrderNbr, Hold, DocBal, OrderDesc, etc.
Ensuite, nous définirions ensuite plusieurs requêtes pour chaque destination de notification. Cependant, les requêtes de données doivent respecter les recommandations suivantes pour des résultats optimaux :
- N’utilisez pas l’agrégation et le regroupement dans aucune des requêtes ; Acumatica ERP ne garantit pas que les notifications push fonctionneront correctement en utilisant ces paramètres.
- N’utilisez pas de jointures de plusieurs tables de détails dans vos requêtes, car cela peut entraîner le blocage du système.
- Si vous devez joindre plusieurs tables, utilisez une jointure gauche ou une jointure interne dans vos requêtes de données. Si vous utilisez une jointure interne, l’exécution de la requête peut être plus lente que pour une jointure gauche.
- Utilisez une requête de données aussi simple que possible.
- Pour une requête définie à l’aide d’une requête générique, n’utilisez pas de formule sous l’onglet Grille de résultats de l’enquête générique
Maintenant, accédez aux notifications push (SM302000) et créez-en une nouvelle.
Dans le nom de destination, tapez TestNotification par exemple.
Cochez la case Active.
Dans le type de destination, choisissez le hub de SignalR.
Dans l’onglet Demandes génériques , ajoutez une nouvelle ligne, Titre de l’enquête et sélectionnez l’IG TestInqSO que vous avez créé précédemment et cochez Active et save vos modifications.
À ce stade, vous voudrez créer une application Windows Forms simple avec deux boutons : Démarrer et Arrêter pour démarrer et fermer la connexion. Ensuite, créez des gestionnaires d’événements Click pour chacun des boutons.
Ensuite, définissez la classe pour votre notification, comme indiqué dans le code suivant.
GIST : https://gist.github.com/YuriyZaletskyy/7f934bd1b51eb3e1a65057c3f1c2ff91
Fournissez les étapes suivantes dans le gestionnaire d’événements de clic démarrer :
Configurez un jeton d’authentification de base pour authentifier l’application dans Acumatica ERP comme indiqué dans le code suivant.
GIST: https://gist.github.com/YuriyZaletskyy/e06bbda872d00d23b870032376958c59
Connectez-vous à une instance d’Acumatica ERP comme suit :
GIST : https://gist.github.com/YuriyZaletskyy/e901c289ec2ccd51160fc0a08c175166
Si vous n’utilisez pas locataires, vous pouvez vous authentifier de la manière suivante :
var basicAuthToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(login + « : » + password));
Ensuite, vous allez créer un proxy au concentrateur SignalR basé sur le nom du hub qui a été spécifié dans la zone nom de destination quand la notification push a été définie sur le formulaire de notification push (SM302000).
GIST : https://gist.github.com/YuriyZaletskyy/2b813ec12d8a46e46f971c3a65a7871d
Notifications de processus
Le code suivant affiche une Boîte à message avec des données JSON. Structure JSON formant par la grille de résultats de l’onglet GI TestInqSO créée.
GIST: https://gist.github.com/YuriyZaletskyy/9695027bf9243bdda3361bb61cefcd9c
Lorsque des données sont créées sur l’instance Acumatica, vous recevez ces modifications dans NotificationResult.Inserted.
Lorsque des données sont supprimées sur l’instance, vous recevez ces modifications dans NotificationResult.Deleted.
Lorsque les données sont mises à jour sur l’instance, vous recevez ces modifications dans NotificationResult.Deleted (données avant une mise à jour) et dans NotificationResult.Inserted (données après une mise à jour).
Dans le gestionnaire d’événements Arrêter le clic, fermez simplement la connexion proche :
connexion. Stop();
Maintenant, chaque fois qu’il y a des modifications apportées aux commandes client (SO301000), vous recevrez des notifications.
Le code complet pour accomplir tout cela ressemble à ceci:
GIST: https://gist.github.com/YuriyZaletskyy/5dff485f3fcc787841b71e1e40cd6336
Résumé
Avec le flux de travail décrit dans cet article, vous pouvez facilement informer les services et applications 3rd party des changements qui se produisent à l’intérieur d’Acumatica. De plus, avec le mécanisme de notifications push d’Acumatica, vous pouvez obtenir une communication en temps réel entre Acumatica et d’autres services au lieu d’appeler régulièrement les API Acumatica, en poussant les restrictions d’appel de l’API et en les épuisant, ce qui a un impact sur les limites de connexion de votre application.
Bon codage!