使用带有人员字段的 MS Graph API 将新项目发布到 SharePoint 列表
POSTing a new item to a SharePoint list using the MS Graph API with a People field
我已经使用来自 SharePoint Online 的 Microsoft Graph 设置了一个使用数据的 React Web 应用程序,运行良好。我可以读取和写入 SP 列表,但我找不到任何关于如何构建数据以写入 'People/Group' 字段的文档。
查询包含这些字段的列表会得到 "ManagerLookupId": "12"
,其中 Manager
是人员选取器字段名称。我可以使用扩展查询字符串解析 "12"
。我不知道如何使用来自 Microsoft Graph
的 /v1.0
或 /beta
端点写入它
将此对象发布到相关端点有效(用于单行文本、选择等)。
{
"fields": {
"Title": "a",
"Category": "b",
"Description": "c"
}
}
但如果我要在人员选择器字段中添加,我不知道如何构建该数据。我试过电子邮件地址和 GUID,两者都不起作用。查看 SP 本机如何执行此操作,它似乎在为人员选择器字段提交时提交此值(已替换实际值)-
{
"Key": "i:0#.f|membership|EMAIL",
"DisplayText": "NAME",
"IsResolved": true,
"Description": "EMAIL",
"EntityType": "User",
"EntityData": {
"IsAltSecIdPresent": "False",
"Title": "POSITION",
"Email": "EMAIL",
"MobilePhone": "",
"ObjectId": "GUID",
"Department": ""
},
"MultipleMatches": [],
"ProviderName": "Tenant",
"ProviderDisplayName": "Tenant"
}
复制此也无法更新列表中的人员字段。
我无法在 MS Graph API 站点上找到任何文档或在他们的 Github 上找到类似的先前问题,因此非常感谢任何帮助!
我的测试demo,User是people字段允许多个用户。
{
"fields": {
"Title": "test",
"UserLookupId@odata.type": "Collection(Edm.Int32)",
"UserLookupId":[10,23]
}
}
对于一个用户。
{
"fields": {
"Title": "test",
"UserLookupId@odata.type": "Edm.Int32",
"UserLookupId":23
}
}
您可以在 FieldValueSet
的文档中找到 一些 相关信息:
Lookup fields (like Author
above) are not returned by default. Instead, the server returns a 'LookupId' field (like AuthorLookupId
above) referencing the listItem
targeted in the lookup. The name of the 'LookupId' field is the original field name followed by LookupId.
在幕后,这是 SharePoint 如何跟踪用户的 side-effect。作为历史的产物,SharePoint 维护着它自己的用户数据库。虽然在某个时间点 SP 管理员与这些用户有很多接触,但今天它是一个完全自动化的过程。它只是在第一次看到经过身份验证的 AAD 用户时创建一个新的 SPUser
记录。这些用户记录有自己的 id
属性。这是一个常见的 INT
而不是 GUID
(在您的示例中,他们的 id
是 12
)。
更新 ListItem
时,您需要使用 SharePoint 的 id
。您可以将其作为单个值或数组传递:
{
"fields": {
"ManagerLookupId": 12
}
}
{
"fields": {
"ManagerLookupId": [10,11,12]
}
}
问题出在此处,无法从 Microsoft Graph 获取此 SharePoint 用户 id
。显然,这使得 create/update a ListItem
变得非常具有挑战性。要解决这个问题,您可以使用旧的 SharePoint REST API's ensureUser
端点:
http://<sitecollection>/<site>/_api/web/ensureUser(logonName)
请记住,您还需要 SharePoint 的令牌才能调用此 API。如果您使用的是 AAD v1 终结点,这通常只是使用您的 SharePoint 资源 (https://{tenant}.sharepoint.com
) 刷新您的令牌以进行此调用,然后刷新回 Graph 资源 (https://graph.microsoft.com
) 的问题你的其他电话。
我已经使用来自 SharePoint Online 的 Microsoft Graph 设置了一个使用数据的 React Web 应用程序,运行良好。我可以读取和写入 SP 列表,但我找不到任何关于如何构建数据以写入 'People/Group' 字段的文档。
查询包含这些字段的列表会得到 "ManagerLookupId": "12"
,其中 Manager
是人员选取器字段名称。我可以使用扩展查询字符串解析 "12"
。我不知道如何使用来自 Microsoft Graph
/v1.0
或 /beta
端点写入它
将此对象发布到相关端点有效(用于单行文本、选择等)。
{
"fields": {
"Title": "a",
"Category": "b",
"Description": "c"
}
}
但如果我要在人员选择器字段中添加,我不知道如何构建该数据。我试过电子邮件地址和 GUID,两者都不起作用。查看 SP 本机如何执行此操作,它似乎在为人员选择器字段提交时提交此值(已替换实际值)-
{
"Key": "i:0#.f|membership|EMAIL",
"DisplayText": "NAME",
"IsResolved": true,
"Description": "EMAIL",
"EntityType": "User",
"EntityData": {
"IsAltSecIdPresent": "False",
"Title": "POSITION",
"Email": "EMAIL",
"MobilePhone": "",
"ObjectId": "GUID",
"Department": ""
},
"MultipleMatches": [],
"ProviderName": "Tenant",
"ProviderDisplayName": "Tenant"
}
复制此也无法更新列表中的人员字段。
我无法在 MS Graph API 站点上找到任何文档或在他们的 Github 上找到类似的先前问题,因此非常感谢任何帮助!
我的测试demo,User是people字段允许多个用户。
{
"fields": {
"Title": "test",
"UserLookupId@odata.type": "Collection(Edm.Int32)",
"UserLookupId":[10,23]
}
}
对于一个用户。
{
"fields": {
"Title": "test",
"UserLookupId@odata.type": "Edm.Int32",
"UserLookupId":23
}
}
您可以在 FieldValueSet
的文档中找到 一些 相关信息:
Lookup fields (like
Author
above) are not returned by default. Instead, the server returns a 'LookupId' field (likeAuthorLookupId
above) referencing thelistItem
targeted in the lookup. The name of the 'LookupId' field is the original field name followed by LookupId.
在幕后,这是 SharePoint 如何跟踪用户的 side-effect。作为历史的产物,SharePoint 维护着它自己的用户数据库。虽然在某个时间点 SP 管理员与这些用户有很多接触,但今天它是一个完全自动化的过程。它只是在第一次看到经过身份验证的 AAD 用户时创建一个新的 SPUser
记录。这些用户记录有自己的 id
属性。这是一个常见的 INT
而不是 GUID
(在您的示例中,他们的 id
是 12
)。
更新 ListItem
时,您需要使用 SharePoint 的 id
。您可以将其作为单个值或数组传递:
{
"fields": {
"ManagerLookupId": 12
}
}
{
"fields": {
"ManagerLookupId": [10,11,12]
}
}
问题出在此处,无法从 Microsoft Graph 获取此 SharePoint 用户 id
。显然,这使得 create/update a ListItem
变得非常具有挑战性。要解决这个问题,您可以使用旧的 SharePoint REST API's ensureUser
端点:
http://<sitecollection>/<site>/_api/web/ensureUser(logonName)
请记住,您还需要 SharePoint 的令牌才能调用此 API。如果您使用的是 AAD v1 终结点,这通常只是使用您的 SharePoint 资源 (https://{tenant}.sharepoint.com
) 刷新您的令牌以进行此调用,然后刷新回 Graph 资源 (https://graph.microsoft.com
) 的问题你的其他电话。