# Base 快照

- Human documentation: [https://docs.univer.ai/zh-TW/guides/bases/model/base-snapshot](https://docs.univer.ai/zh-TW/guides/bases/model/base-snapshot)

- Agent Markdown: [https://docs.univer.ai/zh-TW/guides/bases/model/base-snapshot.md](https://docs.univer.ai/zh-TW/guides/bases/model/base-snapshot.md)

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

- Source: [bases/model/base-snapshot.zh-TW.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/model/base-snapshot.zh-TW.mdx)

---

## IBaseSnapshot

`IBaseSnapshot` 是 Univer Bases 使用的持久化格式。它描述一個 Base 單元，其中包含資料表、資料表順序、結構描述版本、時間戳記，以及選用的修訂中繼資料。

### 屬性

| 屬性            | 類型                                 | 說明                |
| ------------- | ---------------------------------- | ----------------- |
| id            | `string`                           | Base 單元的唯一 ID。    |
| name          | `string`                           | Base 名稱。          |
| schemaVersion | `number`                           | 快照結構描述版本。         |
| tables        | `Record\<string, ITableSnapshot\>` | 以資料表 ID 為鍵的資料表。   |
| tableOrder    | `string[]`                         | 依序排列的資料表 ID 清單。   |
| createdAt     | `number`                           | 建立時間戳記。           |
| updatedAt     | `number`                           | 更新時間戳記。           |
| createdBy?    | `string`                           | 建立者 ID。           |
| rev?          | `number`                           | 供持久化或協作層使用的選用修訂值。 |

## 最小快照

```ts
const baseSnapshot = {
  id: 'base-1',
  name: 'Product tracker',
  schemaVersion: 1,
  tableOrder: ['tasks'],
  tables: {
    tasks: {
      id: 'tasks',
      name: 'Tasks',
      primaryFieldId: 'title',
      fieldOrder: ['title', 'status'],
      fields: {
        title: { id: 'title', name: 'Title', type: 'text', config: {} },
        status: { id: 'status', name: 'Status', type: 'singleSelect', config: {} },
      },
      recordOrder: ['rec-1'],
      records: {
        'rec-1': {
          id: 'rec-1',
          values: { title: 'Write docs', status: 'In progress' },
          orderKey: 'a0',
          createdAt: Date.now(),
          updatedAt: Date.now(),
        },
      },
      views: {},
      viewOrder: [],
    },
  },
  createdAt: Date.now(),
  updatedAt: Date.now(),
}
```

## 用途

`IBaseSnapshot` 主要用於：

1. 建立 `UniverInstanceType.UNIVER_BASE` 單元。
2. 持久化及還原結構化資料。
3. 準備要在伺服器端處理的資料。
4. 在協作服務與匯入／匯出服務之間傳輸資料。

> [!WARNING]
> 快照物件是持久化資料。Base 開始執行後，請優先使用 Facade API，不要直接修改快照物件。

## 儲存與還原

透過 Facade `save()` 保留已註冊外掛的資源，例如儀表盤與本機評論。`saveToBackend` 是你的持久化函式。

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')
await saveToBackend(base.save())
```

在新編輯器中先註冊相同外掛，再呼叫 `univerAPI.createBase(savedSnapshot)`。不要只儲存 `tables` 或直接修改執行中的模型快照。
