使用 MS Graph API 和人员字段将新项目发布到 SharePoint 列表

Ron*_*ald 3 javascript sharepoint-online microsoft-graph-api

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

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

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

{
  "fields": {
    "Title": "a",
    "Category": "b",
    "Description": "c"
  }
}
Run Code Online (Sandbox Code Playgroud)

但如果我要添加“人员选择器”字段,我不知道如何构建该数据。我尝试过电子邮件地址和 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"
}
Run Code Online (Sandbox Code Playgroud)

复制此操作也无法更新列表中的“人员”字段。

我无法在 MS Graph API 网站上找到任何文档,也无法在他们的 Github 上找到类似的先前问题,所以任何帮助将不胜感激!

Mar*_*eur 6

您可以在以下文档中找到有关此内容的一些FieldValueSet信息:

Author默认情况下不返回查找字段(如上)。相反,服务器返回AuthorLookupId引用listItem查找中的目标的“LookupId”字段(如上)。“LookupId”字段的名称是原始字段名称后跟 LookupId。

实际上,这是 SharePoint 跟踪用户方式的副作用。作为历史产物,SharePoint 维护着自己的用户数据库。虽然在某个时间点 SP 管理员与这些用户有很多接触,但今天它是一个完全自动化的过程。SPUser它只是在第一次看到经过身份验证的 AAD 用户时创建一条新记录。这些用户记录有自己的id属性。这是一个 commonINT而不是 a GUID(在你的例子中,他们id12)。

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

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

{
  "fields": {
     "ManagerLookupId": [10,11,12]
  }
}
Run Code Online (Sandbox Code Playgroud)

问题在于,无法id从 Microsoft Graph 获取此 SharePoint 用户。显然,这使得创建/更新ListItem. 为了解决这个问题,您可以使用旧的SharePoint REST API 的ensureUser端点:

http://<sitecollection>/<site>/_api/web/ensureUser(logonName)
Run Code Online (Sandbox Code Playgroud)

请记住,您还需要 SharePoint 的令牌来调用此 API。如果您使用的是 AAD v1 端点,则通常只需使用 SharePoint 资源 ( https://{tenant}.sharepoint.com) 刷新此调用的令牌,然后刷新回图形资源 ( https://graph.microsoft.com) 进行其他调用即可。