0

是否可以将图标添加到 CRM 中的子网格?我已经尝试过这个解决方案,但图标不会出现在子网格中,仅用于视图。

编辑

我注意到,如果我在转到子网格所在的页面之前打开关联视图的页面,该图标会出现在子网格中。

我查看了打开这些页面时加载了哪些资源。打开相关视图的页面时,会加载图像。打开子网格所在的页面时不会加载它。打开页面时是否有一种简单的方法可以将图像加载到 contentIFrame 中?

为关联视图打开页面时加载的图像

4

2 回答 2

1

实施此方案时,子网格图标在刷新子网格后偶尔出现。实际发生的是 Dynamics 正在添加一个带有 ms-crm-Grid-DataColumn-ImgItem 类的 div。这个 div 包含一个 img 元素,有时带有 src,大多数时候根本没有 src,例如这里

我为此开发了一个适用于 Dynamics 365 的解决方法,但 Microsoft 非常不支持。请访问此页面并对此问题进行投票,以便我们获得支持的解决方案。

//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;
}
于 2017-12-20T15:01:06.880 回答
0

该博客指出偶尔显示的子网格图标。从上下文菜单中单击“刷新列表”有时可以解决问题。仍然不是 100% 富有成效的。

作为一种受支持的解决方法,您可以在 IFRAME 中显示带有图标的关联视图,如此所述。

于 2017-09-08T03:40:41.540 回答