Partager via


Mettre en page d’importants ensembles de résultats avec FetchXML

 

Date de publication : novembre 2016

S’applique à : Dynamics CRM 2015

Vous pouvez mettre en page les résultats d’une requête FetchXML à l’aide du cookie de pagination. Le cookie de pagination est une fonctionnalité de performances qui permet d’accélérer la pagination dans l’application pour les plus grands ensembles de données. Lorsque vous demandez un ensemble d’enregistrements, les résultats contiennent une valeur pour le cookie de pagination. Pour des performances optimisées, vous pouvez transmettre cette valeur lorsque vous récupérez l’ensemble d’enregistrements suivant.

FetchXML et QueryExpression utilisent différents formats pour leurs cookies de pagination. Si vous convertissez un format de requête en un autre format à l'aide du message FetchXmlToQueryExpressionRequest ou du message QueryExpressionToFetchXmlRequest, la valeur du cookie de pagination est ignorée. En outre, si vous demandez des pages non consécutives, la valeur du cookie de pagination est ignorée.

Lorsque vous utilisez le cookie de pagination avec FetchXML, assurez-vous d’utiliser le codage approprié. L’exemple suivant montre le codage approprié lors de l’utilisation du cookies de pagination avec 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>";

L’exemple suivant montre comment utiliser le cookie de pagination avec une requête FetchXML. Pour obtenir l’exemple de code complet, voir Exemple : Utiliser FetchXML avec un cookie de pagination.


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

Voir aussi

Exemple : Utiliser FetchXML avec un cookie de pagination
Générer des requêtes avec FetchXML
Opérateurs de requête de date/heure "Plus de" et date d'exercice dans FetchXML
Utiliser FetchXML pour créer une requête
Mettre en page d’importants ensembles de résultats avec QueryExpression

© 2017 Microsoft. Tous droits réservés. Copyright