能否通过Graph API获取SharePoint列表项的已审批版本?
首先直接给出结论:目前Graph API没有原生支持一次性拉取列表所有项已审批版本的端点或筛选逻辑,你当前使用的/items/${itemId}/versions?expand=fields是获取单条项版本的唯一官方方式,但可以通过批量请求优化,减少重复HTTP调用的开销。
可行的优化方案
使用Graph API批量请求(Batch Requests)
把多个单条项的版本查询打包成一个HTTP请求发送,避免逐个发起请求。比如构造包含多个目标项版本查询的批量请求,同时在每个请求里直接过滤已审批版本($filter=fields/_ModerationStatus eq 0),一次请求就能获取多个项的符合要求的版本数据。
简化版批量请求结构示例:{ "requests": [ { "id": "1", "method": "GET", "url": "/sites/{site-id}/lists/{list-id}/items/1/versions?expand=fields&$filter=fields/_ModerationStatus eq 0" }, { "id": "2", "method": "GET", "url": "/sites/{site-id}/lists/{list-id}/items/2/versions?expand=fields&$filter=fields/_ModerationStatus eq 0" } ] }注意:每个批量请求最多包含20个独立请求,超过上限需要拆分多批发送。
先筛选目标项再批量查询
先通过/sites/{site-id}/lists/{list-id}/items?$filter=fields/_ModerationStatus eq 0 or fields/_ModerationStatus eq 2(请根据你实际的待审批状态值调整eq 2部分),获取所有当前状态为已审批或待审批的项,再针对这些项的ID发起批量版本查询,避免无意义地查询没有版本变更的项。
额外说明
如果你的场景对效率要求极高,也可以考虑使用SharePoint原生REST API的/_api/web/lists/getbytitle('ListName')/items?$expand=Versions端点,但该方案不属于Graph API范畴,且同样需要自行处理版本过滤逻辑;若必须使用Graph API,批量请求仍是最实用的优化方式。
内容的提问来源于stack exchange,提问作者PCasagrande

