參考
欄位型別
欄位型別在 ObjectOS 中決定什麼 —— 列、API、表單控制元件,以及 AI Builder 會詢問什麼 —— 附幾個示例,完整的目錄見 objectstack.ai。
完整規範:objectstack.ai 上的欄位型別。本頁是摘要:ObjectOS 在哪裡使用它,以及幾個示例。
欄位的型別決定它儲存什麼,以及每個介面如何對待它。共有 48 種內建型別 —— 文本、
數字、日期、選擇、關係、計算值、媒體、結構化資料,以及地址、評分和簽名等更豐富的
輸入 —— 每個物件還帶有你不需要宣告的系統欄位(id、created_at、updated_at、
created_by、updated_by)。
ObjectOS 在哪裡使用它
一個欄位定義驅動以下所有內容:
*.object.ts (field spec)
│
├─► Postgres / MySQL / SQLite column + index + constraint
├─► REST: validated on POST/PATCH, exposed on GET
├─► UI: form widget + list column
├─► AI Builder: tool argument schema (so the AI knows what to ask)
└─► Audit: change-tracked if `trackHistory: true`- 資料庫會得到一列,以及它的索引和約束。
- REST API 在每次寫入時校驗該欄位,並在讀取時返回它(REST API)。
- UI 根據型別選擇表單控制元件和列表列。
- AI Builder 知道該詢問什麼,因為型別就是其工具的引數 schema。
- 審計在開啟
trackHistory時記錄該欄位的變更。
示例
選擇 —— select 欄位的選項:
// Keys of a `select` field; its other keys are omitted.
options: [
{ value: 'low', label: 'Low' },
{ value: 'high', label: 'High', color: '#e02' },
{ value: 'urgent', label: 'Urgent', color: '#c00' }
]關係 —— 指向客戶的查詢,選擇器收窄為活動的客戶:
// One field.
{
type: 'lookup',
reference: 'account', // target object name
lookupFilters: [ // narrow the lookup picker
{ field: 'status', operator: 'eq', value: 'active' }
],
deleteBehavior: 'set_null' // 'set_null' | 'cascade' | 'restrict'
}計算值 —— 用 CEL 編寫的公式欄位:
// One field.
{
name: 'profit_margin',
type: 'formula',
expression: F`(record.revenue - record.cost) / record.revenue * 100`
}附件 —— 在伺服器上檢查的檔案:
// One field.
{
type: 'file',
multiple: true, // store an array of attachments
accept: ['image/png', 'image/jpeg'], // MIME types / extensions
maxSize: 10_000_000 // bytes
}媒體
媒體欄位儲存的是一個不透明的 sys_file id —— 不是 URL,也不是內聯的後設資料
塊。你讀取記錄時看到的 { url, name, size, mimeType, … } 物件是展開後的形式,由
所屬的 sys_file 記錄推導而來;url 來自 /files/:fileId 解析器。
由於位元組由平臺持有,accept 和 maxSize 不只是給瀏覽器檔案選擇器的提示:伺服器
會依據它們重新檢查每一次記錄寫入,所以直接呼叫 API 的呼叫者也無法繞過它們。下載
會帶有真實的檔名和內容型別,讀取訪問則委託給所屬的物件。現有部署用
os migrate files-to-references 進行轉換;位元組存放在哪裡,參見
儲存,遷移則參見
17.0 釋出說明。