Rechercher dans ce blog

02 juin 2014

Certaines choses à ne pas faire en C/AL !

Voici une "petite" liste des oublis ou erreurs fréquentes pour les développeurs Dynamics NAV  :
  • Agrandir la longueur d'un champ Code/Text :
    • La plupart des champs sont répliqués à des fins d'optimisation et de souplesse d'utilisation sur plusieurs tables, il est donc TRES dangereux d'étendre un champ sans une analyse d'impact approfondie...(mais cela, vous le saviez déjà, non ?!)
    • Exemple avec l'extension du nom du client, qui causera une anomalie bloquante dès qu'un client avec un nom trop long sera saisi sur un document de vente... (succès assuré)
  • Faire un Record.INSERT/MODIFY/RENAME/DELETE sans déclencher le trigger correspondant (OnInsert, OnModify, OnRename, OnDelete)
    • Solution : appeler la méthode avec True en paramètre pour déclencher le trigger
    • Exemple : Customer.MODIFY(True)
  • Dans le même registre, faire une affectation d'un champ sans déclencher le trigger OnValidate() 
    • Solution : utiliser le VALIDATE à la place d'une affectation simple
    • Exemple : VALIDATE("Document Date","Posting Date");
  • Oublier de gérer les suppressions en cascade : typiquement Nav gère l'intégrité référentielle en modification mais pas en suppression : cette dernière doit faire l'objet d'une programmation du trigger OnDelete()
  • Oublier de paramétrer la propriété DrillDownPageID/DrillDownFormID permettant le DrillDown à partir des flowfields (de type Count/Sum, etc...)
  • Oublier de mettre la propriété Local=Yes sur les fonctions : une fonction déclarée comme locale est interne à l'objet et ne peut pas être invoquée depuis un autre objet. Cela vous permet de pouvoir modifier l'implémentation de ces fonctions sans aucun impact sur le reste de l'application (plus on isole, mieux c'est...). 
  • Dans la version SQL, oublier de définir les propriétés SumIndexFields sur les index pour les Flowfields correspondants : dans ce cas, le calcul d'un Flowfield peut être très consommateur de ressources car il est tout de même calculé mais sans être optimisé.
  • Pour les champs de type quantité, pourcentage : oublier les propriétés DecimalPlaces, Min/MaxValue, ...
  • Pour les champs de type coût/prix/montants : oublier les propriétés   AutoFormatType et AutoFormatExpr
  • Oublier la propriété NotBlank sur les champs appartenant à la clé primaire.
Enfin, last but not least, l'erreur courante est d'oublier de faire tes tests dans le contexte du client et de l'utilisateur final : les tests doivent être réalisés avec la licence du client ET avec dans le contexte de sécurité de l'utilisateur (avec ses rôles de sécurité, et non pas avec le rôle "SUPER").