【问题标题】:Dynamics CRM + Plugin Code to Calculate Sum of fields across records and update in the another recordDynamics CRM + 插件代码计算跨记录的字段总和并在另一条记录中更新
【发布时间】:2021-06-16 13:13:54
【问题描述】:

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

以下是“实体 A”中的数据

使用字段值记录 1

  • 价格 = 100
  • 数量 = 4

使用字段值记录 2

  • 价格 = 200
  • 数量 = 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);

【问题讨论】:

  • 到目前为止你尝试过什么?应该是回答特定问题的地方,而不是可以让其他人为您完成工作的地方。

标签: plugins dynamics-crm dynamics-crm-2011 dynamics-crm-2013 dynamics-crm-online


【解决方案1】:

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

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

它的工作方式是:

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

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

【讨论】:

  • 感谢您的帮助并为之前的评论道歉。这行得通。我有另一个关于我在这里发布的问题 - stackoverflow.com/questions/66809258/… 请您指导
  • 很高兴听到它成功了。感谢您接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多