通过SOAP分页SharePoint 2010列表

时间:2012-06-12 23:20:54

标签: php soap sharepoint-2010 sharepoint-api

我无法通过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 web gui操作它。

我还缺少什么人呢?

1 个答案:

答案 0 :(得分: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>

和第二页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>

仅供参考:这些查询对新行字符很敏感。 确保在一行中完成所有操作。 我把它分开以便于阅读。

这会返回50行。

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

这将返回一个空集。 (或者它在我的环境中做过)

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

默认视图的设置不考虑因素.RowLimit似乎会覆盖它。 单个结果集中有default limit of 5000 items