【问题标题】:How to trigger OneDrive/OneNote syncing programmatically?如何以编程方式触发 OneDrive/OneNote 同步?
【发布时间】:2019-04-20 08:24:20
【问题描述】:

用于以编程方式控制 OneNote 的 Graph API 是一种 Web 服务,它会影响用户 OneNote 笔记本的某些基于云的表示。因此,要影响我的 OneNote Windows 10 桌面应用程序的状态,Windows 10 应用程序必须与相应的基于云的表示同步。

如果当前正在更改本地笔记本上的内容,OneNote Windows 10 会非常定期地与云表示同步,但同步仍然会不定期地发生并且远非实时(至少相对于 Graph API),尤其是如果用户正在等待或空闲。

为了使任何 交互式 OneNote 附加组件与 Graph API,我的开发人员需要一个替代方案。要么必须不断地与云同步,要么在我使用图形 API 进行一系列笔记本更改后,必须可以在本地触发同步。

有没有办法做到这一点?我什至会接受相对老套的选项。如果不是,我觉得这是 Graph API 服务的一个巨大限制,严重阻碍了作为使用 Microsoft 产品的 3rd 方开发人员参与的能力。

【问题讨论】:

    标签: microsoft-graph-api onedrive onenote


    【解决方案1】:

    OneDrive 并不总是立即删除客户端 PC 上 OneDrive 文件夹中以编程方式删除的文件。这似乎是一个同步问题。在网络上,有很多解决此问题的建议,但所有这些解决方案都建议手动重新同步 OneDrive。这在我的情况下是不可接受的,因为这必须通过我的 C++ 应用程序以编程方式完成。

    经过大量(愚蠢的)研究/试验/错误(尤其是手动更改 OneDrive 设置),我发现的唯一解决方案非常简单(而且愚蠢):将我的 C++ 代码更新为:

    1. 删除 OneDrive 文件夹中的文件

    2. 检查 OneDrive 文件夹中是否存在虚拟文件;该文件的名称等于用户机器的主机名,因此虚拟文件的数量与用户在他们的机器上使用我的应用程序的数量一样多。就我而言,虚拟文件​​只是显示删除日期的日志

    3. 如果虚拟文件存在,读取其内容并删除虚拟文件。

    4. 在这一步,虚拟文件​​现在不存在于 OneDrive 文件夹中!使用在步骤 3 中读取的先前数据创建虚拟文件,并向其附加一些其他文本(此新创建的文件将具有不同的创建日期,因此 OneDrive 将看到此所需的同步)

    执行第1步后,文件的删除在其他机器上没有同步。 执行完步骤2-4后,文件删除成功,立即同步!

    为了验证问题是否真的是 OneDrive 同步问题,我设置了一个在机器之间共享的文件夹。在这种情况下,在第 1 步之后,立即同步删除,不需要第 2 步来同步删除。

    我在 Windows 和 Mac 上测试了我的解决方案,它工作正常!

    【讨论】:

      【解决方案2】:

      我发现,虽然 OneNote for Windows 10 没有持续的云同步,但 OneNote 2016 有:当我使用 Graph API 对笔记本进行更改时,更新会很快发送到我在 OneNote 2016 上的笔记本,即使在空闲时。奇怪的是,Graph API 似乎比新程序更适合旧程序设计!我会坚持使用那个,并希望新 OneNote 背后的人最终能够实现与他们正在淘汰的应用程序相媲美的应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-15
        • 2014-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        相关资源
        最近更新 更多