다음을 통해 공유


FetchXML을 사용하여 대형 결과 집합 페이징

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

페이징 쿠키를 사용하여 FetchXML 쿼리 결과를 페이징할 수 있습니다. 페이징 쿠키는 매우 큰 데이터 집합에 대해 응용 프로그램의 페이징 속도를 높여 주는 성능 기능입니다. 레코드 집합에 대해 쿼리하면 결과에는 페이징 쿠키의 값이 포함됩니다. 성능 향상을 위해 다음 레코드 집합을 검색할 때 해당 값을 전달할 수 있습니다.

FetchXML 및 QueryExpression는 해당 페이징 쿠키에 대한 다른 형식을 사용합니다.FetchXmlToQueryExpressionRequest 메시지 또는 QueryExpressionToFetchXmlRequest 메시지를 사용하여 한 쿼리 형식에서 다른 쿼리 형식으로 변환하는 경우 페이징 쿠키 값은 무시됩니다. 또한 비연속된 페이지를 요청하면 페이징 쿠키 값은 무시됩니다.

FetchXML와 페이징 쿠키를 사용할 경우 올바른 인코딩을 사용해야 합니다. 다음 예제에서는 FetchXML와 페이징 쿠키를 사용할 경우 올바른 인코딩을 보여 줍니다.

strQueryXML = @"
<fetch mapping='logical' paging-cookie='&lt;cookie page=&quot;1&quot;&gt;&lt;accountid last=&quot;{E062B974-7F8D-DC11-9048-0003FF27AC3B}&quot; first=&quot;{60B934EF-798D-DC11-9048-0003FF27AC3B}&quot;/&gt;&lt;/cookie&gt;' page='2' count='2'>
 <entity name='account'>
  <all-attributes/>
 </entity>
</fetch>";

FetchXML 및 페이징 쿠키 예제

다음 예제에서는 FetchXML 쿼리를 사용하여 페이징 쿠키를 사용하는 방법을 보여 줍니다. 전체 샘플 코드를 보려면 샘플: 페이징 쿠키와 함께 FetchXML 사용을 참조하십시오.


// 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 사용
FetchXML을 사용하여 쿼리 작성
FetchXML의 회계 날짜 및 "older than" 날짜/시간 쿼리 연산자
FetchXML을 사용하여 쿼리 구성
QueryExpression을 사용하여 대형 결과 집합 페이징

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보