Del via


Sideopdele store resultatsæt med FetchXML

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Du kan sideinddele resultaterne af en FetchXML-forespørgsel ved hjælp af sideopdelingscookie. En sideopdelingscookie er en ydeevnefunktion, der gør sideopdeling i programmet hurtigere for meget store datasæt. Når du opretter en forespørgsel for et sæt af poster, indeholder resultatet en værdi for sideopdelingscookien. For at få bedre ydeevne kan du derefter sende denne værdi, når du henter det næste sæt poster.

FetchXML og QueryExpression bruger forskellige formater for deres sideopdelingscookies. Hvis du konverterer fra ét forespørgselsformat til et andet ved hjælp af FetchXmlToQueryExpressionRequest meddelelsen eller QueryExpressionToFetchXmlRequest meddelelsen, ignoreres sideopdelingscookiens værdi. Hvis du desuden anmoder om ikke-sammenhængende sider, ignoreres sideopdelingscookiens værdi.

Når du bruger sideopdelingscookien sammen med FetchXML, skal du bruge den korrekte kodning. Følgende eksempel viser den korrekte kodning ved brug af sideopdelingscookie sammen med 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>";

Eksempel på FetchXML og sideopdelingscookie

Følgende eksempel viser, hvordan du bruger sideopdelingscookien med en FetchXML-forespørgsel. Se Eksempel: Brug FetchXML med en sideopdelingscookie for at se hele eksempelkoden.


// 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;
    }
}

Se også

Eksempel: Brug FetchXML med en sideopdelingscookie
Oprette forespørgsler med FetchXML
Regnskabsdato og "ældre end" dato/klokkeslæt forespørgselsoperatorer i FetchXML
Brug FetchXML til at oprette en forespørgsel
Sideopdele store resultatsæt med QueryExpression

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret