【发布时间】:2016-03-06 20:25:20
【问题描述】:
我运行 C# 代码来比较 CRM 中的前后图像以确定字段是否发生更改(长话短说:我无法控制的外部过程每次都更新记录上的每个字段,即使字段没有t 改变)。我想使用 CRM GetAttributeValue(attributeName) 来执行此操作,但是当我可能不知道字段名称时,我想动态执行此操作。所以,例如,我想这样做:
// pretend the value of firstname is not hard-coded but submitted on a form
// (not really on a form, but just know it's not hard-coded like it is below.)
string fieldToCheck = "firstname";
if (preImage.GetAttributeValue<T>(fieldToCheck) != postImage.GetAttributeValue<T>(fieldToCheck))
{
// do something here. I've tried something like the below, but it doesn't work with error "t is a variable but used like a type".
Type t = preImage.Attributes[fieldToCheck].GetType();
var val = preImage.GetAttributeValue<t>(fieldToCheck);
}
我遇到的问题是 <T> 可能会有所不同,具体取决于 fieldToCheck 的值。在 firstname 的情况下,它将是 <string>,在 new_DateOpened 的情况下,它将是 <DateTime>,等等。我一定是脑部痉挛,因为我应该能够弄清楚如何动态获取 T 的值,但不能。
【问题讨论】:
-
既然你在使用 var 为什么不直接使用 GetType 呢?确定您在 fieldToCheck 中拥有的数据类型?
-
修改了代码。 fieldToCheck 将始终是一个字符串。这只是我想要获取的 CRM 中属性的名称。
标签: c# plugins dynamics-crm