如何从用户字段 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
我在在线共享点中有一个列表。 在这个列表中,我有一个 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