CRM 2011 FetchXml用于提取列表帐户并仅显示最近的活动日期

时间:2014-01-15 20:04:02

标签: dynamics-crm-2011 crm fetchxml

我正在尝试在crm 2011上的fetchxml中创建一个显示帐户名称列表的报告,并且同一行中还显示该帐户的最近活动的日期。

所以

报告应该是

Account1, Date of most recent activity for Account 1
Account2, Date of most recent activity for Account 2
Account3, Date of most recent activity for Account 3

我有一个提取查询来提取正确的数据,但它会为该帐户的每个活动拉一行,而不仅仅是针对最新的活动。

所以它看起来像

Account1, Date of most recent activity for Account 1
Account1, Date of other activity  for Account 1
Account2, Date of most recent activity for Account 2
Account2, Date of other activity for Account 2
Account3, Date of most recent activity for Account 3

这是我的提取

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" aggregate="false">
    <entity name="<accountentityname>"
        <attribute name="<accountname>" />
        <link-entity name="activity" from="<regardingaccoutnfield>" to="<account field>" visible="false" link-type="outer"> 
            <attribute name="<date of activity>"  />
        </link-entity>
    </entity>
</fetch>

有什么建议吗?

感谢。

3 个答案:

答案 0 :(得分:0)

您想要做的事情需要子查询。这是CRM does not support

如果您没有使用CRM Online,只需使用SQL而不是FetchXml执行标准SSRS查询。

如果您只是尝试使用SDK撤回数据,则可以在客户端执行子查询。

为什么Max Aggregate不起作用

如果您希望获得最大值的列是一个数字,您可以使用聚合,但聚合函数AVG,MIN,MAX或SUM只能应用于integer,float,money,bigint类型的属性或者小数。

如果您尝试运行此查询,那就是错误:

var xml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true' aggregate='true'>
  <entity name='contact'>
    <attribute name='fullname' alias='name' groupby='true'   />
    <attribute name='contactid' alias='id' groupby='true'  />
    <link-entity name='activitypointer' from='regardingobjectid' to='contactid' alias='ad' link-type='outer'>
      <attribute name='createdon' alias='createdon_max' aggregate='max' /> 
      <filter type='and'>
        <condition attribute='createdon' operator='not-null' />
      </filter>
    </link-entity>
  </entity>
</fetch>";

EntityCollection fetchResult = service.RetrieveMultiple(new FetchExpression(xml);

答案 1 :(得分:0)

不确定maxaggregate属性是否适用于日期时间,但如果确实如此,那么

答案 2 :(得分:0)

您可以对日期进行排序并仅返回第一条记录!

对帐户进行查询,然后为每个帐户返回一个&amp;使用类似的东西:

    <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
      <entity name="activitypointer">
        <attribute name="scheduledstart" />
        <order attribute="scheduledstart" descending="true" />
        <filter type="and">
          <condition attribute="scheduledstart" operator="not-null" />
        </filter>
      </entity>
    </fetch>

或类似的查询表达式:

QueryExpression query = new QueryExpression("activitypointer");
                            query.ColumnSet.AddColumns("scheduledstart");
                            query.AddOrder("scheduledstart", OrderType.Descending);
                            EntityCollection results = service.RetrieveMultiple(query);

然后像:

(DateTime)(((Entity)results.Entities.First()).Attributes["scheduledstart"]);

添加条件,即关联字段等于每个循环范围内的account.id