微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dynamics crm + 插件代码,用于跨实体集合存储总和公式

如何解决Dynamics crm + 插件代码,用于跨实体集合存储总和公式

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

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

记录 1 的字段值

记录 2 的字段值

我需要做两件事

  1. 添加字段的值并在新记录中更新
  2. 将加法公式存储在不同的配置实体中

示例如下 -

记录 3

  • 价格
    价格值 = 300 公式值 = 100 + 200

  • 数量 数量值 = 6 公式值 = 4 + 2

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

下面是我试过的代码 -

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);

我想知道是否有办法通过 linq 我可以不循环地存储公式? 如果不是,我怎么能做到这一点?

任何帮助将不胜感激。

解决方法

这里有一些想法:

有趣的是,您正在计算多个记录的值并将结果填充到同级记录而不是父记录上。这与典型的“汇总”计算不同。

Dynamics 使用 SQL 顺序 GUID 生成器来生成其 ID。如果您在 Dynamics 之外生成 GUID,您可能需要查看 leveraging the same logic

以下是您可以如何使用 LINQ 重构代码的示例:

var target = new Entity("entitya",new Guid("guid"));

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

attributes.ForEach(a => target[a] = entities.Sum(e => e.GetAttributeValue<Decimal>(a));

service.Update(target);

GetAttributeValue<Decimal>() 方法 defaults 设置为 0,因此我们可以跳过 Contains 调用。

就在配置实体上存储公式而言,如果您正在寻找存储和使用任何公式的能力,您将需要一个完整的表达式解析器,与此 calculator example 类似。 您是否能够在沙盒插件中执行所需的反射是另一个问题。

但是,如果您有几个设置公式,您可以将它们全部编码到插件中,并根据实体的属性和/或配置数据确定在运行时使用哪个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?