CRM实体上的计算字段

时间:2013-02-07 20:30:05

标签: dynamics-crm-2011 dynamics-crm

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

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

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

enter image description here

enter image description here

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

3 个答案:

答案 0 :(得分: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调用。)

答案 1 :(得分:2)

看看AutoSummary from Gap Consulting,非常值得花钱。或者花时间建立自己的。您需要在帐户记录上添加一个字段,每次更新时都会更新:

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

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

答案 2 :(得分:2)

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

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

同样,这是我知道公式管理器开箱即用的东西。从未使用过Auto Summary。