Pagination dans sharepoint 2007 GetListItems (WebService)

Publié dans: 

Si vous utilisez sharepoint 2007 et vous voulez récupérer tous les éléments d'une liste alors que cette liste contient un nombre très important d'éléments, alors vous auriez besoin d'utiliser la pagination.

Dans cet article on va vous aider à utiliser la pagination dans le webservice 'http://SharepointServer:PortNb/_vti_bin/lists.asmx/'.

Voici les étapes à suivre:

 

  • Chercher des éléments dans une liste:

Se connecter au webService 'http://SharepointServer:PortNb/_vti_bin/lists.asmx/' (on ne va pas vous décrire la procédure pour se connecter à un webservice)

 XElement result = proxy.GetListItems("ListName", null, Query, ViewFields, pagesize.ToString(), QueryOptions, null);
  • Créer les paramètres Query,ViewFields,QueryOption
var paging = ""; 

XElement Query = new XElement("Query");

XElement ViewFields = new XElement("ViewFields");

XElement QueryOptions = new XElement("QueryOptions", new XElement("Paging", new XAttribute("ListItemCollectionPositionNext", paging)));
  • Récupérer la réponse du serveur
<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
        <rs:data ItemCount="1000" ListItemCollectionPositionNext="Paged=TRUE&p_UHD_Numero_Magasin=10&p_UHD_Code_Rayon=25&p_ID=448030">
.......
        </rs:data>
</listitems>
paging = result.Descendants().First().Attribute("ListItemCollectionPositionNext").Value;
  • Réinjecter la valeur récupérée dans QueryOptions.

Et si on rassemble ces bouts de code ensemble on aura:

pagesize=1000;
paging=""; 

for (int i = 1; i <= pageCount; i++)
  {
              

                XElement Query = new XElement("Query");
                XElement ViewFields = new XElement("ViewFields");
                XElement QueryOptions = new XElement("QueryOptions", new XElement("Paging", new XAttribute("ListItemCollectionPositionNext", paging)));

                
                XElement result = proxy.GetListItems("ListName", null, Query, ViewFields, pagesize.ToString(), QueryOptions, null);
               
                paging = result.Descendants().First().Attribute("ListItemCollectionPositionNext").Value;

                IEnumerable<XElement> regXmlNodes = result.GetDataRows();
                Console.WriteLine(regXmlNodes.FirstOrDefault().ToString());
                Console.WriteLine(regXmlNodes.Count());
  }