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;
}
S'il vous plaît votre code! – manuzi1
@ 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. –
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. –