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

问题描述

我有以下要求要在实体的插件代码中实现,例如“实体 A”-

下面是'实体A'中的数据

记录 1 的字段值

记录 2 的字段值

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

记录 3

  • 价格 = 100 + 200 = 300
  • 数量 = 4 + 2 = 6

实体 A 有一个名为“Perform Addition”的按钮,点击后会触发插件代码

我需要一些关于如何实现这一点的想法/伪代码。上面解释的示例只是我的实体的一个更简单的版本。在 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 中更新父记录。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...