Accueil Blog (en) Trucs et astuces pour les développeurs (Partie III): Utilisation de l’attribut PXFormula pour simplifier votre code

Trucs et astuces pour les développeurs (Partie III): Utilisation de l’attribut PXFormula pour simplifier votre code

Mark Franks | 21 août 2022

L’une des sessions les mieux notées offertes dans notre DevCon virtuel a été les conseils et astuces avancés sur le cadre de Sergey Marenich. Il a fait un travail magistral en débusquant un certain nombre d’activités très utiles qu’un développeur sur notre plate-forme peut faire pour être plus efficace et productif ainsi que de bonnes pratiques de codage. Étant donné que différentes personnes 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 ainsi.  Je vais distribuer le contenu en morceaux de la taille d’une bouchée au cours des prochains articles de blog.

Utilisation de 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 de sites Web. Aujourd’hui, je vais passer du temps à explorer les meilleures pratiques de programmation de Sergey Conseils: Automatiser les calculs en utilisant l’attribut PXFormula pour simplifier votre code - Astuce # 6.

À titre d’examen, voici les conseils dont nous discutons dans cette série. Et pour rappel, je saute Trouver plus d’informations à travers les communautés (Astuce 3) depuis que j’ai couvert ce sujet dans un article précédent. En outre, j’ai couvert astuce 5, Débogage du code Acumatica dans un post précédent.

Astuce 1 - Configuration de votre instance Acumatica

Astuce 2 - Configuration de vos outils

Astuce 3 - Trouver plus d’informations dans les communautés

Astuce 4 - Désactivation de la compilation de sites Web

Astuce 5 - Débogage du code Acumatica

Astuce 6 - Auto-Calc avec des formules

Astuce 7 – Minimiser la duplication

Astuce 8 - Avantages de l’utilisation des événements

Astuce 9 - Réutilisation des requêtes BQL

Astuce 10 - Modification des sélecteurs

Astuce 11 - Champs de différentes vues

Le premier ensemble de conseils de programmation dont vous pouvez profiter lorsque vous codez est de tirer parti des formules pour simplement votre code. Avec l’utilisation de l’attribut PXFormula, vous pouvez utiliser un champ du même enregistrement de données ou des mêmes jeux dans une expression d’agrégation pour calculer un champ d’enregistrement de données parent à partir de champs d’enregistrement de données enfants. Ces calculs ont lieu au moment de l’exécution. Le Cadre 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 ainsi les lignes de code que vous devez écrire.  En termes simples: moins de code, moins d’erreurs.

L’attribut Valider la formule

Un exemple facile à illustrer est l’attribut Validate formula qui déclenche l’événement FieldVerifying pour le champ auquel l’attribut PXFormula est attaché une fois que le champ spécifié change.

Exemple de code :


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

L’attribut Valider la formule déclenche automatiquement la validation de champ lorsque le champ actuel lorsque le champ actuel est modifié à l’endroit où la formule est attachée.

Un autre exemple :


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

Pour plus de références et d’exemples, consultez la section Référence de l’API du Guide du développeur D’Acumatica Framework .

Le constructeur parent et le paramètre actuel

N’oubliez pas que vous pouvez placer un attribut sur n’importe quel champ du DAC enfant. L’objectif principal de l’attribut est d’effectuer une suppression en cascade des enregistrements enfants une fois qu’un enregistrement de données parent est supprimé. En règle général, la requête inclut une clause Where pour que les champs clés du parent sont égaux aux champs de clé de l’enfant. Dans ce cas, les valeurs des champs de clé d’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 parentes spécifiques ou des enregistrements de données enfants, ou obtenir et définir certains paramètres d’attribut. Une fois l’attribut PXParent ajouté à un champ DAC, vous pouvez utiliser l’attribut PXFormula pour définir les calculs d’ensemble pour les champs d’enregistrement de données parent à partir de champs d’enregistrement de données enfants.

L’attribut PXParent extrait la valeur de champ de l’enregistrement de données parent tel que défini par PXParentAttribute résidant dans la DAC actuelle. 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 pour 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 donne accès à la classe d’accès aux données (DAC) qui n’est pas votre DAC actuelle.  L’utilisation du paramètre actuel avec l’attribut de formule vous permet de trouver le cache et d’utiliser le type de document ou le numéro de référence.

Le code ci-dessous illustre bien cela:


//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, consultez la section Référence de l’API du Guide du développeur D’Acumatica Framework .

Paramètre IsTableEmpty

Pour déterminer si une table est vide, vous pouvez utiliser le paramètre IsTableEmpty avec PXFormula retourne true si la table DB correspondant à la DAC spécifiée 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) { }

Paramètre de sélecteur

Lorsque vous utilisez le paramètre de sélection avec l’attribut formula, vous pouvez sélectionner l’enregistrement associé. Dans le DAC APVendorPrice, sélectionnez InventoryID via le sélecteur et via le champ InventoryItem any. Au lieu d’utiliser FieldUpdating ou RowUpdating et d’écrire le code pour obtenir les données associé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, à l’aide d’attributs et de paramètres de formule, illustrent les façons dont vous pouvez rationaliser et simplifier votre code.  La prochaine fois, je continuerai à explorer le thème des meilleures pratiques de programmation de Sergey et discuterai des moyens de minimiser la duplication de votre code à l’aide de notre cadre.

Auteur du blog

Mark était l’ancien directeur principal des relations avec les développeurs chez Acumatica.

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