3

我在 Dynamics CRM 中的帐户和投资组合之间存在 1:N 的关系,即每个帐户都有多个投资组合,每个投资组合都有特定的资产。

我正在尝试在帐户表单上创建一个字段,该字段计算帐户的“所有相关投资组合的所有资产”的总和并将其显示在帐户表单上

作为一种解决方法,我尝试创建一个按帐户分组的投资组合视图,但它没有求和并将投资组合资产汇总到帐户级别。

在此处输入图像描述

在此处输入图像描述

因此,在帐户表单上,我试图创建一个文本字段,在此示例中计算总帐户资产为 25,000 美元

4

3 回答 3

3
function setupGridRefresh() {
var targetgrid = document.getElementById("NAME OF SUBGRID");

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

function subGridOnload() {
//debugger;
var grid = Xrm.Page.ui.controls.get('NAME OF SUBGRID')._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('FIELD NAME LOWER CASE', ids[i]) != "") {
        cellValue = grid.get_innerControl().getCellValue('FIELD NAME LOWER CASE', ids[i]);
        cellValue = cellValue.substring(2);
        cellValue = parseFloat(cellValue);
        sum = sum + cellValue;
    }

}

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

我从几个来源拼凑起来,目前使用它作为我的解决方案之一。如果您需要更多帮助或者我误读了问题,请告诉我。(顺便说一句,此解决方案基于以下假设:当子网格添加或删除条目时,您需要更改总数。如果这不是要求,我建议调用 RetrieveMultiple OData。)

于 2013-03-22T18:03:28.673 回答
2

看看Gap Consulting 的 AutoSummary,物有所值。或者花时间建立自己的。您需要客户记录上的一个字段,每次您执行以下操作时都会更新该字段:

  • 创建投资组合记录
  • 更新投资组合记录中的值
  • 删除投资组合记录
  • 将 Partfolio 记录从一个帐户重新父级到另一个帐户

前两个很容易在投资组合的 onSave 事件中使用工作流或 javascript。第三只能通过工作流完成,而不是javascript(我认为)。最后一个需要 onLoad javascript 来存储 Account 查找的当前值,以便 onSave 可以进行比较,然后递减一个并递增另一个。这四个都可以通过插件完成。

于 2013-02-08T15:41:30.333 回答
2

尽管已经回答了这个问题,但我会为您提供第二个选项。也可以看看North 52 的FormulaManager。您可以免费获得一定数量的公式,因此它可能是一个更具成本效益的解决方案。

更新 补充一点,如果该字段仅用于报告一个值(并且不需要保存到数据库中),那么您可以构建一个执行 Aggregated FetchXml 查询的 Web 资源,而不是使用物理字段和插件只显示结果值。

同样,这是我知道 Formula Manager 开箱即用的东西。从未使用过自动摘要。

于 2013-02-11T18:44:39.460 回答