Accueil Blog Trucs et astuces pour les développeurs (Partie III) : Utiliser l'attribut PXFormula pour simplifier votre code

Trucs et astuces pour les développeurs (Partie III) : Utiliser l'attribut PXFormula pour simplifier votre code

Mark Franks | Août 21, 2022

L'une des sessions les plus appréciées de notre DevCon virtuelle a été celle de Sergey Marenich sur les conseils et astuces de l'Advanced Framework. Il a fait un travail magistral en présentant un certain nombre d'activités très utiles qu'un développeur sur notre plateforme peut faire pour être plus efficace et productif, ainsi que quelques bonnes pratiques de codage. Comme les individus apprennent et bénéficient d'une variété de modalités, nous avons pensé qu'il serait bon de partager la sagesse de Sergey sous forme écrite également. Je distribuerai le contenu en petits morceaux au cours des prochains articles de blog.

Utiliser l'attribut PXFormula pour simplifier votre code

La semaine dernière, je me suis concentré sur la configuration de vos outils et la désactivation de la compilation des sites Web. Aujourd'hui, je vais passer du temps à explorer les conseils de Sergey sur les meilleures pratiques de programmation : Automatiser les calculs en utilisant l'attribut PXFormula pour simplifier votre code - Astuce # 6.

En guise de rappel, voici les conseils dont nous discutons dans cette série. Pour rappel, je passe sur l'astuce 3, Trouver plus d'informations grâce aux communautés, car j'ai déjà abordé ce sujet dans un article précédent. J'ai également abordé l'astuce 5, Déboguer le code Acumatica, dans un article précédent.

Astuce 1 - Configurer votre instance Acumatica

Conseil 2 - Configurer vos outils

Conseil 3 - Trouver plus d'informations auprès des communautés

Conseil 4 - Désactiver la compilation des sites web

Conseil 5 - Déboguer le code Acumatica

Conseil 6 - Calcul automatique avec des formules

Conseil 7 - Minimiser les doublons

Conseil 8 - Avantages de l'utilisation des événements

Conseil 9 - Réutilisation des requêtes BQL

Conseil 10 - Modifier les sélecteurs

Conseil 11 - Champs de différentes vues

La première série d'astuces de programmation à mettre à profit lorsque vous codez est l'utilisation de formules pour simplifier votre code. Grâce à l'attribut PXFormula, vous pouvez utiliser un champ du même enregistrement de données ou des ensembles dans une expression d'agrégation pour calculer un champ de l'enregistrement de données parent à partir des champs de l'enregistrement de données enfant. Ces calculs sont effectués au moment de l'exécution. Le Framework utilise largement les attributs et nous abordons donc la programmation d'une manière très déclarative. En plaçant les attributs aux bons endroits, ils simplifient vos tâches de programmation, réduisant les lignes de code que vous devez écrire. En clair : moins de code, moins d'erreurs.

Attribut de validation de la formule

Un exemple facile à illustrer est celui de l'attribut Validate formula qui déclenche l'événement FieldVerifying pour le champ auquel l'attribut PXFormula est attaché dès que le champ spécifié est modifié.

Exemple de code :


//Validate
[PXFormula(typeof(Validate))]
public virtual void Batch_Date_CacheAttached(PXCache sender) { }

L'attribut Valider la formule augmente automatiquement la validation du champ lorsque le champ courant est modifié et que la formule est attachée.

Autre exemple :


//Validate
[PXFormula(typeof(Validate<ContractItem.maxQty, ContractItem.minQty>))]

Pour plus de références et d'exemples, voir la Référence API de l'Acumatica Framework Developer Guide .

Le constructeur parent et le paramètre courant

Rappelez-vous que vous pouvez placer un attribut sur n'importe quel champ du CED enfant. L'objectif principal de l'attribut est d'effectuer une suppression en cascade des enregistrements enfants lorsqu'un enregistrement de données parent est supprimé. En général, la requête comprend une clause Where (où) pour que les champs clés du parent soient égaux aux champs clés de l'enfant. Dans ce cas, les valeurs des champs clés de l'enregistrement de données enfant sont spécifiées à l'aide du paramètre Current.

Utilisation de méthodes statiques pour récupérer des données parent ou des enregistrements de données enfant spécifiques, ou pour obtenir et définir certains paramètres d'attributs. Une fois que l'attribut PXParent est ajouté à un champ du CED, vous pouvez utiliser l'attribut PXFormula pour définir des calculs d'ensemble pour les champs de l'enregistrement de données parent à partir des champs de l'enregistrement de données enfant.

L'attribut PXParent récupère la valeur du champ de l'enregistrement de données parent tel que défini par l'attribut PXParentAttribute résidant dans le CED actuel. Il initialise une nouvelle instance qui définit l'enregistrement de données parent à l'aide de la requête BQL fournie.

Par exemple :


//Parent
PXParent(typeof(Select<INRegister,
   Where<INRegister.docType, Equal<Current>
   And<INRegister.refNbr, Equal<Current>>>>))]

[PXFormula(typeof(Parent))]
public virtual void INTran_OrigModule_CacheAttached(PXCache sender) { }

Pour le paramètre Current, l'exemple ci-dessous spécifie une requête permettant de sélectionner l'enregistrement de données Document parent pour un enregistrement de données DocTransaction enfant donné.


//Current
[PXParent(typeof(Select<Document,
   Where<Document.docNbr, Equal<Current>,
   And<Document.docType, Equal<Current>>>>))]
public virtual string DocNbr {get; set;}

Cela vous permet d'accéder à la classe d'accès aux données (DAC) qui n'est pas votre DAC actuelle. L'utilisation du paramètre Current avec l'attributFormulaAttribute vous permet de trouver le cache en utilisant le type de document ou le numéro de référence.

Le code ci-dessous l'illustre bien :


//Current
PXFormula(typeof(Switch>,
   And<ARAdjust.adjgRefNbr, Equal<Current>>>,
ERActivity.classIcon>,
EPActivity.classIcon>))]
protected virtual void ARAdjust_ClassIcon_CacheAttached(PXCache sender) { }

Au lieu d'utiliser l'événement FieldUpdated ou un autre événement, vous pouvez utiliser l'attribut formula dans ce cas.

Pour plus d'informations, voir la section API Reference du Acumatica Framework Developer Guide. .

Paramètre IsTableEmpty

Pour déterminer si une table est vide, vous pouvez utiliser le paramètre IsTableEmpty avec PXFormula qui renvoie la valeur true si la table DB correspondant au DAC spécifié ne contient aucun enregistrement.


//IsTableEmpty
PXFormula(typeof (Swich, Equal>, True,
   Case<Where<APRegister.requestApproval, Equal>, False>>, True>
))]
public virtual void APRegister_ContApprove_CacheAttached(PXCache sender) { }

Le paramètre de sélection

Lorsque vous utilisez le paramètre de sélection avec l'attribut de formule, vous pouvez sélectionner l'enregistrement associé. Dans le CAD APVendorPrice, sélectionnez l'InventoryID à l'aide du sélecteur et du champ InventoryItem any. Au lieu d'utiliser FieldUpdating ou RowUpdating et d'écrire le code pour obtenir les données liées dans la classe d'accès aux données, vous pouvez utiliser des formules.

Voici le code simple illustrant ce point :


//Selector
PXFormula(typeof(Selector<APVendorPrice.inventoryID, InventoryItem.purchaseUnit>))]
public virtual void APVendorPrice_UOM_CacheAttached(PXCache sender) { }
}
}

Ces exemples, qui utilisent des attributs et des paramètres de formule, illustrent la manière dont vous pouvez rationaliser et simplifier votre code. La prochaine fois, je poursuivrai l'exploration du thème des meilleures pratiques de programmation de Sergey et j'aborderai les moyens de minimiser la duplication dans votre code à l'aide de notre cadre.

Auteur du blog

Mark était auparavant responsable des relations avec les développeurs chez Acumatica.

Recevez les mises à jour du blog dans votre boîte de réception.