2017-08-18 2 views
0

Est-il possible d'ajouter des icônes à un sous-maille dans le CRM? J'ai essayé la solution this mais les icônes n'apparaîtront pas dans la sous-grille, seulement pour la vue.Est-il possible d'ajouter des icônes à un sous-réseau dans CRM?

EDIT

J'ai remarqué que l'icône apparaît dans la sous-grille si j'ouvre la page pour une vue associée avant d'aller à la page où se trouve le sous-grille.

Je regardé ce que les ressources qui sont chargés lors de l'ouverture de ces pages. Lorsque vous ouvrez la page pour la vue associée, l'image est chargée. Il n'est pas chargé lors de l'ouverture de la page où se trouve le sous-réseau. Existe-t-il un moyen facile de charger l'image dans contentIFrame lors de l'ouverture de la page?

Image loaded when opening page for associated view

+0

S'il vous plaît votre code! – manuzi1

+0

@ manuzi1 Je n'ai pas de code, je demande si c'est possible. La solution que j'ai liée ne résoudra pas mon problème selon Microsoft. –

+1

J'ai eu le même problème - il n'était pas possible d'afficher les icônes en sous-grille, uniquement sur les vues normales. Donc je suppose que c'est juste comment ça fonctionne maintenant. –

Répondre

0

Lors de l'implémentation this solution, des icônes apparaissent sporadiquement après sous-maille rafraîchissante du sous-grille. Ce qui se passe réellement, c'est que Dynamics ajoute une div avec la classe ms-crm-Grid-DataColumn-ImgItem. Cette div contient un élément img, parfois avec un src et la plupart du temps sans src du tout, example here.

J'ai développé une solution de contournement pour cela qui fonctionne pour Dynamics 365, mais très peu pris en charge par Microsoft. S'il vous plaît visitez this page et votez ce numéro afin que nous puissions obtenir une solution prise en charge.

//This function is called when form is loaded 
function refreshSubgridIcons() { 

    var grid = Xrm.Page.ui.controls.get('SUBGRID_NAME'); 

    if (grid == null) { 
    setTimeout(function() { refreshSubgridIcons(); }, 5000); 
    return; 
    } 

    //This function will be called everytime subgrid is refreshed/loaded 
    grid.addOnLoad(setSubgridIcons); 

} 

function setSubgridIcons() { 

    //Get active IFrame 
    var contentIFrame = window.top.document.getElementById(getActiveIFrame()); 

    //Get subgrid 
    var subgrid = contentIFrame.contentWindow.document.querySelector('[gridid="SUBGRID_NAME"]'); 

    //Wait for rows to be loaded 
    setTimeout(function() { 
    //Get rows in subgrid 
    var subgridRows = subgrid.getElementsByClassName('ms-crm-List-Row-Lite'); 

    //Loop through all rows in subgrid 
    for (i = 0; i < subgridRows.length; i++) { 
     //Get priority for row 
     var priority = subgridRows[i].querySelector('[rawvalue]'); 
     var priorityValue = priority.getAttribute('rawvalue'); 

     //Set image url depending on priority value for row 
     var imgUrl; 
     if (priorityValue == '1') { 
      imgUrl = 'URL_FOR_IMAGE_HIGH'; 
     } 
     if (priorityValue == '2') { 
      imgUrl = 'URL_FOR_IMAGE_MEDIUM'; 
     } 
     if (priorityValue == '3') { 
      imgUrl = 'URL_FOR_IMAGE_HIGH'; 
     } 

     var nobr = subgridRows[i].getElementsByTagName('nobr'); 
     //Get div for img 
     var imgItem = nobr[0].getElementsByClassName('ms-crm-Grid-DataColumn-ImgItem'); 

     if (imgItem.length == 0) { 
      //Create div and img if not exists 
      var div = document.createElement('div'); 
      div.setAttribute('class', 'ms-crm-Grid-DataColumn-ImgItem'); 
      div.innerHTML = '<img src="' + imgUrl + '"/>'; 
      nobr[0].insertBefore(div, nobr[0].firstChild); 

     } else { 
      //Change src on existing img 
      var img = imgItem[0].getElementsByTagName('img'); 
      img[0].setAttribute('src', imgUrl); 
     } 

    } 

}, 100); 

} 

function getActiveIFrame() { 
    //Get all IFrames in the page 
    var IFrames = window.top.document.querySelectorAll('iframe'); 

    //Get active IFrame 
    var IFrame; 
    for (i = 0; i < IFrames.length; i++) { 
     if (IFrames[i].style.visibility == 'visible') { 
      IFrame = IFrames[i].id; 
     } 
    } 
    return IFrame; 
} 
0

This blog états icônes affichant de façon sporadique sous-grille. Cliquer sur «Actualiser la liste» dans le menu contextuel résout parfois le problème. Pourtant ce n'est pas 100% fructueux.

Pour contourner le problème pris en charge, vous pouvez afficher la vue associée avec des icônes dans IFRAME comme discuté here.

+0

J'ai trouvé la raison pour laquelle les icônes des sous-réseaux apparaissent sporadiquement, voir le premier article. –

+0

@AlexanderBacklund heureux que vous avez fait des progrès .. va vérifier si, de toute façon, nous pouvons injecter l'image en tant que dépendance en premier lieu .. –