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 レコードが返されます。このリストには 26,000 の項目があります。

許可の問題ではありません。私はこのリストの管理者であり、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の2ページ目

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

参考: これらのクエリは、改行文字に敏感です。これをすべて 1 行で行うようにしてください。読みやすいように分けてみました。

これは 50 行を返します。

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

これは空のセットを返します。(または私の環境ではそうでした)

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

デフォルト ビューの設定は考慮されません。RowLimit はそれをオーバーライドするように見えます。1 つの結果セットには、デフォルトで 5000 アイテムの制限があります。

于 2012-06-13T18:39:54.493 に答える