跳到主要内容

Managing versions

处理文档历史事件时可以使用哪些方法?

可以使用 onRequestHistory 函数显示文档历史记录(使用 events.onRequestHistory 事件)。若未启用相关功能,ONLYOFFICE 文档界面将不会显示版本历史菜单选项(位于协作标签页的版本历史按钮)。

一旦在配置文件中调用此函数(连同 refreshHistory 方法),就会显示菜单选项和按钮,并且程序将显示现有文档版本。文档版本历史中显示的数据可以从文档编辑服务回调 中获取。

所以文档版本历史显示的实现应该是这样的:

  1. 回调处理程序从文档编辑服务接收到 status2 的响应中的数据(这意味着文档的所有用户都关闭了它并且当前版本已经编译)。此响应将如下所示:
const data = {
key: "2745492410",
status: 2,
users: ["F89d8069ba2b"],
url: "https://documentserver/url-to-edited-document.docx",
history: {
serverVersion,
changes,
},
}
  1. 回调处理程序解析接收到的数据并将其传递给配置文件(它不需要解析可供onRequestHistory函数使用的 history.serverVersionhistory.changes 数据)。

  2. 配置文件必须包含以下部分:events.onRequestHistoryonRequestHistory 函数本身:

    function onRequestHistory() {
    docEditor.refreshHistory({
    currentVersion: 2,
    history: [
    {
    created: "2019-02-01 3:03 PM",
    key: "2745492410",
    user: {
    id: "F89d8069ba2b",
    name: "Kate Cage",
    },
    version: 1,
    },
    {
    changes,
    created: "2010-07-07 3:46 PM",
    key: "Khirz6zTPdfd7",
    serverVersion,
    user: {
    id: "78e1e841",
    name: "John Smith",
    },
    version: 2,
    },
    ],
    })
    }

    const docEditor = new DocsAPI.DocEditor("placeholder", {
    events: {
    onRequestHistory,
    },
    })

    其中

    • currentVersion 是最新版本号,将作为当前版本显示在编辑器界面中;
    • history 是对象数组,每个对象代表一个文档保存的单个版本:
    • history.changeshistory.serverVersionhistory.serverVersion 是从文档编辑服务接收到的数据;
    • history.user.id 是最后一个为指定版本保存文档更改的用户的id;
    • history.created 是文档指定版本编译的时间(对应收到 status2 的时间);
    • history.version 是指定版本的编号,将显示在文档编辑器界面的版本历史记录部分。
  3. 使用指定的所有上述参数打开文档。切换到文件 > 版本历史 菜单选项(或 协作 > 版本历史),将显示版本数据。

history.changes 对象在版本中显示为较小的更改(修订)。

如何显示具有突出显示更改的文档?

文档编辑服务将文档的所有临时更改保存到单独的文件中,一旦编译版本并收到 status2,带有版本之间所有更改的存档链接也将发送到回调处理程序。

因此,如果您想额外显示版本之间的差异,您还必须使用 onRequestHistoryData 函数(用 events.onRequestHistoryData 事件),该函数必须包含文档编辑服务回调返回的数据。

除了 上述问题 中描述的操作外,您还需要:

  • 解析来自文档编辑服务收到的 status2的响应的 changesurl 参数:

    const config = {
    changesurl: "https://documentserver/url-to-changes.zip",
    key: "2745492410",
    status: 2,
    users: ["F89d8069ba2b"],
    url: "https://documentserver/url-to-edited-document.docx",
    history: {
    serverVersion,
    changes,
    },
    }
  • onRequestHistoryData 函数连同 setHistoryData 方法和 events.onRequestHistoryData 事件一起添加到配置文件中:

    function onRequestHistoryData(event) {
    const version = event.data
    docEditor.setHistoryData({
    changesUrl: "https://example.com/url-to-changes.zip",
    key: "2745492410",
    previous: {
    key: "af86C7e71Ca8",
    url: "https://example.com/url-to-the-previous-version-of-the-document.docx",
    },
    url: "https://documentserver/url-to-edited-document.docx",
    version,
    })
    }

    const docEditor = new DocsAPI.DocEditor("placeholder", {
    events: {
    onRequestHistoryData,
    },
    })

    包含指向当前文档版本 (url) 和先前文档版本 (previous.url) 的有效链接以及 ID(keyprevious.key)的对象必须传递给配置文件。 changesUrl 存档文件也必须可用并可从浏览器下载,才能显示更改。

为什么强制保存文档后,文档历史记录中未显示新版本?

ONLYOFFICE文档突出显示从当前文档会话开始时所做的更改,而不是从文档版本开始时所作的更改。即使在一个会话中创建了多个文档版本,此会话中的所有更改也将突出显示。因此您无法在文档历史记录中看到使用强制保存选项创建的文档版本。