我无法通过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操作它。
我还缺少什么人呢?
答案 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。