共用方式為


將大量結果集用 QueryExpression 分頁

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

在 Microsoft Dynamics 365 (線上和內部部署) 中,您可以使用來分頁 cookie 功能來讓應用程式在處理大型的資料集時,提升分頁的速度。 此功能可以在 QueryExpression 和 FetchXML 查詢中使用。 當您使用分頁 Cookie 功能,在查詢一組記錄時,結果包含的分頁 cookie 的值。 如要改善系統效能,您可以在擷取下一組紀錄時傳送該值。

QueryExpression 和 FetchXML 針對其分頁 cookie 使用不同的格式。 如果您使用 QueryExpressionToFetchXmlRequest 訊息或 FetchXmlToQueryExpressionRequest 訊息將 A 查詢格式轉換為 B 格式,將會忽略分頁 Cookie 值。 此外,如果您要求不連續的頁面,會忽略分頁 Cookie 值。

下列範例顯示如何使用與查詢運算式的分頁 cookie。 如需完整的範例程式碼,請參閱範例:使用 QueryExpression 搭配分頁 Cookie


// Query using the paging cookie.
// Define the paging attributes.
// The number of records per page to retrieve.
int queryCount = 3;

// Initialize the page number.
int pageNumber = 1;

// Initialize the number of records.
int recordCount = 0;

// Define the condition expression for retrieving records.
ConditionExpression pagecondition = new ConditionExpression();
pagecondition.AttributeName = "parentaccountid";
pagecondition.Operator = ConditionOperator.Equal;
pagecondition.Values.Add(_parentAccountId);

// Define the order expression to retrieve the records.
OrderExpression order = new OrderExpression();
order.AttributeName = "name";
order.OrderType = OrderType.Ascending;

// Create the query expression and add condition.
QueryExpression pagequery = new QueryExpression();
pagequery.EntityName = "account";
pagequery.Criteria.AddCondition(pagecondition);
pagequery.Orders.Add(order);
pagequery.ColumnSet.AddColumns("name", "emailaddress1");                   

// Assign the pageinfo properties to the query expression.
pagequery.PageInfo = new PagingInfo();
pagequery.PageInfo.Count = queryCount;
pagequery.PageInfo.PageNumber = pageNumber;

// The current paging cookie. When retrieving the first page, 
// pagingCookie should be null.
pagequery.PageInfo.PagingCookie = null;
Console.WriteLine("Retrieving sample account records in pages...\n");
Console.WriteLine("#\tAccount Name\t\tEmail Address"); 

while (true)
{
    // Retrieve the page.
    EntityCollection results = _serviceProxy.RetrieveMultiple(pagequery);
    if (results.Entities != null)
    {
        // Retrieve all records from the result set.
        foreach (Account acct in results.Entities)
        {
            Console.WriteLine("{0}.\t{1}\t{2}", ++recordCount, acct.Name,
                               acct.EMailAddress1);
        }
    }

    // Check for more records, if it returns true.
    if (results.MoreRecords)
    {
        Console.WriteLine("\n****************\nPage number {0}\n****************", pagequery.PageInfo.PageNumber);
        Console.WriteLine("#\tAccount Name\t\tEmail Address");

        // Increment the page number to retrieve the next page.
        pagequery.PageInfo.PageNumber++;

        // Set the paging cookie to the paging cookie returned from current results.
        pagequery.PageInfo.PagingCookie = results.PagingCookie;
    }
    else
    {
        // If no more records are in the result nodes, exit the loop.
        break;
    }
}

另請參閱

使用 QueryExpression 建立查詢
範例:使用 QueryExpression 搭配分頁 Cookie
範例:擷取與一對多關係
使用 QueryExpression 類別
分頁 FetchXML 大型結果集

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權