Dynamics CRM + 插件代码,用于计算跨记录的字段总和并在另一条记录中更新

Dynamics CRM + Plugin Code to Calculate Sum of fields across records and update in the another record

我有以下要求在实体的插件代码中实现说 'Entity A'-

下面是'Entity A'

中的数据

带字段值的记录 1

带字段值的记录 2

我需要添加字段的值并在新记录中更新它。示例如下 -

记录 3

实体 A 有一个名为“执行添加”的按钮,单击后将触发插件代码。

我需要一些 ideas/pseudocode 来了解如何实现它。上面解释的例子只是我的实体的一个简单版本。在 Real 中,实体上有 60 多个字段,对于每个字段,我需要在第三个字段中执行求和和更新。另外,要执行加法的记录数可以超过 2。

因此记录数越多,我将不得不遍历每条记录并执行求和,我想知道是否有更简单更好的方法来编写此逻辑。

只需要有关如何编写逻辑的指导。 任何帮助将不胜感激。

解决方案:

尝试了下面的代码,它按照答案的建议工作 -

AttributeList 是我需要对其执行求和的字段列表。所有字段都是小数

Entity EntityA = new EntityA();
EntityA.Id = new Guid({"Guid String"});

var sourceEntityDataList = service.RetrieveMultiple(new FetchExpression(fetchXml)).Entities;

          foreach (var value in AttributeList)
            {
                EntityA[value]= sourceEntityDataList.Sum(e => e.Contains(value) ? e.GetAttributeValue<Decimal>(value) : 0);
            }

service.Update(EntityA);

我最近为客户做了类似的事情。我们研究了使用汇总字段,但他们希望在 12 小时内更快得到结果。

包含我们求和的值的记录是子记录,包含结果的记录是父记录。

它的工作方式是:

  1. 从插件的目标实体中获取父 ID。
  2. 检索父项。
  3. 检索其子项(通过 LINQ、FetchXML 或 QueryExpression)。
  4. 对子项的值求和。由于你有很多字段要求和,你可以创建一个字段名称列表,然后使用这样的方法(假设它们都是 Money 个字段)
    private decimal sum(string field) => Records.Sum(b => b.GetAttributeValue<Money>(field)?.Value ?? 0);
    如果字段是不同的类型,您还可以创建不同的 sum 方法,例如 sumMoneysumInt 等。然后您需要按类型分隔字段并将它们传递给相应的方法.
  5. 在父 Entity 上填充结果。
  6. 更新 Dynamics 中的父记录。

如果信息不是那么时间敏感,可以查看开箱即用的汇总字段。