2012-06-12 5 views
1

SOAP를 통해 목록을 페이징하는 데 문제가 있습니다.SharePoint 2010을 통한 페이징 SOAP를 통한 목록

목록을 검색 할 수 있지만 처음 30 개 항목 만 반환합니다. (기본보기의 설정).

$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>'; 

이렇게하면 30 개의 항목이 있다는 점만 제외하면 다음과 같은 응답이 반환됩니다.

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 
         ) 

       ) 

     ) 

) 

documentation says

다음 페이지를 얻기 위해, 나는 다시 "ListItemCollectionPositionNext"쿼리에서 반환 된 값을 제공해야합니다. 이것이 위의 작업이며 30 개의 동일한 레코드가 반환됩니다. 이 목록에는 26K 개의 항목이 있습니다.

권한 문제가 아닙니다. 저는이 목록에 대한 관리자이고 sharepoint 웹 GUI를 통해이를 조작 할 수 있습니다.

내가 누락 된 사람은 무엇입니까?

답변

1

페이징을 사용할 수 없지만 ID 열을 사용하여 가짜로 만들었고 rowLimit을 사용하여 목록의 결과를 페이지로 필터링했습니다.

(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> 

의 첫 번째 '페이지'에 대한 쿼리 및

<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> 

(50)의 두 번째 페이지는 참고 :이 쿼리는 새 라인 문자에 민감합니다. 이 작업을 한 줄에 모두 수행해야합니다. 더 쉽게 읽을 수 있도록 분리했습니다.

이렇게하면 50 개의 행이 반환됩니다.

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

빈 집합을 반환합니다. (또는 내 환경에서 했음)

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

기본보기의 설정은 고려하지 않습니다. RowLimit이이를 무시하는 것으로 나타납니다. 단일 결과 집합에 default limit of 5000 items이 있습니다.