Dynamics crm CRM FetchXML可获取5000多条记录
我想通过这个查询获取5000多条记录,但每次都会得到空值的cookie。我意识到链接实体是这里的问题,因为当我删除它时,每次都会得到cookieDynamics crm CRM FetchXML可获取5000多条记录,dynamics-crm,crm,fetchxml,Dynamics Crm,Crm,Fetchxml,我想通过这个查询获取5000多条记录,但每次都会得到空值的cookie。我意识到链接实体是这里的问题,因为当我删除它时,每次都会得到cookie <fetch version="1.0" mapping="logical" distinct="true" page="1" count="2000" > <entity name="listmember" > <link-entity name="contact" from="contactid
<fetch version="1.0" mapping="logical" distinct="true" page="1" count="2000" >
<entity name="listmember" >
<link-entity name="contact" from="contactid" to="entityid" alias="c" >
<attribute name="contactid" />
<attribute name="telephone1" />
<link-entity name="phonecall" from="ic_customer" to="contactid" alias="pc" link-type="outer" distinct="true">
<attribute name="activityid" />
<filter type="and" >
<filter type="or" >
<condition attribute="statuscode" operator="eq" value="1" />
<condition attribute="ic_end" operator="on-or-after" value="2016-11-12" />
</filter>
</filter>
</link-entity>
<filter type="and" >
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="telephone1" operator="not-null" />
<condition attribute="donotphone" operator="eq" value="0" />
</filter>
</link-entity>
<filter type="and" >
<condition attribute="listid" operator="in" >
<value>
{f89087ef-7017-e611-80e3-5065f38a3951}
</value>
</condition>
<condition entityname="pc" attribute="activityid" operator="null" />
</filter>
</entity>
</fetch>
有人知道如何通过此请求获取分页cookie吗?阅读您的帖子提醒我,我以前听说过这一点,果然,我在笔记中看到,带有linkentity的Fetchxml不支持分页。然而,我似乎找不到任何关于限制的官方信息,这让我感到奇怪
不管怎么说,我很确定,使用链接实体的fetch查询不支持分页。请尝试改用QueryExpression执行。此特定问题的解决方案是需要在根实体上指定ID列。在本例中,需要将listmemberid属性添加到根listmember实体
<fetch version="1.0" mapping="logical" distinct="true" page="1" count="2000" >
<entity name="listmember" >
<attribute name="listmemberid" />
<link-entity name="contact" from="contactid" to="entityid" alias="c" >
<attribute name="contactid" />
<attribute name="telephone1" />
<link-entity name="phonecall" from="ic_customer" to="contactid" alias="pc" link-type="outer" distinct="true">
<attribute name="activityid" />
<filter type="and" >
<filter type="or" >
<condition attribute="statuscode" operator="eq" value="1" />
<condition attribute="ic_end" operator="on-or-after" value="2016-11-12" />
</filter>
</filter>
</link-entity>
<filter type="and" >
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="telephone1" operator="not-null" />
<condition attribute="donotphone" operator="eq" value="0" />
</filter>
</link-entity>
<filter type="and" >
<condition attribute="listid" operator="in" >
<value>
{f89087ef-7017-e611-80e3-5065f38a3951}
</value>
</condition>
<condition entityname="pc" attribute="activityid" operator="null" />
</filter>
</entity>
</fetch>
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using Microsoft.Xrm.Sdk;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
IOrganizationService organizationservice;
public override void PreExecute()
{
base.PreExecute();
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "username";
credentials.UserName.Password = "password";
credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
organizationservice = new OrganizationServiceProxy(
new Uri("_your org service_Organization.svc"), null, credentials, null);
}
public override void PostExecute()
{
base.PostExecute();
}
public override void CreateNewOutputRows()
{
QueryExpression query = new QueryExpression("account")
{
ColumnSet = new ColumnSet(new string[] { "accountnumber" }),
PageInfo = new PagingInfo()
{
Count = 250,
PageNumber = 1,
ReturnTotalRecordCount = false,
PagingCookie = null
}
};
EntityCollection results = null;
while (true)
{
results = organizationservice.RetrieveMultiple(query);
foreach (Entity record in results.Entities)
{
accountBuffer.AddRow();
if (record.Contains("accountnumber"))
accountBuffer.accountnumber = record.GetAttributeValue<string>("accountnumber");
}
if (results.MoreRecords)
{
query.PageInfo.PageNumber++;
query.PageInfo.PagingCookie = results.PagingCookie;
}
else
{
break;
}
}
}
}