You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选MS Graph查询的Planner任务并正确使用$top参数

问题根因
  • 你对$top参数的作用理解有偏差:这个参数仅用来指定单次接口响应返回的最大条目数,不会自动按创建时间排序,也不会自动做结果截断。另外MS Graph的OData参数严格区分大小写,你写的$Top首字母大写属于无效参数,接口识别不到就会走默认逻辑返回计划下的全部任务,这就是你传了参数没生效的直接原因。
  • 额外提一句:Planner任务列表接口目前不支持服务端$filter筛选,这是接口本身的能力限制,和你写的筛选语法对错没关系,别在这个方向浪费时间试错。
实现步骤

第一步:正确分页拉取全量任务

  1. 首次请求用正确的小写参数:
    https://graph.microsoft.com/v1.0/planner/plans/{替换成你的PlanID}/tasks?$top=50
    
    这里$top最大可以设到50,比20的分页大小拉取效率更高。
  2. 每次拿到接口响应后,检查返回体里有没有@odata.nextLink字段:如果有,就继续请求这个字段对应的地址,直到某次响应里没有这个字段,就说明已经拿全了该计划下的所有任务。

第二步:本地执行筛选

拿到完整任务列表后,直接在你的代码里按规则过滤即可,两个条件满足任意一条就保留:

  • 任务的createdDateTime字段值大于等于上月1号0点的UTC时间
  • 任务的percentComplete字段值小于100

时间比对注意统一时区:接口返回的createdDateTime是UTC标准时间,计算上月起始时间的时候也要转成UTC格式再比对,避免时差导致的筛选误差。

补充:如果需要按创建时间排序取最新任务

该接口同样不支持$orderby服务端排序,你可以在拿到任务列表后,本地按createdDateTime字段倒序排列,再截取你需要的前N条结果即可。

避坑提示
  • 所有MS Graph的OData查询参数($top/$filter/$orderby等)都是$加全小写参数名的格式,首字母大写的写法不会触发参数报错,但会被接口直接忽略,等于没传。
  • Planner系列接口的OData参数支持度很低,目前仅支持$select(指定返回字段)和正确格式的$top(分页),不要套用其他Graph接口的$filter、$search语法,试了也不会生效。

内容的提问来源于stack exchange,提问作者Moseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:36:27