# Univer Bases API

> 瞭解如何在 Univer Bases 應用程式中使用 Facade API。

- Human documentation: [https://docs.univer.ai/zh-TW/guides/bases/features/core/bases-api](https://docs.univer.ai/zh-TW/guides/bases/features/core/bases-api)

- Agent Markdown: [https://docs.univer.ai/zh-TW/guides/bases/features/core/bases-api.md](https://docs.univer.ai/zh-TW/guides/bases/features/core/bases-api.md)

- Requested language: `zh-TW`

- Content language: `zh-TW`

- Documentation version: `1.2.0`

- Source: [bases/features/core/bases-api.zh-TW.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/features/core/bases-api.zh-TW.mdx)

---

Facade API 在 Bases 模型之上提供應用程式導向的介面層，可用於建立 Base、資料表、欄位、記錄、檢視、篩選、排序、群組與選取範圍，以及操作 UI 導覽等常見工作。

> [!WARNING: 注意]
> Base 模型變更是同步的；UI 啟用方法會回傳 Promise，需要使用 `await`。

## 啟用 Facade 進入點

請為應用程式使用的每項 Bases 功能匯入對應的 Facade 進入點：

```ts
import { FUniver } from '@univerjs/core/facade'
import '@univerjs-pro/bases/facade'
import '@univerjs-pro/bases-ui/facade'
```

註冊 Univer 執行個體與必要的外掛程式後，再建立 API 物件：

```ts
const univerAPI = FUniver.newAPI(univer)
```

## 建立及讀取 Base

使用 `createBase` 透過 Facade 層建立 Base 單元。在較低階的設定程式碼中，請使用 `univer.createUnit(UniverInstanceType.UNIVER_BASE, snapshot)` 建立單元。

```ts
const base = univerAPI.createBase({
  id: 'base-demo',
  name: 'Base Demo',
})

const activeBase = univerAPI.getActiveBase()
const sameBase = univerAPI.getBase(base.getId())
```

## 建立資料表

```ts
const table = base.insertTable('Tasks', { primaryFieldName: 'Title' })
const status = table.addField('Status', univerAPI.Enum.BaseFieldType.SingleSelect)
```

## 操作記錄

```ts
const record = table.addRecord({
  Title: 'Write docs',
  Status: 'In progress',
}, univerAPI.Enum.BaseFieldKeyEnum.Name)

record.setValue(status.getId(), 'Done')
```

## 操作 UI 狀態

`@univerjs-pro/bases-ui/facade` 會加入用於啟用資料表或檢視、選取、捲動、編輯及操作面板的 UI API。

```ts
const baseUI = univerAPI.getBaseUI()
const view = table.getViews()[0]
if (!view) throw new Error('No table view')
await baseUI.activateTable(table.getId())
await baseUI.activateView(view.getId())
baseUI.setSelection({
  type: 'grid-record',
  tableId: table.getId(),
  viewId: view.getId(),
  recordId: record.getId(),
})
```

## 參考資料

* [通用 API](https://docs.univer.ai/zh-TW/guides/bases/features/core/general-api.md)
* [Bases Facade 參考文件](https://docs.univer.ai/zh-TW/reference/facade/base.md)
* [Base 快照模型](https://docs.univer.ai/zh-TW/guides/bases/model/base-snapshot.md)
* [資料表、欄位與記錄](https://docs.univer.ai/zh-TW/guides/bases/model/tables-fields-records.md)
* [檢視](https://docs.univer.ai/zh-TW/guides/bases/model/views.md)
