如何在Power Automate的SharePoint GetItems中使用ODATA的skip和top参数
错误原因说明
$skip属于OData协议的分页参数,不是SharePoint列表的自有字段,不能填写在Filter Query配置项中。该配置项仅用于对列表自带/自定义字段做过滤匹配,因此系统会抛出「skip列不存在」的报错。- 直接将单次返回条目上限设置为过大数值,会触发SharePoint默认的5000条列表视图阈值限制,这是SharePoint的官方规则,无法通过调整单次返回条数直接绕过。
分批拉取全量数据的实现方案
推荐使用列表自带的自增ID字段作为分页依据,ID字段为SharePoint默认加了索引的字段,用它做过滤条件不会触发视图阈值,每批拉350条的操作步骤如下:
- 提前初始化两个变量:
last_id:整数类型,初始值设为0,用来记录上一批次最后一条数据的IDall_items:数组类型,初始值设为空,用来存储所有拉取到的条目
- 添加Do until循环,循环终止条件设置为
length(outputs('Get_items')?['body/value']) < 350,即当次拉取的条目数不足350时,说明已经拉完所有数据 - 在循环内部添加Get items操作,配置如下:
- 「Top Count」项填写350,即单次最多拉350条
- Filter Query项填写
ID gt @{variables('last_id')},代表只拉取ID大于上一批次最后ID的条目 - 「Order By」项填写
ID asc,必须设置按ID升序排列,保证每次拉取的都是连续的递增数据
- 在Get items操作后添加Apply to each循环,遍历当前批次拉到的所有条目,逐个追加到
all_items数组中 - 追加完成后更新
last_id变量,值设置为当前批次最后一条条目的ID:outputs('Get_items')?['body/value']?[sub(length(outputs('Get_items')?['body/value']),1)]?['ID'] - Do until循环完全结束后,
all_items数组就是全量的列表条目,直接转换为JSON格式即可输出使用。
轻量替代方案(仅适用列表总条数≤10万的场景)
如果不想手动编写分页逻辑,可以直接开启Get items操作的内置分页功能,系统会自动完成分批拉取:
- 点击Get items操作右上角的三个点,选择「设置」
- 打开「分页」开关,在阈值输入框中填写列表的实际总条数(最大支持10万)
- 保存设置后运行流即可,不需要额外配置分页逻辑。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

