Gotchas in Dynamics 365/CRM

les Règles d’entreprise dans Dynamics 365 – Les « Gotchas »

Les Règles d’Entreprise (ou Business Rules) sont une des fonctionnalités parmi l’ensemble des outils de personnalisation disponible dans Microsoft Dynamics 365.

Cela permet une rajouter une grande flexibilité dans les formulaires, là où habituellement on doit faire appel à un développeur JavaScript.

Mais comme pour tout, il y a des écueils à connaître et à éviter. Afin d’éviter les « je me suis fait eu » ou les « ahhh ça marche comme ça ?!! « 

Je vous vous présenter les 7 à connaître

Les 7 pièges à connaître dans l’utilisation des règles d’entreprise (Business Rule) dans Microsoft Dynamics 365


Les champs doivent être présent dans le formulaire

Si vous avez un problème avec une règle qui ne semble pas s’appliquer, vérifier avant tout que le champ est présent et publié sur le formulaire.

Bien sûr (trop facile sinon), aucun message d’erreur de Microsoft ou de Power Apps viendra vous aiguiller sur le coup. Alors gardez bien ça en tête.

Attention, présent ne veut pas forcement dire visible 😉

Conseil: cachez vos champs utiles aux processus mais inutiles à l’utilisateur final dans un onglet à part que vous cacherez (les intermédiaires de calculs…)


Vérifier l’étendue de votre règle

Dans la même lignée, si votre règle ne s’applique pas, vérifiez l’étendue (le scope) de votre règle

L’étendue définie les situations dans lesquelles la règle s’applique, et il en existe 3 :

  • Un formulaire nommé

Une entité peut avoir plusieurs formulaires, et des utilisateurs peuvent accéder chacun à celui spécifique à son rôle. Si vous choisissez un formulaire nommé dans l’étendue, alors la règle ne s’appliquera que lorsque l’utilisateur utilisera cette règle. La règle ne s’appliquera pas aux autres formulaires

Mon expérience : C’est ce qu’il m’arrive d’utiliser quelque fois pour des situations N/N+1 où je dois gérer des modifications de données et de processus sans impacter le business existant.

Attention, il est possible de faire cela seulement sur les formulaires de type Principal. Microsoft ne liste pas les formulaires de type Aperçu ou Création Rapide

Attention, il n’est possible de sélectionner qu’une seule étendue. C’est à dire que si vous voulez que votre règle ne s’applique que sur 2 formulaires parmi les 3 que vous possédez, alors il vous faudra la dupliquer.

  • Tous les formulaires

Le choix Tous les formulaires est évident, je n’en parlerai pas plus.

  • Entité

Dans le cas de l’entité, la règle est appliquée à la fois sur les formulaires, mais aussi à chaque fois cette entité est créée ou mise à jour, via le Power Automate, les APIs ou par les Portails.


Interférences JavaScript

Attention, avant de vous lancer dans le rajout d’une règle, vérifiez s’il existe déjà du code JavaScript qui tourne et qui met à jour des champs.

Le JavaScript existant peut perturber le fonctionnement de votre règle (surtout si vous n’êtes pas au courant qu’elle existe…)

Dans ce cas-ci, il serait sans doute plus judicieux de continuer sur la lancée du JavaScript. L’avantage étant de garder la logique du comportement du formulaire à un seul endroit (JavaScript ou Règle d’entreprise)


Interactions avec les sections ou les onglets

Vous ne pouvez pas interagir avec les ongles ou les sections. En tout cas pas avec les règles d’entreprise.

Pour faire cela, il vous faut repasser sur du JavaScript.

En cadeau, le bout du script développé pour un client, où j’affiche l’onglet des informations légales et financières (venant de la base SIRENE) seulement si le numéro SIRET de l’entreprise est entrée

Il a été utilisé en parallèle du service de récupération des informations légales et financières des entreprises.

function Account_validateSIRET(executionContext) {

    'use-strict';
    var formContext = executionContext.getFormContext();

    // Check if the SIRET is valid before displaying tab
    if (formContext.getAttribute("ick_siret").getValue() != null)
    {
        var siret = formContext.getAttribute("ick_siret").getValue();
        siret = siret.split(" ").join("");

        if (siret.length == 14) {
            formContext.getAttribute("ick_siret").setValue(siret);
            formContext.ui.clearFormNotification("siret_incorrectlength");
            formContext.ui.tabs.get("ICK_INFORMATIONSLEGALES").setVisible(true);
        }
        else {
            formContext.ui.tabs.get("ICK_INFORMATIONSLEGALES").setVisible(false);
            formContext.ui.setFormNotification("La longueur du SIRET doit être de 14 chiffres", "WARNING", "siret_incorrectlength");
        }
    }
}


Les événements OnChange ne sont pas déclenchés

Je m’explique.

Imaginons que vous vouliez déclencher un évènement lorsque la valeur d’un champ change (c’est le fameux événement OnChange). Vous avez donc un script JavaScript qui est enregistré sur cet événement.
Si vous utilisez une règle d’entreprise pour mettre à jour ce fameux champ, votre JavaScript ne se déclenchera pas !

Pourquoi ? C’est un choix de Microsoft pour éviter les boucles infinies.

Donc pour être plus clair, si vous rajouter une business rule sur un champ, vous ne pourrez plus utiliser l’événement OnChange pour ce champ dans un script JavaScript


Limitations à 10 conditions if-else

Tout est dans le titre. Si vous pensiez pouvoir faire l’équivalent d’un Switch-Case, passez votre chemin


Les conditions imbriquées ne sont pas supportées

Pour bien préciser, il n’est pas possible de rajouter une condition dans la sortie IF de la précédente condition

Comme c’est compliqué à expliquer, voici le dessin

Comme vous le voyez, il est possible de rajouter la condition seulement dans le ELSE


Conclusion

Bon j’espère qu’avec ça vous êtes mieux armés pour faire de super business rules 🙂

N’hésitez pas à me partager les pièges dans lesquels vous êtes tombés !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *