2016-04-14 7 views
3

PHPとGetListItemChangesSinceTokenを使用してSharepointのドキュメントリストから最新の変更を取得しようとしています。私はphpSPOをSDKとして使用しています。公式のSharepoint SDKはPHP用ではないからです。Sharepoint GetListItemChangesSinceToken PHPでのCURLリクエスト

は、これまでのところ、私はこれを持っている:

返し
$payload = array(
     'query' => array(
      '__metadata' => array('type' => 'SP.ChangeLogItemQuery'), 
      'ViewName' => '', 
      'QueryOptions'=> '<QueryOptions><Folder>Shared Documents</Folder></QueryOptions>' 
     ) 
    ); 

    $headers = array(); 
    $headers["X-HTTP-Method"] = "MERGE"; 

    $changes = $this->request->executeQueryDirect($this->settings->URL . "/_api/web/Lists/GetByTitle('Documents')/GetListItemChangesSinceToken", $headers, $payload); 

{"error":{"code":"-2147467261, System.ArgumentNullException","message":{"lang":"en-US","value":"Value cannot be null.\r\nParameter name: query"}}}

は、私がX-HTTP-Method変更やJSONオブジェクトに記載JSON/XML要求(XMLに合うように配列を変更しようとしました、

答えて

2

最初のアプローチ)は、Microsoftに来る

次​​の例では、GetListItemChangesSinceToken methodを利用する方法を示しています。

$listTitle = "Documents"; 
$payload = array(
    'query' => array(
     '__metadata' => array('type' => 'SP.ChangeLogItemQuery'), 
     'ViewName' => '', 
     'QueryOptions'=> '<QueryOptions><Folder>Shared Documents</Folder></QueryOptions>' 
    ) 
); 

$request = new ClientRequest($webUrl,$authCtx); 
$options = array(
    'url' => $webUrl . "/_api/web/Lists/GetByTitle('$listTitle')/GetListItemChangesSinceToken", 
    'data' => json_encode($payload), 
    'method' => 'POST' 
); 
$response = $request->executeQueryDirect($options); 

//process results 
$xml = simplexml_load_string($response); 
$xml->registerXPathNamespace('z', '#RowsetSchema'); 
$rows = $xml->xpath("//z:row"); 
foreach($rows as $row) { 
    print (string)$row->attributes()["ows_FileLeafRef"] . "\n"; 
} 

第二のアプローチ

SharePoint REST Client SDK for PHPは今GetListItemChangesSinceToken methodをサポートしているので、前の例は次のように呼び出すことができます

$list = $ctx->getWeb()->getLists()->getByTitle($listTitle); 
$query = new ChangeLogItemQuery(); 
//to request all the items set ChangeToken property to null 
$query->ChangeToken = "1;3;e49a3225-13f6-47d4-a146-30d9caa05362;635969955256400000;10637059"; 
$items = $list->getListItemChangesSinceToken($query); 
$ctx->executeQuery(); 
foreach ($items->getData() as $item) { 
    print "[List Item] $item->Title\r\n"; 
} 

より多くの例可能性hereの下にphpSPOリポジトリがあります。

+1

ありがとうございますので**多くのVadim –

関連する問題