使用 Graph API 查询 SharePoint 列表项并展开用户字段

Posted

技术标签:

【中文标题】使用 Graph API 查询 SharePoint 列表项并展开用户字段【英文标题】:Using Graph API to query SharePoint list items and expand user field 【发布时间】:2019-07-07 00:06:29 【问题描述】:

我正在尝试查询一些 SP 列表项,一切正常,但我似乎无法扩展 Person 类型的自定义列。

我可以看到 createdBylastModifiedBy 扩展,甚至包括 AAD 用户 ID,这很棒,也让我认为我想要的都是可能的!

但我的是自定义列。

我正在运行它,但似乎只能获取 SP 用户列表 ID 和用户的显示名称......这两者都没有多大用处。

/items?expand=fields(select=UserLookupId,User)

理想情况下,我希望根据 createdBy 和 modifiedBy 字段获取 AAD 用户 ID,但电子邮件就足够了。 否则我能看到的唯一方法是查询User Information List(使用UserLookupId)来获取电子邮件?

谢谢

【问题讨论】:

【参考方案1】:

这似乎是正确的假设:

否则我能看到的唯一方法就是查询用户信息列表 (使用 UserLookupId)来获取电子邮件?

对于非系统的用户字段,确实是一条路,但是用户字段是多值还是单-重视。 如果Approvers是多值用户字段,则查询如下:

https://graph.microsoft.com/v1.0/sites/site-id/lists/list-id/items?$expand=fields($select=Approvers)

返回emailid 属性以及用户字段值的displayName 属性。

而对于单值用户字段 id(可通过userfieldLookupId 属性获得)和displayName 属性可以通过items endpoint 请求,对于示例:

https://graph.microsoft.com/v1.0/sites/site-id/lists/list-id/items?$expand=fields($select=Approver,ApproverLookupId)

所以,确实需要使用User Information List 来请求其他用户属性,例如:

https://graph.microsoft.com/v1.0/sites/root/lists('User Information List')/items/item-id/?$expand=fields($select=Email)

其中item-id 对应于用户字段查找id

【讨论】:

好的,谢谢。已经有一段时间了,没有人带来更好的东西。所以我会接受并继续这样做,希望以后会有所改善!【参考方案2】:

这是我修改 Build Angular single-page apps with Microsoft Graph。在下面的示例中,我使用默认文本更改了我的 id。

这里是 The Finished Project on thier github

Graph Explorer 中,这工作。您可以在Microsoft Graph Explorer 进行验证。

https://graph.microsoft.com/v1.0/sites/site-id/lists/list-id/items?expand=fields($select=id,Title)

在应用程序的 app/graph.service.ts 中,这不起作用。即使您希望它基于图形浏览器。

.api('/sites/site-id/lists/list-id/items?fields($select=id,Title)')

更改 app/graph.service.ts api 调用工作

.api('/sites/site-id/lists/list-id/items?')
.expand('fields($select=id,Title)')

结果如下所示:

fields: 
    @odata.etag: ""d6f5b6ea-9f90-452d-98ba-e838f58d3359,1"", 
    Title: "IT SPECIALIST (MID)", 
    id: "20"

这是一个示例站点 ID:

some.sharepoint.com,9dk062b-2e54-4e4f-b71a-cdb74f42cc44,c6cf6b0a-cc7c-41fd-a76a-ef8f97e8a22f

这是一个示例列表 ID。

8eg8c29a-5555-4cfc-bfa4-0e907488f781

结束 url 中不会有任何 。

【讨论】:

我使用相同的 ?expand=fields(select=id,Title) 并得到 ""error": "code": "-1, Microsoft.SharePoint.Client.InvalidClientQueryException", "message ": "表达式 \"fields(select\" 无效。"," Graph 有什么变化吗?

以上是关于使用 Graph API 查询 SharePoint 列表项并展开用户字段的主要内容,如果未能解决你的问题,请参考以下文章

向 Facebook 查询正在使用/可以使用的 Graph API 版本

Office Graph API 和查询 Office Graph 之间的区别

使用 Graph API 查询 SharePoint 列表项并展开用户字段

Facebook Graph API OAuthException [关闭]

如何使用 Graph API 获取未读消息?

使用 GRAPH API 2.3 访问用户朋友的工作历史