Évaluer le problème et la solution
Révision : Nov, 2023
L'application mobile Acumatica utilise l'écranFS400100pour générerl'élément de menu « Liste des rendez-vous ». Lorsque les techniciens de terrain affichent cet écran, deux options de filtrage s'offrent à eux :la plage de datesetle nom du collaborateur. Il manque toutefois dans ces filtres un critère permettant d'exclureles rendez-vousen attente,terminés,clôturés ouannulés. L'objectif : désencombrer l'écran afin que les techniciens de terrain puissent se concentrer uniquement sur les rendez-vous qui les concernent.
Une solution rapide et facile serait d'exposer une demande générique (IG) à l'application mobile avec ces filtres. Le problème est que la navigation de l'IG sur l'application mobile n'a pas la même fonctionnalité que celle du noyau d'Acumatica, à savoir la possibilité d'ouvrir l'écran de rendez-vous transactionnel lorsqu'il est affiché.
Une meilleure solution consiste simplement à modifierl'écran « Liste des rendez-vous» et à y ajouter un statut. Quelle approche devrions-nous adopter pour y parvenir ?
Évaluation du code existant
La première chose à faire est d'accéder à l'écran «Récapitulatif du compte» (FS400100) dans Acumatica. À l'aide de la fonction très pratique « Inspecter l'élément » (CTRL+ALT+CLIC), nous pouvons identifier que le code de logique métier (BLC) est « AppointmentInq » et que les deux DAC sont « AppointmentInqFilter » et « FSAppointmentFSServiceOrder ».
Notez que le filtre d'en-tête, DACAppointmentInqFilter,ne contient pas lechamp « Status »dans la section d'en-tête du filtre de l'écran de recherche (FS400100). Nous devrons donc l'ajouter.
Nous allons maintenant nous intéresser à la requête qui permettra de filtrer les enregistrements. Il s’agit de lavue « Rendez-vous» déclarée sur le BLC à l’aide du DACFSAppointmentFSServiceOrder, avec quelques jointures à d’autres tables.
Remarquez ce qui suit :
- Il est orné d’unPXFilterable
- Utilise leBQLstandard traditionnel et n'a pas encore été mis à jour versle BQL Fluent
- N'utilise pas la nouvelle interfaceIEnumerable
Solutions de conception
Première option
Ajoutez le champ à une extension DAC, remplacez la vue «Rendez-vous» de l'extension Graph et ajoutez le champ de filtrage à l'application mobile.
Avantages : Rapide et facile à réaliser... Inconvénients : Difficile à maintenir car les changements de versions doivent suivre les changements de vues et ce n'est pas l'approche recommandée par Acumatica.
Dans cette option, nous devrons ajouter les éléments suivants à lavue de filtrage existante :
.And<Current<AppointmentInqFilter.usrStatus>.IsNull
,Or<Current<AppointmentInqFilterExt.usrStatus>.IsEqual<FSAppointmentFSServiceOrder.status>>
Deuxième option
Ajouter le champ à une extension DAC, remplacer la vue par unevue déléguéeet ajouter le champ de filtrage à l'application mobile
Avantages – Acumatica fournit un exemple dans la formationT300; vous le trouverez à la section 11.7. Code
Tests et problèmes
Au départ, j'avais mal orienté mon instruction «whereand» dans la clause «WhereAnd». En d'autres termes, je l'avais placée dans la partie «FSAppointmentFSServiceOrder» de la clause «Where». Cela a créé une situation étrange : le code se compilait sans erreur, mais lors de l'exécution du processus, Acumatica renvoyait uneerreurde syntaxe invalide près de « ) ».Cela m'a semblé être une erreur SQL, j'ai donc pu identifier le problème en examinant le code SQL généré via leProfileur de requêtes. À partir de là, j’ai pu constater dans leparamètre P25 que mavariable `UsrStatus` étaitrenseignée, mais que lavariable `Status`issue du rendez-vous était vide. Le code SQL se lisait donccomme suit : `(@P25 = )`. La valeur manquante était à l’origine de l’erreur et j’ai pu y remédier en corrigeant l’instruction de la clause`Where`dans la méthode.
Par ailleurs, lors des tests, j'ai remarqué que j'avais oublié de définir la valeur «Commit Changes» sur« true »pour le champUsrStatus. Cela a empêché l'actualisation des enregistrements, à moins qu'unautrechamp de filtragene soit également mis à jour.
Mise à jour de l'application mobile
Enfin, nous devons ajouter lechamp de filtrageà l'application mobile. Laliste des rendez-vousse trouve dans l'écran «Récapitulatif des rendez-vous» (FS400100). En consultant leWSDL/MSDL, nousconstatons que notre champ «UsrStatus» a été ajouté au conteneur « Selection ».

Une ligne de mise à jour rapide dans l'écran « Commandes » de l'application mobile pour mettre à jour le FS400100, ainsi qu'une mise à jour rapide du menu pour forcer l'application à effectuer la mise à jour.
Et c'est ainsi que l'application mobile intègre désormais notre filtre :
J'espère que ce billet vous a été utile. Bon codage !