我有一个主要实体(自我保险)和一个次要实体(补偿)。他们有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);
}
}
这段代码不起作用。在网格中添加值后,我的文本框仍为空! 提前致谢
答案 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
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;
有关详细信息,请参阅link