使用PHP进行Sharepoint GetListItemChangesSinceToken CURL请求

3
我正在尝试使用PHP和GetListItemChangesSinceToken从Sharepoint获取我的文档列表中的最新更改。由于没有官方的Sharepoint SDK适用于PHP,因此我使用phpSPO作为SDK。
到目前为止,我有以下内容:
$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":"值不能为 null。\r\n参数名: query"}}}

我尝试更改X-HTTP-Method并更改数组以适应文档中记录的JSON/XML请求(在JSON对象中使用XML,微软怎么做到的)。

1个回答

3

第一种方法

以下示例演示如何利用GetListItemChangesSinceToken方法

$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";
}

第二种方法

由于用于PHP的SharePoint REST客户端SDK现在支持GetListItemChangesSinceToken方法,因此可以像这样调用先前的示例:

$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存储库中。


1
非常感谢您,Vadim。 - Martijn Nosyncerror
好问题,不幸的是据我所知,这个特定的端点返回XML负载(类似于asxm遗留结果集),无论指定什么JSON控制头。 - Vadim Gremyachev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接