공동 편집

Plugin 정보

사용자들이 같은 Base를 열고 테이블, 필드, 레코드, 뷰를 함께 편집할 수 있습니다. 서로 다른 뷰에서 작업하면서 같은 문서를 수정할 수 있습니다.

통합 절차

  1. 공동 편집 통합에 따라 예제를 실행하고 로그인, 권한, 데이터베이스 저장소를 연결하세요.
  2. 기존 Bases 편집기에 Collaboration Client 설정을 추가하세요. 브라우저 설정은 협업 빠른 시작을 참고하되, 예제의 Sheets 데이터를 복사하지 말고 Bases 문서를 생성하고 저장하세요.
  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 공동 편집 문서 로드 로직이 제거되었습니다. 더 이상 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.