Crm 中的子网格总计

Sub Grid Total In Crm

我有一个主要实体(自我保险)和一个次要实体(补偿)。他们有 1:N 关系。因此,在我的主要自我保险形式中,我有一个名为 'Worker_Compensation' 的子网格,我在其中添加了一些工资值。 我有两个问题。 . .

1:我想要的是当我在子网格中添加一些值时。我需要在名为 'TOTAL'.

的主表单下方的文本中显示所有工资单的总和

2:我应该在哪里调用此 java 脚本(在哪个事件上)Onload 或 Onsave 表单?或者因为我似乎可以在 Subgrid 上找到事件。

为此,我正在使用 java 脚本。

enter code here
function setupGridRefresh() {
var targetgrid = document.getElementById("Worker_Compensation");

// If already loaded
if (targetgrid.readyState == 'complete') {
    targetgrid.attachEvent("onrefresh", subGridOnload);
}
else {
    targetgrid.onreadystatechange = function applyRefreshEvent() {
        var targetgrid = document.getElementById("Worker_Compensation");
        if (targetgrid.readyState == 'complete') {
            targetgrid.attachEvent("onrefresh", subGridOnload);
        }
    }
}
subGridOnload();
}

function subGridOnload() {
//debugger;
var grid = Xrm.Page.ui.controls.get('Worker_Compensation')._control;
var sum = 0.00;

if (grid.get_innerControl() == null) {
    setTimeout(subGridOnload, 1000);
    return;
}
else if (grid.get_innerControl()._element.innerText.search("Loading") != -1) {
    setTimeout(subGridOnload, 1000);
    return;
}

var ids = grid.get_innerControl().get_allRecordIds();
var cellValue;
for (i = 0; i < ids.length; i++) {
    if (grid.get_innerControl().getCellValue('new_estannualpayroll', ids[i]) != "") {
        cellValue = grid.get_innerControl().getCellValue('new_estannualpayroll', ids[i]);
        cellValue = cellValue.substring(2);
        cellValue = parseFloat(cellValue);
        sum = sum + cellValue;
    }

}

var currentSum = Xrm.Page.getAttribute('new_payrolltotal').getValue();
if (sum > 0 || (currentSum != sum && currentSum != null)) {
    Xrm.Page.getAttribute('new_payrolltotal').setValue(sum);
}
}

这段代码无效。在网格中添加值后,我的文本框仍然为空! 提前致谢

您可以使用子网格的 onRefresh 来完成。这也是不受支持的方式,但它有效。您必须将此功能添加到您的 javascript

function AddEventToGridRefresh(gridName, functionToCall) {
   // retrieve the subgrid
   var grid = document.getElementById(gridName);
   // if the subgrid still not available we try again after 1 second
   if (grid == null) {
       setTimeout(function () {AddEventToGridRefresh(gridName, functionToCall);}, 1000);
       return;
   }
   // add the function to the onRefresh event
   grid.control.add_onRefresh(functionToCall);
}
// function used in this example
function AdviseUser() {
   alert("Sub-Grid refreshed");
}

欲了解更多信息,请点击此处link

如果您即将升级到 Microsoft CRM 2015 或已经在使用 Microsoft CRM 2015,您可以在没有任何 JavaScript 的情况下执行此操作,只需创建一个新的计算汇总字段并将其放置在子网格下方,或者您希望将其放在表格上的任何位置。请注意,此字段每 12 小时计算一次,但如果您愿意,可以通过 JavaScript 在表单加载时计算。您可以在 https://msdn.microsoft.com/en-us/library/dn817863.aspx -"Calculated and Rollup Attributes". The TechNet document, "Define rollup fields" at https://technet.microsoft.com/library/dn832162.aspx 查看有关详细信息,其中有一些很好的示例、场景和关于汇总字段限制的讨论。