如何在 Microsoft Graph 中按创建者筛选 SharePoint 列表项?

Yan*_*ans 4 sharepoint microsoft-graph-api

我正在尝试通过 Microsoft Graph 从 SharePoint 获取列表项的集合,我想按 CreatedBy 进行筛选。请求:https://graph.microsoft.com/v1.0/sites/{siteid}/lists/TeamRequests/items

返回:

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('{url}')/lists('TeamRequests')/items",
"value": [
    {
        "@odata.etag": "\"56ad787e-bd69-464a-b5da-dd953e40d7c4,13\"",
        "createdDateTime": "2018-02-26T08:34:26Z",
        "eTag": "\"56ad787e-bd69-464a-b5da-dd953e40d7c4,13\"",
        "id": "11",
        "lastModifiedDateTime": "2018-03-22T13:20:03Z",
        "webUrl": "{url}/Lists/TeamRequests/11_.000",
        "createdBy": {
            "user": {
                "email": "{email}",
                "id": "9c9cbb67-c049-4a2d-845d-6c5ca2300041",
                "displayName": "{Name}"
            }
        },
        "lastModifiedBy": {
            "user": {
                "email": "{email}",
                "id": "9c9cbb67-c049-4a2d-845d-6c5ca2300041",
                "displayName": "{Name}"
            }
        },
        "parentReference": {},
        "contentType": {
            "id": "0x01005F15F8133495554D834FF82F187AD0630002133A9CCDE4494D8CB2206D7D6453D6"
        }
    },
Run Code Online (Sandbox Code Playgroud)

现在我想过滤此请求以查找 createBy(ID、displayName 或电子邮件地址)。我尝试了?$filter=createdBy/user/email eq '{email}'类似的 id 或 displayName 请求。他们都回来了

{
    "error": {
        "code": "generalException",
        "message": "An unspecified error has occurred.",
        "innerError": {
            "request-id": "492e3bde-05fe-4484-a475-435ff0aa70b6",
            "date": "2018-07-23T07:41:46"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么如何实现这个过滤器呢?甚至支持吗?

Vad*_*hev 5

尽管这听起来像是一个简单的查询,但我还没有找到比以下解决方案更简单的解决方案:

除了提供用户 ID的情况外,似乎不支持按用户字段进行过滤,这就是解决方案包含两个步骤的原因:

1)首先,我们需要Id通过确定用户Email,为此可以使用以下查询:

https://graph.microsoft.com/v1.0/sites/root/lists('User Information List')/items?expand=fields(select=Id,Email)
Run Code Online (Sandbox Code Playgroud)

*其中User Information List系统列表存储用户属性,包括 ID 和电子邮件属性 *

Id2)解析用户后,可以应用按用户 ID过滤项目的最终查询:

https://graph.microsoft.com/v1.0/sites/{site-id}/lists('list-name')/items?filter=fields/<user-field-name>LookupId eq '<user-id>'  
Run Code Online (Sandbox Code Playgroud)

在哪里

<user-field-name>LookupId是除了用户字段之外还公开的字段,如果是Created字段,则名称应该是AuthorLookupId

例子:

https://graph.microsoft.com/v1.0/sites/root/lists('TeamRequests')/items?filter=fields/AuthorLookupId eq '10'
Run Code Online (Sandbox Code Playgroud)

笔记

在某些情况下,会返回以下错误 Field ''无法在过滤器或 orderby 中引用,因为它未建立索引。提供“Prefer: HonorNonIndexedQueriesWarningMayFailRandomly”标头以允许这样做,但请注意,此类查询可能会在大型列表上失败。

在这种情况下,需要应用以下请求标头:

首选:HonorNonIndexedQueriesWarningMayFailRandomly