Tuesday, May 15, 2012

Comment changer le contenu de la vue associée par défaut d'une entité

Bonjour,


Une des problématiques qui rencontrent un développeur CRM est la suivante :


Comment changer le contenu de la vue associée par défaut (Default Associated View) d'une entité


Au niveau du serveur CRM de mon client, j'ai plusieurs entités dont l'entité Compte et l'entité Devis. Chaque enregistrement compte pourra avoir 0 ou plusieurs enregistrements devis associés en différents statuts Brouillon, Actif, Conclu, Fermé...
Or, lors de l'ouverture du formulaire d'un enregistrement compte, si on clique au niveau du Navigation bar sur le bouton Devis on tombe toujours sur une subgrid qui affiche les devis en statut Brouillon. Alors que mon client veut que si on clique sur Devis on devrait trouver par défaut tous les devis pas que ceux dont le statut est Brouillon.







Pour le faire, il faut suivre les étapes suivantes :


étape 1 :


Pour réaliser cette tâche, Il y'a deux façon de le faire : 
- Soit de copier/coller et de faire tout en mode machine vite fait et basta.
- Soit de comprendre la solution derrière. 
Pour ceux qui optent pour la 1ère façon, qu'ils passent directement vers l'étape suivante.
Pour le reste, suivez moi.
Pour pouvoir afficher la Vue associée Devis, il suffit d'appuyer sur le bouton Devis, d'attendre à ce que le subgrid se recharge et voila, la liste des Devis en statut Brouillon est chargée. 
Maintenant, Il est obligatoire d'identifier certain objets au niveau du formulaire. Ces objets, je pense déjà que vous avez eu une idée, les voilà : 
  1. Le bouton Devis.
  2. Le conteneur dans le quel se charge le subgrid de vue associée.
  3. Le subgrid  
  4. Le  comboBox qui contient les stauts

pour les identifier. appuyer sur F12. Si rien ne se passe, c'est qu'il vous manque le Microsoft Dynamics CRM Developer Tool. Chercher le sur internet et installer le.


Sinon, c'est ce que vous aurez :




Appuyer, sur le bouton qui représente une flèche
En survolant chaque objet sur le formulaire, un contour bleu se dessine sur cet objet. Survoler le bouton Devis et cliquer dessus.
La fenêtre en bas à gauche va changer de contenu et va souligner en bleu le code HTML représentant le bouton Devis. Bouger la scrollbar jusqu'à un peu plus que le milieu. et là ça se trouve l'attribut id de l'objet.
Donc si on refait la même chose pour les 4 objets précédemment cités. On trouve ceci.
  1. id du bouton Devis. = navQuotes
  2. id de l'iFrame dans le quel se charge le subgrid de vue associée.  = areaQuotesFrame
  3. id du subgrid = AppGridFilterContainer
  4. id du  comboBox qui contient les stauts = crmGrid_quote_customer_accounts_statecode
Donc le process va être le suivant en cliquant sur le bouton navQuotes, on va attendre que le iFrame areaQuotesFrame se charge complètement, puis on va dire au comboBox crmGrid_quote_customer_accounts_statecode de changer de DefaultView et de rafraichir le subgrid AppGridFilterContainer.


Une autre question qui se pose est la suivante : 
Qu'est ce que je vais mettre au niveau dur valeur de Combobox ? 
La réponse est simple :
- Si j'ai envie d'afficher toutes les devis avec n'importe quel statut alors je mis comme valeur = "All" qui veut dire bien sur Tout.
- Sinon, si par exemple mon client change d'avis et qu'il veut afficher par exemple que les devis actifs, ou les devis conclus ... alors il faut tout simplement mettre la valeur correspondant à ce statut au niveau de l'attribut statuscode de l'entité devis (quote). 
c'est à dire:

Statut Valeur
Brouillon 1
Actif 2
Conclu 4
Fermé 6
Tout All


étape 2 :


Au niveau de la solution par défaut au niveau du serveur CRM, Sélectionner Ressources Web.
Appuyer sur Nouveau.




Renseigner les  champs Nom, Nom complet et Type comme dans l'image ci-dessus.
Puis, appuyer sur le bouton Éditeur de texte
Coller le script ci-après dans la fenêtre qui va s'ouvrir.


if (typeof (NJL) == "undefined")
{ NJL = { __namespace: true }; }
NJL.Account = {
 SetDefaultView: function(viewCombo, viewName, appGrid) {
  if (viewCombo.value != viewName) {
   viewCombo.value = viewName;
   appGrid.RefreshGridView();
  }
 },
 areaQuotesFrame_OnReadyStateChange: function() {
  if (this.readyState == "complete") {
   var frame = document.frames("areaQuotesFrame");
   var viewCombo = frame.document.getElementById("crmGrid_quote_customer_accounts_statecode");
   var appGrid = frame.document.getElementById("AppGridFilterContainer");

   if (viewCombo.readyState == "complete") {
    NJL.Account.SetDefaultView(viewCombo, "All", appGrid);
   }
   else {
    viewCombo.onreadystatechange = function() {
     if (this.readyState == "complete") {
      NJL.Account.SetDefaultView(this, "All", appGrid);
     }
    }
   }
  }
 },
 formOnLoad: function(){
  if (document.getElementById('navQuotes') != null) {
   document.getElementById('navQuotes').onclick = function() {
    loadArea('areaQuotes');
    document.frames('areaQuotesFrame').document.onreadystatechange = NJL.Account.areaQuotesFrame_OnReadyStateChange;
   }
  }
 }
}



Enregistrer la ressource web.

étape 3 :

Au niveau du  Formulaire Compte, Onglet Personnaliser, Appuyer sur Personnaliser l'entité.  
Puis au niveau des propriétés du Formulaire, Ajouter la ressource web, et au niveau de l'évenement OnLoad ajouter la fonction NJL.Account.formOnLoad.

étape 4 :


Publier et admirer le résultat.


N.JL

No comments:

Post a Comment