Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Gérer ses documents clients avec Microsoft Dynamics CRM 4.0

Cet article propose une solution simple pour gérer ses documents clients avec Microsoft Dynamics CRM 4.0 sur la base d'une bibliothèque de documents réseau.
Le résultat est un onglet dédié du formulaire correspondant (Contact ou Compte ou toute autre entité) qui affiche directement le contenu du dossier réseau dans un volet Windows Explorer intégré à CRM :

image

Structure de la base documentaire

Pour établir la bibliothèque de documents clients, le principe consiste à travailler sur la base d'un répertoire partagé sur le réseau d'entreprise. Pour être à même d'attacher les documents au compte ou directement au contact dans CRM, la structure de la base documentaire peut s'appuyer tout simplement sur une organisation comme suit :

  • dossier racine [partagé] avec un nom de votre choix
    • un dossier par compte client reprenant le nom du compte lui-même
      • un sous-dossier par contact client reprenant le nom du contact complet (par exemple : <prénom nom>)

Exmple de structure pour la base documentaire  

Intégration de Windows Explorer à CRM

J'ai lu un article très intéressant sur le blog de l'équipe de Corp qui présentait une intégration de Windows Explorer basée sur l'utilisation d'un web part standard fourni par WSS (Windows SharePoint Services) nommé Page Viewer WebPart.

Mais en creusant un peu, il s'avère que ce webpart n'a finalement pour rendu qu'une simple iFrame standard HTML!! Ce qui m'amène à une méthode bien plus simple qui ne nécessite aucunement l'installation de WSS (d'ailleurs pas franchement super intuitive et évidente sur votre serveur en prod) et vise à mettre en oeuvre un champ de type IFRAME dans les formulaires des entités Compte et Contact. En effet, une iFrame peut référencer une url pour afficher le contenu d'une page web, mais également un chemin réseau !

 

Exemple de mise en oeuvre pour l'entité COMPTE

Prenons l'exemple de l'entité Compte : Le principe consiste donc à :

  • créer un nouvel onglet dans le formulaire, que l'on nommerait par exemple "Documents".
  • créer une section sans titre en acceptant les paramètres par défaut.

image

  • ajouter un champ de type IFRAME dans la section. Attribuez lui un nom.
  • configurer l'IFRAME pour qu'elle occupe tout l'espace disponible sur le formulaire.
  • désactiver la sécurité de script inter-frame.
  • attribuer au formulaire une url vide par défaut : "about:blank". Le chemin du dossier associé au compte doit être déterminé par script dynamiquement au moment de l'exécution.

image image

Au final, le formulaire ressemble à ceci :

image

Code de chargement dynamique du chemin en fonction du contexte

  • Ajouter au code du formulaire de l'entité Compte en réponse à l'évènement Form_OnLoad le code suivant :

//----------------------------------------------------------------------------------
//Déclarations de constante pour le type de formulaire
var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;
var CRM_FORM_TYPE_READONLY = 3;
var CRM_FORM_TYPE_DISABLED = 4;
var CRM_FORM_TYPE_QUICKCREATE = 5;
var CRM_FORM_TYPE_BULKEDIT = 6;

//Affichage de la bibliothèque de documents du compte
displayDocumentLibrary();

// Affichage de la base documentaire pour le compte en cours
function displayDocumentLibrary()
{
    //Cas du mode formulaire en création rapide
    if(crmForm.FormType == CRM_FORM_TYPE_QUICKCREATE){
              return;
    }
    //Dans tous les autres modes du formulaire
    //Initialisation de l'iFrame à vide
    crmForm.all.IFRAME_Documents.src = "about:blank";
    //Le nom du compte donne le nom du dossier dans la base documentaire
    //contenant les documents relatifs au compte
    var folderName = crmForm.all.name.DataValue ;
   //Selon le type d'affichage
    switch (crmForm.FormType)
    {
           case CRM_FORM_TYPE_CREATE:
           case CRM_FORM_TYPE_BULKEDIT:
    //iFrame par défaut à vide
    break;
           case CRM_FORM_TYPE_UPDATE:
           case CRM_FORM_TYPE_READONLY:
           case CRM_FORM_TYPE_DISABLED:
                      if(folderName != null)
                     {
         //Chargement dans l'iFrame du chemin vers le dossier du compte dans la base documentaire
                          crmForm.all.IFRAME_Documents.src = "\\\\<NomDuServeur>\\<NomDuPartage>\\" + folderName;
                      }
                      break;
     }

}
//----------------------------------------------------------------------------------

  • Sauvegarder les changements puis publier l'entité Compte.
  • Vous obtenez le résultat suivant (à condition que le dossier correspondant existe dans la base documentaire) :

image

Dans cette fenêtre, vous avez le menu de Windows Explorer qui s'affiche sur un clic droit. Le drag and drop est disponible et en cliquant sur un document, vous l'ouvrez instantanément.   

Exemple de mise en oeuvre pour l'entité CONTACT

Pour l'entité Contact, reprenez l'ensemble de la procédure précédente avec le code :

//----------------------------------------------------------------------------------
var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;
var CRM_FORM_TYPE_READONLY = 3;
var CRM_FORM_TYPE_DISABLED = 4;
var CRM_FORM_TYPE_QUICKCREATE = 5;
var CRM_FORM_TYPE_BULKEDIT = 6;

// Affichage de la base documentaire pour le contact en cours
displayDocumentLibrary();

// Affichage de la base documentaire pour le contact en cours
function displayDocumentLibrary()
{
    //Cas du mode formulaire en création rapide
    if(crmForm.FormType == CRM_FORM_TYPE_QUICKCREATE){
              return;
    }
    //Dans tous les autres modes du formulaire
    //Initialisation de l'iFrame à vide
    crmForm.all.IFRAME_Documents.src = "about:blank";
    //Le nom complet du contact donne le nom du dossier dans la base documentaire
    //contenant les documents relatifs au contact
     var contactFolderName = crmForm.all.firstname.DataValue + " " + crmForm.all.lastname.DataValue ;
    //Le nom du compte parent donne le nom du dossier dans la base documentaire
    //contenant le dossier contact
    var parentAccount = new Array();
    parentAccount = crmForm.all.parentcustomerid.DataValue;
    if(parentAccount != null)
           var accountFolderName = parentAccount[0].name;
    else
           //Erreur : Ce contact est incomplet car il ne contient pas de compte parent
            return;
    //Selon le type d'affichage
    switch (crmForm.FormType)
    {
           case CRM_FORM_TYPE_CREATE:
           case CRM_FORM_TYPE_BULKEDIT:
                     //iFrame par défaut à vide
                     break;
           case CRM_FORM_TYPE_UPDATE:
           case CRM_FORM_TYPE_READONLY:
           case CRM_FORM_TYPE_DISABLED:
                      if(contactFolderName != null &&accountFolderName != null)
                     {
                          //Chargement dans l'iFrame du chemin vers le dossier du compte dans la base documentaire
                          crmForm.all.IFRAME_Documents.src = "\\\\<NomDuServeur>\\<NomDuPartage>\\" + accountFolderName + "\\" + contactFolderName;
                      }
                     break;
     }

}
//----------------------------------------------------------------------------------

  • Sauvegarder les changements puis publier l'entité Contact.
  • Vous obtenez le résultat suivant (à condition que le dossier correspondant existe dans la base documentaire) :

image

Pour terminer, il faudrait bien sûr définir une stratégie pour la création des dossiers.
Si vous optez pour une création dynamique, vous pouvez par exemple créer le dossier par script en vous appuyant sur la remarque fait par un internaute dans l'article de Corp qui exploite l'objet Scripting.FileSystemObject.

Bonne continuation !

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 18 février 2008 13:00 par bianca
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01