1

我无法通过 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
                        )

                )

        )

)

文档说要获取下一页,我需要提供“ListItemCollectionPositionNext”中返回的值并再次查询。这就是上面所做的,它返回相同的 30 条记录。此列表中有 26K 项。

它不是权限问题。我是这个列表的管理员,可以通过 sharepoint web gui 操作它。

我还想念什么人?

4

1 回答 1

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 似乎覆盖了它。单个结果集中的默认限制为 5000 个项目。

于 2012-06-13T18:39:54.493 回答