我正在尝试在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>
有什么建议吗?
感谢。
答案 0 :(得分:0)
您想要做的事情需要子查询。这是CRM does not support。
如果您没有使用CRM Online,只需使用SQL而不是FetchXml执行标准SSRS查询。
如果您只是尝试使用SDK撤回数据,则可以在客户端执行子查询。
如果您希望获得最大值的列是一个数字,您可以使用聚合,但聚合函数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