使用 FetchXML 对大型结果集进行分页
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
您可以使用分页 Cookie 对 FetchXML 查询的结果进行分页。 分页 Cookie 是一个性能提升功能,用于针对非常大的数据集提升应用程序分页的速度。 当您查询记录集时,结果将包含分页 Cookie 的值。 为了提升性能,您可以在检索下一个记录集时传递该值。
FetchXML 和 QueryExpression 对其分页 Cookie 使用不同的格式。 如果您通过 FetchXmlToQueryExpressionRequest 消息或 QueryExpressionToFetchXmlRequest 消息转换查询格式,则会忽略分页 Cookie 值。 另外,如果您请求不连续的页,也会忽略分页 Cookie 值。
当您在 FetchXML 中使用分页 Cookie 时,请确保使用正确的编码。 以下示例显示在 FetchXML 中使用分页 Cookie 时的正确编码。
strQueryXML = @"
<fetch mapping='logical' paging-cookie='<cookie page="1"><accountid last="{E062B974-7F8D-DC11-9048-0003FF27AC3B}" first="{60B934EF-798D-DC11-9048-0003FF27AC3B}"/></cookie>' page='2' count='2'>
<entity name='account'>
<all-attributes/>
</entity>
</fetch>";
FetchXML 和分页 Cookie 示例
以下示例演示如何对 FetchXML 查询使用分页 Cookie。 有关完整示例代码的信息,请参阅示例:将 FetchXML 与分页 Cookie 结合使用。
// Define the fetch attributes.
// Set the number of records per page to retrieve.
int fetchCount = 3;
// Initialize the page number.
int pageNumber = 1;
// Initialize the number of records.
int recordCount = 0;
// Specify the current paging cookie. For retrieving the first page,
// pagingCookie should be null.
string pagingCookie = null;
// Create the FetchXml string for retrieving all child accounts to a parent account.
// This fetch query is using 1 placeholder to specify the parent account id
// for filtering out required accounts. Filter query is optional.
// Fetch query also includes optional order criteria that, in this case, is used
// to order the results in ascending order on the name data column.
string fetchXml = string.Format(@"<fetch version='1.0'
mapping='logical'
output-format='xml-platform'>
<entity name='account'>
<attribute name='name' />
<attribute name='emailaddress1' />
<order attribute='name' descending='false'/>
<filter type='and'>
<condition attribute='parentaccountid'
operator='eq' value='{0}' uiname='' uitype='' />
</filter>
</entity>
</fetch>",
_parentAccountId);
Console.WriteLine("Retrieving data in pages\n");
Console.WriteLine("#\tAccount Name\t\t\tEmail Address");
while (true)
{
// Build fetchXml string with the placeholders.
string xml = CreateXml(fetchXml, pagingCookie, pageNumber, fetchCount);
// Excute the fetch query and get the xml result.
RetrieveMultipleRequest fetchRequest1 = new RetrieveMultipleRequest
{
Query = new FetchExpression(xml)
};
EntityCollection returnCollection = ((RetrieveMultipleResponse)_service.Execute(fetchRequest1)).EntityCollection;
foreach (var c in returnCollection.Entities)
{
System.Console.WriteLine("{0}.\t{1}\t\t{2}", ++recordCount, c.Attributes["name"], c.Attributes["emailaddress1"] );
}
// Check for morerecords, if it returns 1.
if (returnCollection.MoreRecords)
{
Console.WriteLine("\n****************\nPage number {0}\n****************", pageNumber);
Console.WriteLine("#\tAccount Name\t\t\tEmail Address");
// Increment the page number to retrieve the next page.
pageNumber++;
// Set the paging cookie to the paging cookie returned from current results.
pagingCookie = returnCollection.PagingCookie;
}
else
{
// If no more records in the result nodes, exit the loop.
break;
}
}
另请参阅
示例:将 FetchXML 与分页 Cookie 结合使用
使用 FetchXML 构建查询
FetchXML 中的会计日期和“早于”日期/时间查询运算符
使用 FetchXML 构建查询
使用查询表达式对大型结果集分页
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权