mardi 20 juin 2017

#Tip23 Dynamics 365 : Verrouiller des champs dans une sous-grille éditable

Dans Dynamics 365 CE, la modification des données d’une entité dite Enfant est disponible. Cette fonctionnalité permet d’éditer des valeurs directement dans les sous-grilles d’un formulaire ou bien depuis la vue principale de l’entité (navigation principale).

Sur un récent projet Dynamics 365 CE, ils nous a été demandé de verrouiller certaines colonnes disponibles à la modification. La volonté était de rendre modifiable une partie des champs de la vue mais en verrouiller certains.
Pour verrouiller une partie des champs d’une sous-grille modifiable, il est possible de créer une règle métier contenant des règles de verrouillage.
Mais pour verrouiller un champ sans condition spécifique, la règle métier doit être au niveau Entité, il est impossible de mettre la règle métier au niveau d’une vue ou d’une sous-grille directement...
En activant cette règle, les champs concernés sont bien verrouillés dans la sous-grille mais sur l’ensemble des formulaires également… 

image

Pour contourner ce “problème”, il est possible de mettre une fonction Javascript qui verrouille les champs à la sélection d’une ligne de la sous-grille.

Pour démontrer le fonctionnement de cette fonction, je vais activer à la modification la sous-grille “opportunité récente” sur l’entité Contact. L’objectif est de bloquer le champ Sujet de la vue "Opportunité récente".

Après avoir activé la grille comme grille modifiable, le champ sujet est disponible à la modification :

image

Pour verrouiller le champ, il faut déclarer une fonction Javascipt sur l’évènement OnRecordSelect, cet évènement est disponible dans le paramétrage de la sous-grille dans le formulaire Contact.

Note : J’ai préalablement créé une webressource Javascript contenant le fonction suivante :

function onrowselect(executionContext){
    var entityObject = executionContext.getFormContext().data.entity;
    var subject = entityObject.attributes.getByName("name");
     subject.controls.get(0).setDisabled(true);
  }


Pour ajouter un appel à cette fonction, ouvrir le formulaire Contact puis double cliquer dans la sous-grille éditable. Se rendre dans l’onglet Évènements.

image


Ajouter la librairie Javascript contenant la fonction ci-dessus.

image

Sur l’évènement OnRecordSelect, déclarer la fonction onrowselect. Sélectionner OnRecordSelect puis Ajouter.

image

Dans la fenêtre qui s’ouvre, ajouter le nom de la fonction et cocher la case Transmettre le contexte d’exécution comme premier paramètre.

image

Cliquer sur OK, sauvegarder et publier votre formulaire.
Après avoir effectué un rafraîchissement de votre page web (Vider le cache peut être nécessaire), ouvrir le formulaire contact et cliquer sur une ligne de la sous-grille Opportunité récente.

image

Le champ est maintenant verrouillé !

Beaucoup d’autres options concernant les sous-grilles sont disponibles, vous pouvez consulter ci-dessous  :
  • Supporter tous les types de champs sauf:
    • Statut
    • Type client
    • Composite
    • groupe d'activité
    • Recherche
  • Respecte la lecture seule pour les metadata
  • Supporte les évènements Jvascript ci-dessous:
    • OnRecordSelect
    • OnSave
    • OnChange
  • Supporte les niveaux de règles métier ci-dessous:
    • Montrer une message d'erreur
    • Mettre une valeur par défaut
    • Rendre obligatoire ou non
    • Affecter une valeur
    • Verrouiller ou non un champ