Совместное редактирование

Сведения о плагинах

Пользователи могут открыть одну Base и совместно редактировать таблицы, поля, записи и представления. Они могут работать в разных представлениях, изменяя один документ.

Шаги интеграции

  1. Следуйте разделу Интеграция совместного редактирования, чтобы запустить пример и подключить вход, права доступа и хранение в базе данных.
  2. Добавьте настройки клиента Collaboration в существующий редактор Bases. Настройте браузер по инструкции Быстрый старт совместного редактирования, но создавайте и сохраняйте документы Bases вместо копирования данных Sheets из примера.
  3. Создайте Base через серверную часть приложения и верните её ID браузеру.

Открытие Base с сервера

Задайте текущего пользователя до загрузки документа. См. раздел Интеграция совместного редактирования.

TypeScript
import '@univerjs-pro/bases/facade'import { UserManagerService } from '@univerjs/core'import '@univerjs-pro/collaboration-client/facade'univer.__getInjector().get(UserManagerService).setCurrentUser({ userID, name, avatar })const base = await univerAPI.getCollaboration().loadBaseAsync('your-base-id')if (!base) throw new Error('Base could not be loaded')

Повторно используйте ID при открытии или совместном доступе к документу. Не заменяйте загрузку с сервера вызовом createBase() и созданием пустого локального документа.

Используйте состояние, повторные отправки и восстановление конфликтов для индикации сохранения и защиты неподтверждённых изменений перед перезагрузкой.

Удаление встроенной загрузки совместных документов по URL

Обратите внимание

Начиная с версии 1.2.0, Univer больше не содержит встроенной логики загрузки совместных документов по URL. Параметры unit и type больше не считываются автоматически для загрузки совместного документа.

Если ваше приложение зависит от этого поведения, его можно восстановить с помощью собственного плагина.

Подключение собственного плагина

Скопируйте четыре файла ниже в проект, сохранив следующую структуру каталогов:

text
custom-url-load/├── plugin.ts├── controllers/│   └── data-loader.controller.ts└── services/    ├── url.service.ts    └── web-url.service.ts

После инициализации редактора и плагинов совместной работы задайте текущего пользователя, а затем зарегистрируйте CustomUrlLoadPlugin.

TypeScript
import { UserManagerService } from '@univerjs/core'import { CustomUrlLoadPlugin } from './custom-url-load/plugin'univer.__getInjector().get(UserManagerService).setCurrentUser({ userID, name, avatar })univer.registerPlugin(CustomUrlLoadPlugin)

После регистрации плагин сам загружает документ, поэтому вызывать loadBaseAsync() для того же документа не требуется. Если приложение уже загружает документы через Facade, можно сохранить подход из предыдущего раздела и обрабатывать URL в соответствии с требованиями приложения.

Полный код плагина

TypeScript
import { UniverCollaborationClientPlugin } from '@univerjs-pro/collaboration-client'import { DependentOn, Inject, Injector, Plugin } from '@univerjs/core'import { CollaborationDataLoaderController } from './controllers/data-loader.controller'import { IURLService } from './services/url.service'import { WebURLService } from './services/web-url.service'@DependentOn(UniverCollaborationClientPlugin)export class CustomUrlLoadPlugin extends Plugin {  static override pluginName = 'CUSTOM_URL_LOAD_PLUGIN'  constructor(    _config: undefined,    @Inject(Injector) protected override readonly _injector: Injector  ) {    super()  }  override onStarting(): void {    this._injector.add([IURLService, { useClass: WebURLService }])    this._injector.add([CollaborationDataLoaderController])    this.disposeWithMe(this._injector.get(IURLService))    this.disposeWithMe(this._injector.get(CollaborationDataLoaderController))  }}

Проверка синхронизации и сохранения

Откройте один ID в двух независимых сеансах браузера. В одном добавьте запись или измените поле и убедитесь, что другой получил изменение. Проверьте сохранность изменений после обновления страницы и перезапуска сервера.

Проверяйте доступ читателей и пользователей без разрешений на сервере. Локальные настройки только для чтения управляют лишь редактором. Преобразование файлов, комментарии и история требуют соответствующих серверных функций; см. Импорт и экспорт, Комментарии и История.

Насколько полезно это руководство?

© 2026 DreamNum Co., Ltd.