gpt4 book ai didi

c# - 使用 QueryByAttribute 无法检索空值

转载 作者:太空狗 更新时间:2023-10-30 01:21:37 24 4
gpt4 key购买 nike

我是 CRM 开发的新手。除了 CRM 2011 中的现有值外,我还想从我的 C# 应用程序更新自定义字段值。如果该字段有一些值,那么它工作正常,但如果它为空,那么我收到“字典中不存在给定的键。”错误。

下面的代码是我想要实现的。

IOrganizationService service = (IOrganizationService)serviceProxy;
QueryByAttribute querybyattribute = new QueryByAttribute("salesorder");
querybyattribute.ColumnSet = new ColumnSet(new String[] {
"salesorderid", "new_customefield" });

querybyattribute.Attributes.AddRange("ordernumber");
querybyattribute.Values.AddRange(ordernumber);
EntityCollection retrieved = service.RetrieveMultiple(querybyattribute);

foreach (var c in retrieved.Entities)
{
OrderID = new Guid(c.Attributes["salesorderid"].ToString());
CustomFieldValue = c.Attributes["new_customefield"].ToString();
}

最佳答案

错误发生是因为没有输入值的字段不会在上下文对象而不是图像中返回。或者更通俗地说 - 您需要检查某个字段是否在属性中。

仅仅声明它并通过 ColumnSet 请求它是不够的。这令人困惑和恼人(我自己也去过那里)。

就在我的脑海中,我可以想到以下代码片段来管理这个问题(不必为每次读取设置一个 if 子句,但也避免了一堆方法 - 一个对于每个变量类型)。

private Generic GetEntityValue<Generic>(
Entity entity, String field, Generic substitute = default(Generic))
{
if (entity.Contains(field))
return (Generic)entity[field];
return substitute;
}

编辑:或作为扩展方法

public static T GetAttributeValue<T> (this Entity e, string propertyName, T defaultValue = default(T))
{
if (e.Contains(propertyName))
{
return (T)e[propertyName];
}
else
{
return defaultValue;
}
}

关于c# - 使用 QueryByAttribute 无法检索空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com