JavaScript Web 资源问题:getGrid() 突然开始失败

JavaScript Web Resource issue: getGrid() suddenly started failing

我有一些使用 getGrid() 的不同 JavaScript 网络资源,在我启用 D365 中的 2020 Wave 1 更新后,所有这些资源本周都开始失败。错误信息显示:

"Error occurred :TypeError: Unable to get property 'getGrid' of undefined or null reference"

这是我的代码:

function GetTotalResourceCount(executionContext) {
   console.log("function started");
   var execContext = executionContext;
   var formContext = executionContext.getFormContext();
   var resourceyescount = 0;
   try {
      var gridCtx = formContext._gridControl;
       var grid = gridCtx.getGrid();
       var allRows = grid.getRows();
       var duplicatesFound = 0;
       //loop through rows and get the attribute collection
       allRows.forEach(function (row, rowIndex) {
           var thisRow = row.getData().entity;
           var thisRowId = thisRow.getId();
var thisResource = "";
var thisResourceName = "";
var thisResourceID = "";
           console.log("this row id=" + thisRowId);
           var thisAttributeColl = row.getData().entity.attributes;
           thisAttributeColl.forEach(function (thisAttribute, attrIndex) {
               var msg = "";
               if (thisAttribute.getName() == "new_resource") {
                   thisResource = thisAttribute.getValue();
thisResourceID = thisResource[0].id;
thisResourceName = thisResource[0].name;
console.log("this resource name=" + thisResourceName)
               }
           });
           var allRows2 = formContext.getGrid().getRows();
           //loop through rows and get the attribute collection
           allRows2.forEach(function (row, rowIndex) {
               var thatRow = row.getData().entity;
               var thatRowId = thatRow.getId();
               var thatAttributeColl = row.getData().entity.attributes;
var thatResource = "";
var thatResourceName = "";
var thatResourceID = "";
               thatAttributeColl.forEach(function (thatAttribute, attrIndex) {
                   if (thatAttribute.getName() == "new_resource") {
                       thatResource = thatAttribute.getValue();
thatResourceID = thatResource[0].id;
thatResourceName = thatResource[0].name;
                       if (thatResourceID == thisResourceID && thatRowId != thisRowId) {
                           duplicatesFound++;
                           var msg = "Duplicate resource " + thatResource;
console.log("duplicates found= " + duplicatesFound);
                       }
                   }
               });
           });
       });
       if (duplicatesFound > 0) {
           console.log("duplicate found");
Xrm.Page.getAttribute("new_showduplicateerror").setValue(true);
Xrm.Page.getControl("new_showduplicateerror").setVisible(true);
Xrm.Page.getControl("new_showduplicateerror").setNotification("A duplicate resource was found.  Please remove this before saving."); 
       } else {
Xrm.Page.getAttribute("new_showduplicateerror").setValue(false);
Xrm.Page.getControl("new_showduplicateerror").setVisible(false);
Xrm.Page.getControl("new_showduplicateerror").clearNotification(); 
}
   } catch (err) {
       console.log('Error occurred :' + err)
   }
}

这是触发该功能的单独网络资源:

function TriggerSalesQDResourceCount(executionContext){
var formContext = executionContext.getFormContext();
formContext.getControl("s_qd").addOnLoad(GetTotalResourceCount);
}

有什么办法可以解决这个问题吗?这是新的 D365 wave 1 更新的已知问题吗? 谢谢!

这是不支持(未记录)代码使用的问题,将在未来的更新中中断。

不支持:

var gridCtx = formContext._gridControl;

您必须切换到这些支持的方法。

function doSomething(executionContext) {
   var formContext = executionContext.getFormContext(); // get the form Context
   var gridContext = formContext.getControl("Contacts"); // get the grid context

   // Perform operations on the subgrid

   var grid = gridContext.getGrid();

}

参考文献:

Client API grid context

Grid (Client API reference)