我想要使用此查询获取超过5000条记录,但每次都会获得带空值的cookie。我意识到链接的实体是这里的问题,因为当我删除它时,我每次都会得到cookie。
<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吗?
答案 0 :(得分:0)
阅读你的帖子提醒我之前我已经听过这个,当然我去了我的笔记,看到“带有linkentity的Fetchxml不支持分页”。但是,我似乎无法找到有关限制的任何官方信息,这感觉很奇怪。
无论如何,我很确定使用链接实体的获取查询不支持分页。请尝试使用QueryExpression执行。
答案 1 :(得分:0)
此特定问题的解决方案是您需要在根实体上指定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>
答案 2 :(得分:-1)
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;
}
}
}
}