共同编辑

参考图和以下步骤说明了在 ONLYOFFICE 文档服务器中共同编辑文档的过程。

共同编辑
  1. 用户 1 和用户 2 在 文档编辑器中打开了一个相同的文档,即打开文件时使用了相同的 document.key
  2. 用户 1 对打开的文档进行更改。
  3. 文档编辑器 将用户 1 所做的更改发送到 文档编辑服务
  4. 文档编辑服务 将用户 1 所做的更改发送给用户 2 文档编辑器
  5. 现在这些更改对用户 2 可见。
共同编辑
  1. 创建一个空的 html 文件。
  2. 添加 div 元素,如下所示。
    <div id="placeholder"></div>
  3. 使用将用于您的网站的 JavaScript API来指定您的 ONLYOFFICE 文档服务器链接。
    <script type="text/javascript" src="https://documentserver/web-apps/apps/api/documents/api.js"></script>
    其中 documentserver 是安装了 ONLYOFFICE 文档服务器的服务器的名称。
  4. 添加脚本指定你想打开的文档,为 div 元素初始化 文档编辑器。 Be sure to add a token when using local links. Otherwise, an error will occur.
    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document Title.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "user": {
                "id": "78e1e841",
                "name": "John Smith"
            }
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50IFRpdGxlLmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJ1c2VyIjp7ImlkIjoiNzhlMWU4NDEiLCJuYW1lIjoiSm9obiBTbWl0aCJ9fX0.6AcBUCbys9kQ7S982Qm4w1romVg86kZ4ECNsxDff5zU"
    });
    
    其中 example.com 是安装了 文档管理器文档存储服务 的服务器的名称。
  5. 在浏览器中打开您的 html 文件。
  6. 现在复制上面创建的 html 文件。
  7. 在复制的 html 文件中更改初始化 文档编辑器 的脚本。
    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document Title.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "user": {
                "id": "F89d8069ba2b",
                "name": "Kate Cage"
            }
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50IFRpdGxlLmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJ1c2VyIjp7ImlkIjoiRjg5ZDgwNjliYTJiIiwibmFtZSI6IkthdGUgQ2FnZSJ9fX0.rdmhKLzXwXXVTABioKy3R2-HGMBY5u4pbZ_TVhW2rJs"
    });
    
    其中 example.com 是安装了 文档管理器文档存储服务 的服务器的名称。
  8. 在浏览器中打开您复制和编辑的 html 文件。

为了打开文档进行编辑,配置初始化需要 key 参数,它允许用户从编辑器缓存中重新打开文档。 key是一个文本字段,它具有有限长度和多个符号。 它由软件集成商生成,并定义了唯一的文档标识符,服务用它来识别文档。

key可以使用的字符是:0-9, a-z, A-Z, -._=. key最大长度为128个 字符。

因此,用户必须拥有相同的key才能打开文档进行共同编辑。 文档编辑服务 识别试图打开文档的另一个用户(或 内联编辑器的另一个标签/编辑会话)的key,如果该key与文件的key匹配,则允许用户打开它。 如果key不同,则打开一个与其他文件和文件版本无关的新文件。

一旦发送保存文件的请求( status 值等于 2)并且操作完成(响应值等于 {"error":0}),则无法使用该key打开文档用于编辑。 编辑器加载了一条 错误消息。 但是,它可以用于从缓存中查看文档(如果存在)。

如果用户在编辑完成之前保存文档( status 等于 6),则不能更改key。 否则,共同编辑将停止。 请注意,在强制保存过程之后,对于刚刚进入当前编辑会话的新用户,也无法更改key。

  1. 添加脚本,用 key 1初始化文档编辑器。 key未知,打开文件的 URL 已指定。

    Be sure to add a token when using local links. Otherwise, an error will occur.

    关闭文档编辑器

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifX0.GcpcY8sLCUDqbgqCLvPs6Z0xfBtayOy-GHEXYiZCpfs",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  2. 添加脚本,使用相同 key 1初始化 文档编辑器。 未使用新 URL,因为key是已知的,并且文档已从编辑器缓存中重新打开。

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document 2.docx",
            "url": "https://example.com/url-to-example-document2.docx"
        },
        "documentType": "word",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50IDIuZG9jeCIsInVybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXJsLXRvLWV4YW1wbGUtZG9jdW1lbnQyLmRvY3gifX0.aegFVaZpkqc5bEYmF-PQYf3MMFg7QvAfWeOnfDJeuTg",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  3. 添加脚本,使用 key 2初始化另一个 文档编辑器 key未知, 打开文件的 URL 已指定。 即使这个 URL 和第一个场景中的 URL 相同,也有两个独立的编辑会话。

    关闭文档编辑器

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Mgetl3dYUppf2",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJNZ2V0bDNkWVVwcGYyIiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCJ9.5YvlbNVbXFddzKBdz_qPpqgUX_JrUHBWCGRQ5YgVp_w",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  4. 添加脚本,使用 key 1初始化另一个 文档编辑器。 这个key是已知的,文档从编辑器缓存中重新打开。 由于这个key与第二个场景中的key相同,因此以共同编辑模式打开文档。

    在不关闭文档的情况下获取当前文档状态。 forcesave 参数允许您在编辑器初始化的自定义部分中执行此操作。

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "customization": {
                "forcesave": true 
            }
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJjdXN0b21pemF0aW9uIjp7ImZvcmNlc2F2ZSI6dHJ1ZX19fQ.dlIJqq6tH9ncQmXQV-gCi4Zc7sqYhGS5RwvpiIZGZXA",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  5. 添加脚本,初始化另一个 文档编辑器force saving成功后,当前编辑会话的新用户不会更改key。 因此, 必须使用 key 1,以便和来自第二和第四个场景的用户进入相同的共同编辑会话。

    使用 key 1关闭所有三个编辑会话。 所有更改均已成功保存。 保存文档后,必须重新生成key。

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "callbackUrl": "https://example.com/url-to-callback.ashx"
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJjYWxsYmFja1VybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXJsLXRvLWNhbGxiYWNrLmFzaHgifX0.L53bCRlJyvIf-C7bcKYM2WMfmk4FeZIoeDaEpc5IxXA",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  6. 添加脚本,初始化 文档编辑器,以便查看已经创建的文档。 可以使用Key 1

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "mode": "view"
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJtb2RlIjoidmlldyJ9fQ.wpEk-zrrGq5hKHCm6sAhl_tb51n56th-q-K52Oeq1a4",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

  7. 添加脚本,初始化 文档编辑器,以便编辑已经创建的文档。 Key 1 无法使用,因为它在文件保存后已更改。 发生 错误

    关闭文档编辑器

    new DocsAPI.DocEditor("placeholder", {
        "document": {
            "fileType": "docx",
            "key": "Khirz6zTPdfd7",
            "title": "Example Document.docx",
            "url": "https://example.com/url-to-example-document.docx"
        },
        "documentType": "word",
        "editorConfig": {
            "mode": "edit"
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb2N1bWVudCI6eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidGl0bGUiOiJFeGFtcGxlIERvY3VtZW50LmRvY3giLCJ1cmwiOiJodHRwczovL2V4YW1wbGUuY29tL3VybC10by1leGFtcGxlLWRvY3VtZW50LmRvY3gifSwiZG9jdW1lbnRUeXBlIjoid29yZCIsImVkaXRvckNvbmZpZyI6eyJtb2RlIjoiZWRpdCJ9fQ.rSc0yYe3_2u7N_uaxZcDQ6vC_d5ZWU5LFkkGSow5UDY",
        ...
    });
    

    其中example.com是安装了文档管理器文档存储服务的服务器的名称。

有两种模式可以实时协作文档 — 自动手动

您可以使用editorConfig.coEditing参数更改协同编辑模式

var docEditor = new DocsAPI.DocEditor("placeholder", {
    "editorConfig": {
        "coEditing": {
            "mode": "fast",
            "change": true
        },
        ...
    },
    ...
});

默认情况下使用自动模式,并定义实时协同编辑。所有更改都会自动保存,无法重做上次撤消的操作。此模式在用户编辑文本时显示用户光标和工具提示及其名称

自动模式

手动模式下,您需要使用保存按钮来同步您和其他用户所做的更改。在您单击此按钮之前,其他人所做的更改将被隐藏。当多个用户同时编辑一个文档时,编辑的文本用不同颜色的虚线标记。

当用户通过单击保存按钮保存更改时,其他用户将收到有关更新的注释。 要接受它们并保存您自己的更改以显示给其他用户,请单击保存更新。按钮 位于顶部工具栏的左上角。更新将突出显示。

手动模式