在CRM 2011中使用FetchXML

时间:2011-09-26 03:30:43

标签: dynamics-crm crm dynamics-crm-2011 fetchxml

我正在使用FetchXML,我正在对两个实体进行分组和使用计数,但是其他实体我不需要分组,我只需要将数据下拉。例如,这是我的代码:

string groupby1 = @" 
<fetch distinct='false' mapping='logical' aggregate='true'> 
 <entity name='opportunity'>
  <attribute name='name' alias='opportunity_count' aggregate='countcolumn' />  
  <attribute name='ownerid' alias='ownerid' groupby='true' />
  <attribute name='createdon' alias='createdon' /> 
  <attribute name='customerid' alias='customerid' /> 
 </entity> 
</fetch>";

EntityCollection groupby1_result = orgProxy.RetrieveMultiple(new FetchExpression(groupby1));

foreach (var c in groupby1_result.Entities)
{
  Int32 count = (Int32)((AliasedValue)c["opportunity_count"]).Value;
  string OwnerID = ((EntityReference)((AliasedValue)c["ownerid"]).Value).Name;
  DateTime dtCreatedOn = ((DateTime)((AliasedValue)c["createdon"]).Value);
  string CustomerName = ((EntityReference)((AliasedValue)c["customerid"]).Value).Name;
}

但是我收到了这个错误:

  

EXCEPTION:System.ServiceModel.FaultException`1 [Microsoft.Xrm.Sdk.OrganizationServiceFault]:当指定了聚合操作且既不是groupby也不是aggregate时,不能请求属性。 NodeXml :(故障详细信息等于Microsoft.Xrm.Sdk.OrganizationServiceFault)。

如何在某些值上使用聚合而不是其他值?

2 个答案:

答案 0 :(得分:1)

错误消息为您提供答案 - 使用FetchXML无法做到这一点。你需要进行两次FetchXML调用;一个用于聚合,一个用于数据。

答案 1 :(得分:0)

所以,这里有一些事情发生。问题不在于使用FetchXML无法实现您的查询,因为它在任何查询语言(包括SQL)中无法实现。上面的FetchXML的SQL如下:

SELECT ownerID, createdon, customerid
FROM dbo.Opportunity
GROUP BY ownerID

如果您尝试针对数据库运行此SQL,则会出现标准Column 'dbo.Opportunity.CreatedOn' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.错误,这正是您的异常试图告诉您的错误。要解决此问题,您还需要通过在每个相应的createdon元素中包含customerid属性,按每个非聚合列(在本例中为groupby='true'attribute)进行分组

其次,按每个商机的创建日期进行分组或多或少是一个没有结果的分组,因为机会通常是在不同的日期时间创建的,因此这个分组只会返回整个表。 Microsoft正确地认识到这一点,因此如果您修复了上面的分组问题,您将遇到与datetime列相关的另一个异常。如果您继续阅读文章I'd previously shared,则可以使用dategrouping属性,通过不同的日期间隔(年,月,季度等)对不同的方式进行分组。

但是,我感觉即使在解决了一般分组问题,然后是dategrouping问题之后,结果集可能仍然不是你想要的。如果不是,那么发布您期望看到的结果集的示例可能会有所帮助,然后解决FetchXML是否有权将该集合传递给您。