javascript - 使用带有人员字段的 MS Graph API 将新项目发布到 SharePoint 列表

标签 javascript microsoft-graph-api sharepoint-online

我已经使用来自 SharePoint Online 的 Microsoft Graph 设置了一个使用数据的 React Web 应用程序,该应用程序运行良好。我可以读取和写入 SP 列表,但我找不到任何关于如何构建数据以写入“人员/组”字段的文档。

查询包含这些字段的列表会得到 "ManagerLookupId": "12",其中 Manager 是人员选取器字段名称。我可以使用扩展查询字符串解析 "12"。我不知道如何使用 Microsoft Graph 的 /v1.0/beta 端点写入它

将此对象发布到相关端点有效(用于单行文本、选择等)。

{
  "fields": {
    "Title": "a",
    "Category": "b",
    "Description": "c"
  }
}

但如果我要在人员选择器字段中添加,我不知道如何构建该数据。我试过电子邮件地址和 GUID,两者都不起作用。查看 SP native 如何执行此操作,它似乎在为人员选择器字段提交时提交此值(已替换实际值)-

{
  "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 上找到类似的先前问题,因此非常感谢任何帮助!

最佳答案

您可以在 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 跟踪用户方式的副作用。作为历史的产物,SharePoint 维护着它自己的用户数据库。虽然在某个时间点 SP 管理员与这些用户有很多接触,但今天它是一个完全自动化的过程。它只是在第一次看到经过身份验证的 AAD 用户时创建一个新的 SPUser 记录。这些用户记录有自己的 id 属性。这是一个常见的 INT 而不是 GUID(在您的示例中,它们的 id12)。

当您更新 ListItem 时,您需要使用 SharePoint 的 id。您可以将其作为单个值或数组传递:

{
  "fields": {
     "ManagerLookupId": 12
  }
}

{
  "fields": {
     "ManagerLookupId": [10,11,12]
  }
}

问题就在这里,无法从 Microsoft Graph 获取此 SharePoint 用户 id。显然,这使得创建/更新 ListItem 变得非常具有挑战性。要解决这个问题,您可以使用旧的 SharePoint REST API's ensureUser终点:

http://<sitecollection>/<site>/_api/web/ensureUser(logonName)

请记住,您还需要 SharePoint 的 token 才能调用此 API。如果您使用的是 AAD v1 端点,这通常只是使用您的 SharePoint 资源 (https://{tenant}.sharepoint.com) 刷新您的 token 以进行此调用然后刷新的问题返回到 Graph 资源 (https://graph.microsoft.com) 以进行其他调用。

关于javascript - 使用带有人员字段的 MS Graph API 将新项目发布到 SharePoint 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415461/

相关文章:

javascript - 如何使用本地存储记住复选框是否已选中或未选中(单击时)并保存值?

javascript - 停止从方法调用的 ajax 请求 (ES6)

javascript - 如何使用 redux-observable 正确获取二进制图像?

azure - SharePoint API,2022 年使用哪个?

javascript - 抑制表单重新提交对话框

php - 当元素是表单的一部分时,document.getElementById 返回 null

java - 微软图形API : A question about IDriveItemCollectionPage

microsoft-graph-api - 使用 Microsoft Graph 从 session ID 获取第一封电子邮件

sharepoint - 无法从 Azure AD 导入的用户获取用户属性

java - 使用 JAVA 中的 REST API 在线上传文件到 Sharepoint