2016-04-14 92 views
3

我试图从Sharepoint的文档列表中使用PHP和GetListItemChangesSinceToken获取最新更改。我使用phpSPO作为SDK,因为没有用于PHP的任何官方Sharepoint SDK。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/XML请求(XML的JSON对象,来吧微软)

回答

2

第一种方法

下面的例子演示了如何利用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"; 
} 

更多的例子可能根据phpSPO存储库找到here

+1

谢谢你,所以**很多Vadim –