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

How to get user from User field LookupId

我在在线共享点中有一个列表。 在这个列表中,我有一个 person 字段。

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

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

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

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

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

https://{yourTenant}.sharepoint.com/{yourSiteCollection}/_catalogs/users/detail.aspx

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

"listId":"{yourListIdIsHere}"

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

https://graph.microsoft.com/v1.0/sites/{siteId}/lists/{pasteCopiedListId}/item/{lookUpId}?$expand=Fields

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

https://graph.microsoft.com/v1.0/users/{eMail}

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

如果你不想使用'trick'和GoogleChrome来获取id,还有另一种获取站点的方法。通常,如果您想获取任何站点的 ID,您会调用:

https://graph.microsoft.com/v1.0/sites/{siteId}/lists

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

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=name eq 'users'

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

https://graph.microsoft.com/v1.0/sites/{siteId}/lists?$filter=displayName eq 'Benutzerinformationsliste'

您需要将 Benutzerinformationsliste 替换为您的本地化名称。对于 EN 将其替换为 'User Information List'.

这个returns预期的结果:

{
    "@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"
        }
    ]
}

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

如@QuestionsPS1991所述,people字段实际上是指隐藏的用户列表。使用 lookupid,我们可以通过以下方法获取用户:

//////////// 已更新

默认情况下,MS Graph 没有return 这个用户列表。您可以对列表 ID 进行硬编码或遵循@@QuestionsPS1991 的建议。下面是我的测试:

上面的一些查询目前不工作。 在尝试了许多查询之后,我最终找到了一个很好的解决方案,即您可以按照以下几个步骤执行此操作:

1-获取用户信息列表的GUID 在参数“$filter[=”中使用列表标题“User Information List”或名称“users” 34=]" 不起作用。 如果要检索隐藏的 system-lists.

,请不要忘记 select 属性中的 'system'
GET https://graph.microsoft.com/v1.0/sites('{site_id}')/lists?select=id,name,system

2- 过滤之前的结果以获取名为“users”的目标列表的 ID。 顺便说一句,应用此限制“$filter=name eq 'users'”不起作用。 你会得到一个例外。所以你必须写几行代码来完成过滤部分。

3- 获得列表标识符后,select 所有您想要的项目。瞧! 单词“Fields”必须采用帕斯卡格式(第一个字母大写)。

GET https://graph.microsoft.com/v1.0/sites('{site_id}')/lists('users_list_id')/items?$select=Fields&$expand=Fields