1

我有一个工作流程,我将 Office 文件上传到 OneDrive,在 Office Online 编辑器中打开它,然后在关闭编辑器后再次下载文件。(这是一个教育场景,学生在平板电脑上工作,他们必须“交出”他们的文件。)

我的问题:我怎么知道在线编辑器已关闭,和/或 OneDrive 中的所有更新都可用?

我尝试过 Sharepoint API、MS Graph API、根文件夹增量、Webhooks:它们都告诉我有关文件更改和 TimeLastModified 的信息。
不幸的是,如果您在 Office Online 编辑器中的 OneDrive 中打开一个大型 Office 文档,进行更改,然后关闭编辑器,则可能需要一分钟时间才能更新 OneDrive。通常第一次更新在 6 秒内,但有时会发生第二次更新(似乎与在线编辑器中的 30 秒“自动保存”计时器有关)。
我有一种感觉,Sharepoint“知道”的比它说的要多。在线编辑器使用 WOPI,据说 WOPI 在打开和关闭编辑器时会调用 lock/unlock。但是如何访问此信息..

有没有人试过这个:在线编辑后下载你的文件?
在这篇文章中提到 Ryan Gregg 是因为他受邀在 OneDrive API 的 Ignite 会话中提问;-)

非常感谢您提供的任何帮助,
Casper

编辑

正如 dalibor 建议的那样,我确实尝试了 Graph 更改通知(我认为它们曾经被称为 webhook),并轮询 TimeLastModified。两者都有效,但我的主要问题是我看不到“文件已更改”通知是否是最后一个通知,或者“关闭我的在线编辑器”操作是否会导致更多保存。

同时,我在 Sharepoint 文件 ( https://msdn.microsoft.com/en-us/library/office/jj247073.aspx ) 上尝试了 LockedByUser 属性。这个属性有点难以阅读(在 MSGraph 中尚不可用,Sharepoint API 似乎需要直接用户/密码登录)。但它确实表明在线编辑器是否打开。但是,如果您关闭在线编辑器,LockedByUser 属性会立即被清除,但最终保存仍可在以后进行。或者根本没有最终保存,如果没有任何改变。因此,在线编辑停止后,我们仍然无法确定文件何时更新。

注意:自己实施 WOPI 确实有效,我们也尝试过。但正如下面所建议的,这需要不同的工作流程作为存储合作伙伴。

4

1 回答 1

0

我认为您无法获得 WOPI 锁定/解锁事件,除非您已实际注册为 microsoft 存储合作伙伴并开发了您自己的 WOPI 主机,在该主机上您实际实现了 Lock 端点以及其他 WOPI REST 端点,这些端点为您提供在线编辑功能,如 CheckFileInfo, GetFile 和 PutFile... 在这种情况下,您可以从您自己的 WOPI 主机应用程序中侦听解锁事件并在其他地方触发其他事件。虽然这是可能的,但我不会推荐它。此外,如果您启动并运行了 WOPI,它已经为您完成了上传和下载以及将文件写入您自己的存储的工作流程。

其他几种选择:

  1. 使用 Microsoft Graph API 获取更改通知,不确定这是否是您所指的 webhook,但您似乎可以订阅不同的事件,如电子邮件和 OneDrive,并接收您可以根据需要跟踪和处理的通知。
  2. 如果 1. 由于某种原因比某种每 30 秒运行一次的自定义计划应用程序不起作用(因为一切都是异步的并且保存持久性不会立即发生)跟踪 OneDrive fileId 和 TimeLastModified 并比较您存储在某处的先前状态(数据库或类似的)与来自 OneDrive REST API 的当前响应。不是用于生产的架构,但它可以作为概念证明。
于 2018-11-23T11:19:58.713 回答