【问题标题】:Microsoft Graph API : Is it possible to traverse recursive over FoldersMicrosoft Graph API:是否可以递归遍历文件夹
【发布时间】:2018-02-14 14:58:12
【问题描述】:

我们正在从邮件 EWS 转换为 Microsoft office 365 Graph API,

我想将我的所有文件夹树扁平化到扁平文件夹列表中,因此列表中的每个条目都应包含:

Folder:{parentId, myId} , ...

我在测试版中看到有一个选项可以遍历:

https://graph.microsoft.com/beta/me/mailFolders/inbox?$top=50&$expand=childFolders($levels=5)

但不幸的是,我只获得了第一级...

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('4ed9f9bf-cfea-47de-ba2c-e4323d2dd600')/mailFolders/$entity",
    "id": "AQMkAGM5MDIzODk0LTg2NgBjLTQxN2EtOTNmMC0wYWY4M2VkMTg1MWEALgAAAxfTs4ItP_BBtfaokkhWqiMBAJ1RfNBJd7VOqHUq_F8aPdIAAAIBDQAAAA==",
    "displayName": "Inbox",
    "parentFolderId": "AQMkAGM5MDIzODk0LTg2NgBjLTQxN2EtOTNmMC0wYWY4M2VkMTg1MWEALgAAAxfTs4ItP_BBtfaokkhWqiMBAJ1RfNBJd7VOqHUq_F8aPdIAAAIBCQAAAA==",
    "childFolderCount": 1,
    "unreadItemCount": 307,
    "totalItemCount": 320,
    "wellKnownName": "inbox",
    "childFolders@odata.context": "https://graph.microsoft.com/beta/$metadata#users('4ed9f9bf-cfea-47de-ba2c-e4323d2dd600')/mailFolders('AQMkAGM5MDIzODk0LTg2NgBjLTQxN2EtOTNmMC0wYWY4M2VkMTg1MWEALgAAAxfTs4ItP_BBtfaokkhWqiMBAJ1RfNBJd7VOqHUq_F8aPdIAAAIBDQAAAA%3D%3D')/childFolders",
    "childFolders": [
        {
            "id": "AAMkAGM5MDIzODk0LTg2NmMtNDE3YS05M2YwLTBhZjgzZWQxODUxYQAuAAAAAAAX07OCLT-gQbX2qJJIVqojAQCdUXzQSXe1Tqh1KvhfGj3SAAOojCnvAAA=",
            "displayName": "LEVEL_1",
            "parentFolderId": "AQMkAGM5MDIzODk0LTg2NgBjLTQxN2EtOTNmMC0wYWY4M2VkMTg1MWEALgAAAxfTs4ItP_BBtfaokkhWqiMBAJ1RfNBJd7VOqHUq_F8aPdIAAAIBDQAAAA==",
            "childFolderCount": 1,
            "unreadItemCount": 0,
            "totalItemCount": 0,
            "wellKnownName": null
        }
    ]
}

是否有使用 O-Data 或其他遍历算法(如 EWS - 深度遍历)的良好 API,所以我可以减少我的其余 API 调用...

谢谢=]

【问题讨论】:

    标签: microsoft-graph-api office365api outlook-restapi


    【解决方案1】:

    Microsoft Graph API 中没有深层文件夹遍历调用。您将需要扩展每个级别。您可能需要为此打开一个feature request

    话虽如此,您可以使用batch feature 来减少为获取文件夹层次结构而必须进行的调用次数。只要文件夹层次结构不超过任何级别的 20 个文件夹(请参阅batch restrictions),您就可以进行一次批处理调用,以跨层次结构获取给定级别的所有文件夹。您需要在任何级别处理超过 20 个文件夹。

    关于执行此操作的算法,我还没有看到这种情况,因此您可能是使用批处理算法的 Microsoft Graph 深度文件夹遍历的创始人。

    【讨论】:

    • 感谢您的回复。它现在仍然相关吗?如果文件夹是在 2-3 级创建的,我可以跟踪根文件夹上的增量查询是否创建了新文件夹?
    • @DmytroSh。是的,深度文件夹遍历仍然不是一件事。如果您指的是邮箱根文件夹,Graph 不会授予对该文件夹的访问权限。如果您指的是消息子树中的下一级 default 文件夹,例如收件箱、已发送项目、草稿等,您可以使用 DQ,但我怀疑它会发现 deep 改变。我希望它能发现 childFolderCount 的变化。我强烈建议您对其进行测试,看看是否可行。
    • 链接是死亡
    • 链接已修复。链接就是生命。 @LucaZiegler
    【解决方案2】:

    我在similar post 中找到了这个答案,我认为这是在平面列表中递归检索所有邮件文件夹和子文件夹的最简单方法。

    是的,你可以。只需使用 delta 查询即可获取所有文件夹。

    请求示例:https://graph.microsoft.com/v1.0/users/[user_id]/mailfolders/delta?$select=displayname 您会得到一个包含所有文件夹的数组,其中子文件夹位于响应中的父文件夹项之后。

    测试: 转至:https://developer.microsoft.com/en-us/graph/graph-explorer 获取版本:v1.0 网址:https://graph.microsoft.com/v1.0/me/Mailfolders/delta 运行查询

    注意“Internal Screens”和“Project Falcon”文件夹,其 parentFolderId 为“Inbox”的 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多