如何从用户字段 LookupId 获取用户

Tri*_*let 1 api sharepoint sharepoint-online microsoft-graph-sdks microsoft-graph-api

我在网上的 sharepoint 中有一个列表。在这个列表中,我有一个 person 字段。

当我调用 API 端点以获取列表中的所有项目时,我会得到人员字段的 LookupId 值。

我试图通过使用 lookupid 的值来获取用户,但它不起作用,因为无法识别 id。

lookupid 是一个 int(例如:21)而不是一个 guid。

人员字段的配置或我对 Microsoft Graph API 的调用中是否缺少某些内容?

Mar*_*arc 6

当用户首次登录 SharePoint 网站集时,会在隐藏的用户信息列表中创建 ListItem。PersonOrGroup 字段中的 LookupId 是指此列表中的 ListItem。SharePoint Online 用户信息列表的 URL 应为:

https://{yourTenant}.sharepoint.com/{yourSiteCollection}/_catalogs/users/detail.aspx
Run Code Online (Sandbox Code Playgroud)

由于用户信息列表是一个通用的 SharePoint 列表,您可以通过图表查询该列表。首先,获取用户信息列表的列表 ID。获取列表 ID 的一种简单方法是通过 Chrome 查看用户信息站点的源并搜索“listId”。你应该找到这样的结果:

"listId":"{yourListIdIsHere}"
Run Code Online (Sandbox Code Playgroud)

复制身份证。通过使用复制的id、你的根站点的id和LookupId,你可以得到用户信息列表中的ListItem:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists/{pasteCopiedListId}/item/{lookUpId}?$expand=Fields
Run Code Online (Sandbox Code Playgroud)

ListItem 包含有关用户的信息,例如电子邮件,可用于识别 Azure 用户:

https://graph.microsoft.com/v1.0/users/{eMail}
Run Code Online (Sandbox Code Playgroud)

问题:如何从 Microsoft Graph 获取隐藏的用户信息列表?

如果您不想使用 Google Chrome 的“技巧”来获取 id,还有另一种获取站点的方法。通常,如果您想获取任何站点的 id,您可以调用:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists
Run Code Online (Sandbox Code Playgroud)

但是,即使您包含隐藏站点,您也不会找到用户信息列表的 id。我不知道为什么。另一个问题似乎是,您无法按名称过滤列表:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=name eq 'users'
Run Code Online (Sandbox Code Playgroud)

查询返回错误,不支持提供的过滤器语句。在不知道 id 的情况下获取列表的唯一方法似乎是使用列表的属性 displayName。但是,显示名称基于您的本地化。因此,由于我来自德国,因此可以使用以下查询获取该站点:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=displayName eq 'Benutzerinformationsliste'
Run Code Online (Sandbox Code Playgroud)

您需要将 Benutzerinformationsliste 替换为您的本地化名称。对于 EN,将其替换为“用户信息列表”。

这将返回预期结果:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('xxx')/lists(id,name,displayName)",
    "value": [
        {
            "@odata.etag": "\"xxx\"",
            "id": "xxx",
            "name": "users",
            "displayName": "Benutzerinformationsliste"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,列表的名称是“用户”,所以为什么第一个过滤器语句不起作用对我来说有点神秘。也许这里有人知道并且可以提供帮助。