Skip to Content
操作指南歷程與還原

比對歷程並還原資料列

情境:訂單狀態被誤改,你要先找出正確版本、檢查差異,再以不破壞稽核軌跡的方式還原。

前置條件

讀取歷程需要該資料列的 read 權限;restore 另外需要 edit 權限。本例使用聊天室 11111111-1111-4111-8111-111111111111、資料表 22222222-2222-4222-8222-222222222222 與資料列 33333333-3333-4333-8333-333333333333。以下 private 請求使用使用者 access token。

歷程請求不接受房間參數。acting_chatroom_id 已於 2026-07-29 從所有 custom-table 路由移除;現在加上它會拿到 200 而且什麼都不改變,因為未知的 query parameter 會被丟棄。在部門表上,呼叫者的讀取等級與列過濾是把他持有的每一筆 chatroom grant 合併後解析出來的,因此被兩個房間授權的成員,看得到任一房間所授權之列的歷程。若某列被解析後的 read ACL 隱藏,其歷程回 404 Record not found——與該列從未存在無法區分,因為歷程快照帶有完整的列資料。

步驟

1. 列出單筆資料列歷程

history.record 以最新項目優先回傳歷程,但版本號仍隨時間遞增。用 limitoffset 分頁,不要以陣列位置當成 version。

GET /private/module/custom_tables/chatroom/11111111-1111-4111-8111-111111111111/tables/22222222-2222-4222-8222-222222222222/records/33333333-3333-4333-8333-333333333333/history?limit=50&offset=0

若你要先從整張表找某個變更,也可用 history.tablechange_typerecord_id query 篩選。

2. 讀取候選版本快照

假設第 1 版是已知正確狀態,先透過 history.version 取回完整快照。快照資料 key 是穩定的內部欄位 ID;用表格 settings.column_mapping 轉成顯示名稱供人檢查。

GET /private/module/custom_tables/chatroom/11111111-1111-4111-8111-111111111111/tables/22222222-2222-4222-8222-222222222222/records/33333333-3333-4333-8333-333333333333/history/1

3. 明確比對兩個版本

history.diff 中,路徑版本是 from_versioncompare_toto_version;下列請求顯示第 3 版到第 1 版需要改變的欄位。對調兩者會反轉 oldnew

GET /private/module/custom_tables/chatroom/11111111-1111-4111-8111-111111111111/tables/22222222-2222-4222-8222-222222222222/records/33333333-3333-4333-8333-333333333333/history/3/diff?compare_to=1

diff 也使用內部欄位 ID,且會移除目前呼叫者不可見的欄位。

4. 還原已確認的版本

history.restoreVersion 不帶 request body;它不會覆寫或刪除既有歷程,而會以 change_type: "revert" 建立下一個版本。

POST /private/module/custom_tables/chatroom/11111111-1111-4111-8111-111111111111/tables/22222222-2222-4222-8222-222222222222/records/33333333-3333-4333-8333-333333333333/history/1/restore

正常套用時,回應包含 restored_from_versionnew_version 與更新後 record。只有 scalar cells 會還原;若 links_not_restoredtrue,現有 link 關係仍保持不變,應另外檢查。

5. 處理 approval-gated restore

若資料表的 require_approval 規則命中 restore,步驟 4 會回傳結構化 approval_required 衝突,內含 process_idrule_idstaged_change_id。這代表還原已被暫存,並非已套用,也不是要重送 restore。

process_id 交給核准流程,等待核准或拒絕。核准後再執行步驟 1;新出現的 revert version 才是 restore 已生效的證據。拒絕時歷程不會增加 restore version。

6. 驗證新版本

再次列出 record history,取得新的 version,再用 history.version 讀取它。確認 scalar values 與第 1 版相同、change_typerevert,並把新版本號寫入你的稽核紀錄。

你會看到什麼

立即 restore 會回傳新的單調遞增版本;受核准控制時,先看到 staged process,核准後才看到新版本。舊版本一直保留,因此可追溯誰在何時還原到哪個 snapshot。

常見錯誤

請直接查看資料列歷程錯誤表版本快照錯誤表差異錯誤表還原錯誤表

試試看

API Playground 依序執行 history.recordhistory.versionhistory.diffhistory.restoreVersion;不要在有核准規則的正式資料上用未審查的版本測試。

Last updated on