2012-06-12 2 views
1

Je rencontre des problèmes de pagination via une liste via SOAP.Pagination via la liste SharePoint 2010 via SOAP

Je peux récupérer une liste, mais elle ne renvoie que les 30 premiers éléments. (qui est le paramètre dans la vue par défaut).

$methodName = 'GetListItems'; 
$listName = '{259134c5-fa87-441e-8c31-641b51193710}'; 
$camlQuery=""; 
$paging = urlencode('Paged=TRUE&p_ID=30'); 

$xmlAction = 
    '<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <listName>' . $listName . '</listName> 
     <query>' . $camlQuery . '</query> 
     <queryOptions> 
      <QueryOptions> 
       <Paging ListItemCollectionPositionNext="' . $paging . '" /> 
      </QueryOptions> 
      </queryOptions> 
     </GetListItems>'; 

echo '<hr><h1>My Action is:</h1><pre>' . htmlentities($xmlAction) . '</pre>'; 

$client = new Nusoap_Client($wsdl,true); 
$response = $client->call($methodName,$xmlAction); 
echo '<hr><h1>Response:</h1><pre>' . htmlentities(print_r($response,true)) . '</pre>'; 

Ceci renvoie une réponse comme celle-ci, sauf qu'il y a 30 éléments.

Response: 

Array 
(
    [GetListItemsResult] => Array 
     (
      [listitems] => Array 
       (
        [data] => Array 
         (
          [row] => Array 
           (
            [0] => Array 
             (
              [!ows_Region] => 7 
              [!ows_District_x0020_ID] => 1902 
              [!ows_District] => SOME ISD 
              [!ows_Campus_x0020_ID] => 1902001 
              [!ows_Campus] => MY H S 
              [!ows_Grade_x0020_Range] => 09-12 
              [!ows_FileRef] => 30;#sites/ti/Lists/Schools/30_.000 
              [!ows_MetaInfo] => 30;# 
             ) 

           ) 

          [!ItemCount] => 30 
          [!ListItemCollectionPositionNext] => Paged=TRUE&p_ID=30 
         ) 

       ) 

     ) 

) 

Le documentation says pour obtenir la page suivante, je dois fournir la valeur retournée dans « ListItemCollectionPositionNext » et demande à nouveau. C'est ce que fait ce qui précède, et il retourne les mêmes 30 enregistrements. Cette liste contient 26 articles.

Ce n'est pas un problème. Je suis un administrateur pour cette liste et je peux la manipuler via l'interface web de sharepoint.

Quoi d'autre me manque-t-il?

Répondre

1

Je n'ai pas réussi à faire fonctionner la pagination, mais j'ai été capable de truquer en utilisant la colonne ID et rowLimit pour filtrer les résultats de ma liste dans les pages.

requête pour la première page »de 50.

<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
<listName>{259134c5-fa87-441e-8c31-641b51193710}</listName> 
<query><Query> 
      <Where> 
      <And><Gt><FieldRef Name="ID"/><Value Type="Number">0</Value></Gt> 
      <Leq><FieldRef Name="ID"/><Value Type="Number">50</Value></Leq> 
      </And> 
      </Where> 
</query></Query> 
<rowLimit><RowLimit>50</RowLimit></rowLimit> 
</GetListItems> 

et la deuxième page de 50

<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
<listName>{259134c5-fa87-441e-8c31-641b51193710}</listName> 
<query><Query> 
      <Where> 
      <And><Gt><FieldRef Name="ID"/><Value Type="Number">51</Value></Gt> 
      <Leq><FieldRef Name="ID"/><Value Type="Number">100</Value></Leq> 
      </And> 
      </Where> 
</query></Query> 
<rowLimit><RowLimit>50</RowLimit></rowLimit> 
</GetListItems> 

Pour votre information: Ces requêtes sont sensibles aux caractères de nouvelle ligne. Assurez-vous de faire tout cela sur une seule ligne. Je l'ai séparé pour le rendre plus facile à lire.

Cela renvoie 50 lignes.

<rowLimit><RowLimit>50</RowLimit></rowLimit> 

Ceci retourne un ensemble vide. (Ou qu'il a fait dans mon environnement)

<rowLimit> 
<RowLimit>50</RowLimit> 
</rowLimit> 

Les réglages de l'affichage par défaut ne prennent pas en compte. RowLimit semble remplacer. Il existe un default limit of 5000 items dans un jeu de résultats unique.

Questions connexes