从OneDrive下载:如何知道在线编辑器是否完成

时间:2018-10-04 11:23:16

标签: office365 onedrive ms-wopi

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

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

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

有人尝试过吗:在线编辑后下载文件?
在这篇文章中提及Ryan Gregg,是因为他被邀请在有关OneDrive API的Ignite会话中提问;-)

非常感谢您对此提供的帮助,
卡斯珀

修改

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

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

NB:我们自己实现WOPI确实可行,我们也尝试过。但是,如下所示,这需要与存储合作伙伴不同的工作流程。

1 个答案:

答案 0 :(得分:0)

除非您已经实际注册为Microsoft存储合作伙伴并开发了自己的WOPI主机,否则我认为您不会获得WOPI锁定/解锁事件,您实际上在其中使用了其他WOPI REST端点来实现Lock端点,从而使您能够编辑在线功能例如CheckFileInfo,GetFile和PutFile ...在这种情况下,您可以通过自己的WOPI主机应用程序收听解锁事件并在其他地方触发其他事件。尽管这是可能的,但我不建议您这样做。另外,如果您已经启动并运行WOPI,则可以执行此上传和下载工作流程,并将文件写入自己的存储中。

其他几种选择:

  1. Use the Microsoft Graph API to get change notifications不是 确定这是否是您所说的webhooks,但似乎您可以订阅不同的事件,例如电子邮件和OneDrive,并接收通知,可以根据需要进行跟踪和处理。
  2. 如果1.由于某种原因无法运行,而不是某种每30秒运行一次的自定义计划的应用程序(因为所有内容都是异步的并且不会立即发生保存持久性),则跟踪OneDrive fileId和TimeLastModified 并将存储在某个位置(数据库或类似位置)的先前状态与OneDrive REST的当前响应进行比较 API。不是用于生产的体系结构,而是可以用作概念证明。