我需要从实体中提取单个值。它是一种全局设置,它与调用实体没有关系。但是当我尝试使用RetrieveMultiple
时,我得到一个空的回复。
string name="objectToRetrieve";
QueryExpression qe = new QueryExpression { EntityName = "new_setting", ColumnSet =new ColumnSet ("new_name","new_value")};
qe.Criteria.AddCondition("new_name", ConditionOperator.Equal, name);
EntityCollection response = service.RetrieveMultiple(qe);
当我通过Guid
检索它时一切正常。
Entity response = service.Retreve("new_setting", Guid.Parse("09BF9644-9BBA-E511-80FA-005056924035), new ColumnSet("new_value"));
如何在没有Guid
的情况下获得它?
答案 0 :(得分:1)
您的检索倍数已正确设置。所以有几种选择可能会发生......
您的代码是正确的,您必须考虑您所做的假设是不正确的。我首先要确保所返回实体的GUID符合您的预期。
答案 1 :(得分:-1)
当您需要按名称查询单个记录时,您的代码示例应该可以解决问题。当然,在查询系统中,实际上必须有一个名为" objectToRetrieve"的记录。我会首先在那里寻找错误。
考虑在记录状态上添加过滤器。在Dynamics CRM中,记录可以是“活动”或“非活动”。通常预计非活动记录将被排除在业务流程之外。
此外,当您的查询永远不会返回超过1行时,您可以将TopCount
属性设置为1.这使SQL Server可以更有效地处理您的查询。
因此,您的第一个查询可能如下所示:
var query = new QueryExpression("new_setting") { TopCount = 1 };
query.ColumnSet.AddColumn("new_setting");
query.Criteria.AddCondition("new_name", ConditionOperator.Equal, name);
query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
EntityCollection response = service.RetrieveMultiple(query);
// Assuming new_value is a string attribute:
Console.WriteLine(response.Entities[0].GetAttributeValue<string>("new_value"));
您的第二个代码段包含拼写错误,但这个想法没问题。当您知道正确的记录ID时,通过id检索它是最有效的方法。
Entity settingEntity = service.Retrieve("new_setting", new Guid("09BF9644-9BBA-E511-80FA-005056924035"), new ColumnSet("new_value"));