Dynamics crm 2011 CRM实体上的计算字段

Dynamics crm 2011 CRM实体上的计算字段,dynamics-crm-2011,dynamics-crm,Dynamics Crm 2011,Dynamics Crm,我在Dynamics CRM中的帐户和投资组合之间有1:N的关系 即每个账户有多个投资组合,每个投资组合有特定的资产 我正在尝试在帐户窗体上创建一个字段,该字段计算帐户的“所有相关投资组合的所有资产”的总和,并将其显示在帐户窗体上 作为一种解决方法,我尝试创建一个按帐户分组的投资组合视图,但它不会将投资组合资产汇总到帐户级别 因此,在账户表单中,我试图创建一个文本字段,在本例中,该字段计算账户总资产为25000美元。请看一看,这是值得的。或者花时间建立自己的。帐户记录上需要一个字段,该字段在

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

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

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

因此,在账户表单中,我试图创建一个文本字段,在本例中,该字段计算账户总资产为25000美元。请看一看,这是值得的。或者花时间建立自己的。帐户记录上需要一个字段,该字段在您每次执行以下操作时都会更新:

  • 创建投资组合记录
  • 更新投资组合记录中的值
  • 删除投资组合记录
  • 将零件组合记录从一个帐户重新设置为另一个帐户的父项

在公文包的onSave事件上使用工作流或javascript可以很容易地完成前两项。第三,只能通过工作流完成,而不是javascript(我认为)。最后一个需要onLoad javascript来存储帐户查找的当前值,以便onSave可以进行比较,然后减少一个,增加另一个。这四个都可以通过一个插件来完成。

虽然这已经得到了回答,但我会为您提供第二个选项。再看看北52。您可以免费获得一定数量的公式,因此这可能是一个更具成本效益的解决方案

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

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

函数setupGridRefresh(){
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);
}
}
var targetgrid=document.getElementById(“子网格的名称”); //如果已经加载 如果(targetgrid.readyState==“完成”){ targetgrid.attachEvent(“onrefresh”,subGridOnload); } 否则{ targetgrid.onreadystatechange=函数applyRefreshEvent(){ var targetgrid=document.getElementById(“子网格的名称”); 如果(targetgrid.readyState==“完成”){ targetgrid.attachEvent(“onrefresh”,subGridOnload); } } } subGridOnload(); } 函数subGridOnload(){ //调试器; var grid=Xrm.Page.ui.controls.get('子网格名称')。\u控件; var总和=0.00; if(grid.get_innerControl()==null){ setTimeout(subGridOnload,1000); 返回; } else if(grid.get_innerControl()._元素.innerText.search(“加载”)!=-1){ setTimeout(subGridOnload,1000); 返回; } var id=grid.get_innerControl().get_allRecordIds(); var值; 对于(i=0;i0 | |(currentSum!=sum&¤tSum!=null)){ Xrm.Page.getAttribute('DESTINATION FIELD').setValue(总和); } }

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

计算应该在何时进行?当您创建帐户时?什么时候更新?或者在创建投资组合的过程中?它应该像任何其他字段一样出现在“帐户”窗体上,并且能够将其拉到视图上!!您可以在表单加载时使用javascript填充该字段,方法是使用fetch xml从数据库中获取数据,或以任何其他形式访问数据库。是否需要存储该字段,以便您可以运行该字段的报告,还是只供查看实体的用户使用?不需要存储,因为它是一个可变数字,我的目标是在帐户上创建一个视图,并拉入总资产列。用JavaScript执行任何业务逻辑都是不好的做法,所有业务逻辑都需要封装在工作流或插件中,以便始终执行。JavaScript不可靠,因为它只存在于表单上。不一定适用于批量更新、集成场景等。