Condividi tramite


Set di risultati di grandi dimensioni della pagina con FetchXML

 

Data di pubblicazione: gennaio 2017

Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

È possibile eseguire il paging dei risultati di una query FetchXML utilizzando i cookie di paging. Il cookie di paging è una funzionalità delle prestazioni che esegue il paging nell'applicazione in modo più rapido per dataset di grandi dimensioni. Quando si esegue una query per un set di record, il risultato conterrà un valore per il cookie di paging. Per migliorare le prestazioni, è possibile quindi passare tale valore quando si recupera il set successivo di record.

FetchXML e QueryExpression utilizzano formati diversi per i rispettivi cookie di paging. Se si converte un formato della query in un altro utilizzando il messaggio FetchXmlToQueryExpressionRequest o il messaggio QueryExpressionToFetchXmlRequest, il valore di un cookie di paging viene ignorato. Inoltre, se si richiedono le pagine non consecutive, il valore di cookie di paging viene ignorato.

Quando si utilizza il cookie di paging con FetchXML, assicurarsi di utilizzare la codifica corretta. Nel seguente esempio viene illustrata la codifica corretta quando si utilizza il cookie di paging con 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>";

Nell'esempio seguente viene illustrato come utilizzare il cookie di paging con una query FetchXML. Per il codice di esempio completo, vedere Esempio: utilizzare FetchXML con un cookie di paging.


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

Vedere anche

Esempio: utilizzare FetchXML con un cookie di paging
Creare query con FetchXML
Operatori di query "oltre" data/ora e data fiscale in FetchXML
Utilizzare FetchXML per costruire una query
Set di risultati di grandi dimensioni della pagina con QueryExpression

Microsoft Dynamics 365

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright