子网格总计Crm

时间:2015-03-17 11:07:40

标签: dynamics-crm-2011 crm dynamics-crm-2013

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

1:我想要的是当我在子网格中添加一些值时。我需要在我的主要表单下面的文本中显示所有工资单的总和,命名为' TOTAL'。

2:我应该在哪里调用这个java脚本(在哪个事件上)Onload或Onsave of form?或者因为我似乎可以在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);
}
}

这段代码不起作用。在网格中添加值后,我的文本框仍为空! 提前致谢

2 个答案:

答案 0 :(得分:1)

如果您即将升级到Microsoft CRM 2015或已经在Microsoft CRM 2015上,您可以在没有任何JavaScript的情况下执行此操作,只需创建一个新的计算汇总字段并将其放在子网格下面,或者您希望放置它的任何位置在表格上。请注意,此字段的计算时间为12小时,但如果您愿意,可以通过JavaScript在表单加载时计算。您可以在https://msdn.microsoft.com/en-us/library/dn817863.aspx - &#34;计算和汇总属性&#34;中查看有关该详细信息。 TechNet文档,&#34;定义汇总字段&#34;在https://technet.microsoft.com/library/dn832162.aspx有一些关于汇总字段限制的好例子,场景和讨论。

答案 1 :(得分:0)

你可以用subgrid的onRefresh来做。这也是不受支持的方式,但它的工作原理。您必须将此功能添加到您的javascript

&#13;
&#13;
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");
}
&#13;
&#13;
&#13;

有关详细信息,请参阅link