Évaluer le problème et la solution
L'application Acumatica Mobile utilise l'écran FS400100 pour générer l'élément de menu Liste de rendez-vous. Lorsque les techniciens de terrain affichent cet écran, ils disposent de deux options de filtrage : plage de dates et membre du personnel. Il manque aux filtres un statut permettant de supprimer les rendez-vous en attente, terminés, clôturés ou annulés. L'objectif : éliminer le désordre pour que les techniciens de terrain puissent se concentrer sur les rendez-vous dont ils ont besoin.
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 option consiste à modifier simplement l'écran Liste des rendez-vous et à ajouter un statut. Quelle est l'approche à adopter pour ce faire ?
Évaluation du code existant
La première chose à faire est de naviguer vers l'écran Account Summary FS400100 dans Acumatica. En utilisant le très pratique Inspect Element, CTRL+ALT+CLICK, nous pouvons identifier le Business Logic Code (BLC) AppointmentInq et les deux DACs AppointmentInqFilter et FSAppointmentFSServiceOrder.
Remarquez que le filtre d'en-tête, DAC AppointmentInqFilter, ne contient pas le champ Status dans la section d'en-tête du filtre de l'écran d'interrogation(FS400100). Nous devons donc l'ajouter.
Ensuite, nous devons examiner la requête qui filtrera les enregistrements. Il s'agit de la vue Rendez-vous déclarée sur la BLC qui utilise le CED FSAppointmentFSServiceOrder avec quelques jointures vers d'autres tables.
Remarquez ce qui suit :
- Il est décoré de PXFilterable
- Utilise le standard traditionnel BQL et n'est pas encore mis à jour vers BQL Fluent
- N'utilise pas la nouvelle version de IEnumberable
Solutions de conception
Première option
Ajouter le champ à une extension DAC et remplacer la sélection de l'affichage des rendez-vous à partir de l'extension graphique et ajouter 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 à la vue de filtre existante :
.And<Current<AppointmentInqFilter.usrStatus>.IsNull
,Or<Current<AppointmentInqFilterExt.usrStatus>.IsEqual<FSAppointmentFSServiceOrder.status>>
Deuxième option
Ajouter le champ à une extension DAC et remplacer la vue par une vue déléguée & Ajouter le champ de filtrage à l'application mobile
Pour - Acumatica fournit un exemple dans le cours de formation T300, où vous le trouverez à la section 11.7.
Voici le code :
GIST : https://gist.github.com/anaxetogrind/dc53fe2e62bfde79b9a36e0d26192818
Tests et problèmes
Au départ, j'avais inversé ma déclaration courante dans la déclaration Where And. En d'autres termes, je l'ai placée dans la partie FSAppointmentFSServiceOrder de la clause Where. Cela a créé une situation étrange où le code a été compilé sans erreur, mais lors de l'exécution du processus, Acumatica a lancé une erreur de syntaxe invalide près de ) ;. Cela m'a semblé être une erreur SQL, et j'ai donc pu retracer le problème en regardant le code SQL généré via le Request Profiler. De là, j'ai pu voir dans le paramètre P25 que mon UsrStatus était renseigné mais que mon Status du rendez-vous était vide. Le code SQL se lisait donc comme suit : et (@P25 = ). La valeur manquante était à l'origine de l'erreur et pouvait être résolue en corrigeant la clause Where dans la méthode.
Par ailleurs, au cours des tests, j'ai remarqué que j'avais oublié d'attribuer la valeur " true " au champ " UsrStatus" dans la case " Commit Changes". De ce fait, les enregistrements n'étaient pas actualisés à moins qu'un autre champ de filtre ne soit également mis à jour.
Mise à jour de l'application mobile
Enfin, nous devons ajouter le champ de filtre à l'application mobile. La liste des rendez-vous se trouve dans l'écran de résumé des rendez-vous FS400100. En regardant le WSDL/MSDL, nous voyons que notre champ UsrStatus est ajouté au conteneur Selection.
Une ligne de mise à jour rapide sur l'écran des commandes de l'application mobile pour mettre à jour FS400100 et une mise à jour rapide du menu pour forcer la mise à jour de l'application.
GIST: https://gist.github.com/anaxetogrind/9862b713ed15116d5cb5194a9e4ea988
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 !