You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无需指定用户ID或用户主体名称,通过Microsoft Graph查询OneDrive所有用户文件夹及全域搜索文件的方法咨询

无需指定用户ID或用户主体名称,通过Microsoft Graph查询OneDrive所有用户文件夹及全域搜索文件的方法咨询

你遇到的这个问题我之前也帮别人梳理过——用/search/query接口默认只能搜到SharePoint站点的内容,没法覆盖个人OneDrive的文件,这就是你能找到Test File 1、2却搜不到Test File 3的核心原因。别着急,咱们来一步步解决:

为什么默认搜不到个人OneDrive?

默认情况下,Microsoft Graph的search/query接口在搜索driveItem类型时,仅包含SharePoint站点的文档库内容,个人OneDrive的文件不在默认搜索范围内,所以你的请求只能命中站点共享文件夹里的文件。

解决方案:调整搜索请求参数,纳入个人OneDrive内容

你只需要在search/query的请求payload里添加contentSources参数,明确指定要包含OneDriveBusiness这个来源,就能覆盖所有用户的个人OneDrive了。修改后的请求体如下:

{
  "requests": [
    {
      "entityTypes": [
        "driveItem"
      ],
      "query": {
        "queryString": "${(event.payload.request.email)!}"
      },
      "region": "US",
      "contentSources": [
        "SharePoint",
        "OneDriveBusiness"
      ]
    }
  ]
}

几个关键注意事项

  • 权限要求:调用接口的应用必须拥有Files.Read.All(应用权限,而非委托权限),这样才能访问所有用户的OneDrive内容;如果用委托权限,只能访问当前登录用户的OneDrive,没法实现“广撒网”的需求。
  • 搜索效果验证:添加contentSources后再测试,就能同时搜到SharePoint站点和所有用户个人OneDrive里的匹配文件,包括你的Test File 3。
  • 性能优化建议:如果公司用户量较大,全域搜索可能会变慢,你可以考虑添加筛选条件(比如限定文件类型、创建时间范围)来缩小搜索范围,提升查询效率。

另外还有个备选思路:先通过/users接口获取所有用户列表,再遍历每个用户调用/users/{userPrincipalName}/drive/root/search接口,但这种方法效率低,还容易触发API调用限制,所以更推荐第一种修改search/query参数的方案。

备注:内容来源于stack exchange,提问作者RobR2015

火山引擎 最新活动