object-fields
Original:🇺🇸 English
Translated
Comprehensive guide to Steedos field types and configurations. Fields are defined as .field.yml files in objects/{name}/fields/. Covers text fields, numeric fields (number, currency, percent, autonumber), date/time, boolean/select, relationship fields (lookup, master-detail), computed fields (formula, summary), file/media, and special types. Includes field properties, amis UI customization, visible_on formulas, validation, defaults, and dependencies.
2installs
Sourcesteedos/steedos-platform
Added on
NPX Install
npx skill4agent add steedos/steedos-platform object-fieldsTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Steedos Object Fields | Steedos 对象字段
Overview | 概述
Fields define how data is stored, validated, and displayed. Each field is defined as a separate file in the object's subfolder.
.field.ymlfields/字段定义数据的存储、验证和显示方式。每个字段作为独立的 文件定义在对象的 子文件夹中。
.field.ymlfields/File Location | 文件位置
steedos-packages/
└── my-package/
└── main/default/
└── objects/
└── orders/
└── fields/
├── order_number.field.yml
├── customer.field.yml
├── status.field.yml
├── total_amount.field.yml
└── shipping_address.field.ymlField Structure | 字段结构
yaml
# objects/orders/fields/customer.field.yml
name: customer
type: lookup
label: 客户
reference_to: customers
required: true
index: true
searchable: true
filterable: true
sortable: true
sort_no: 200
group: Basic InformationCommon Properties | 通用属性
| Property | Type | Description |
|---|---|---|
| string | Field API name (required) |
| string | Field type (required, see Valid Field Types below) |
| string | Display label — use the language of the user's prompt (required) |
| boolean | Is required |
| boolean | Read-only |
| boolean | Hide from all UI |
| boolean | Omit from forms |
| boolean | Disable editing |
| any | Default value |
| string | Field group name |
| number | Display order |
| boolean | Mark as the object's display name field (see below) |
| boolean | Full width in forms |
| boolean | Create database index |
| boolean | Unique constraint |
| boolean | Include in global search |
| boolean | Available in filters |
| boolean | Sortable in list views |
| string | Backend data type |
| string | Amis formula for conditional visibility |
| string | Tooltip help text |
Name Field (is_name
) | 名称字段
is_nameEvery object must have a name field — the human-readable identifier shown in lookups, related lists, and record titles. The system determines the name field by:
每个对象必须有一个名称字段——在查找、相关列表和记录标题中显示的人类可读标识。系统按以下优先级确定名称字段:
- A field with (highest priority)
is_name: true - A field named (fallback)
name
Use when the display name is not a simple text field:
is_name: truename当显示名称不是简单的 文本字段时,使用 :
nameis_name: trueyaml
# autonumber as name field
name: order_number
type: autonumber
label: Order Number
formula: 'ORD-{YYYY}{MM}{DD}-{0000}'
is_name: true
readonly: true
# lookup as name field
name: permission_set
type: master_detail
label: Permission Set
reference_to: permission_set
required: true
is_name: true
# simple text name field (is_name not needed)
name: name
type: text
label: Product Name
required: true
searchable: trueValid Field Types | 有效字段类型
⚠️ CRITICAL: The property MUST be one of the values listed below. NEVER invent field types. Any value NOT in this list will cause an error.
type⚠️ 重要: 属性必须为下表中的值之一,严禁自行编造字段类型。不在此列表中的值会导致错误。
type| Type | Description |
|---|---|
| Short text |
| Long text (multiline) |
| Rich text (HTML editor) |
| Single or multiple choice (with |
| True/false |
| Toggle switch (same as boolean, different UI) |
| Date only |
| Date and time |
| Time only |
| Integer or decimal |
| Money amount |
| Percentage |
| Auto-generated sequential number |
| Reference to another object (many-to-one) |
| Parent-child reference (cascade delete) |
| Inline table (array of objects) |
| URL |
| Email address |
| Image upload |
| File upload |
| Code editor |
| Markdown editor |
| Color picker |
| Geographic location |
| JSON object |
| Computed formula field |
| Roll-up summary field |
| Password (masked) |
Text Field Types | 文本字段类型
text (Short Text) | 短文本
yaml
name: customer_name
type: text
label: Customer Name
required: true
searchable: true
index: truetextarea (Long Text) | 长文本
yaml
name: description
type: textarea
label: Description
rows: 4
is_wide: truehtml (Rich Text) | 富文本
yaml
name: content
type: html
label: Content
is_wide: trueurl
yaml
name: website
type: url
label: Websiteyaml
name: email
type: email
label: Email
unique: true
index: trueNumeric Field Types | 数值字段类型
number
yaml
name: quantity
type: number
label: Quantity
scale: 0
min: 0
max: 999999currency | 货币
yaml
name: price
type: currency
label: Price
scale: 2
min: 0percent | 百分比
yaml
name: discount_rate
type: percent
label: Discount Rate
scale: 2
min: 0
max: 100autonumber | 自动编号
yaml
name: order_number
type: autonumber
label: Order Number
formula: 'ORD-{YYYY}{MM}{DD}-{0000}'
readonly: trueFormat placeholders: , , , , (sequential with padding)
{YYYY}{YY}{MM}{DD}{0000}Date and Time Types | 日期时间类型
date
yaml
name: order_date
type: date
label: Order Date
defaultValue: '{now}'datetime
yaml
name: submitted_at
type: datetime
label: Submitted At
readonly: trueBoolean and Selection Types | 布尔和选择类型
boolean
yaml
name: is_active
type: boolean
label: Is Active
defaultValue: trueselect (Single) | 单选
yaml
name: status
type: select
label: Status
options:
- label: Draft
value: draft
- label: Submitted
value: submitted
- label: Approved
value: approved
defaultValue: draftselect (Multiple) | 多选
yaml
name: tags
type: select
label: Tags
multiple: true
options:
- label: Technology
value: tech
- label: Sales
value: salesRelationship Fields | 关系字段
lookup (Many-to-One) | 查找关系
yaml
name: customer
type: lookup
label: Customer
reference_to: customers
required: true
index: true
# With filters
name: contact
type: lookup
label: Contact
reference_to: contacts
filters: [["account", "=", "{$customer}"]]
depend_on:
- customer
# Multiple selection
name: assigned_users
type: lookup
label: Assigned Users
reference_to: users
multiple: trueLookup properties:
- — target object API name (required)
reference_to - — allow selecting multiple records (
multiple/true)false - — filter condition for lookup dropdown
filters - — re-fetch options when these fields change
depend_on - — when referenced record is deleted. ⚠️ MUST be
deleted_lookup_record_behavior(set to null) orclear(keep stale reference). Only these two values are valid.retain
master_detail (Parent-Child) | 主从关系
yaml
name: order
type: master_detail
label: Order
reference_to: orders
required: true
index: trueCascade delete: deleting parent deletes all children.
Computed Fields | 计算字段
formula | 公式
yaml
name: total_price
type: formula
label: Total Price
data_type: currency
scale: 2
formula_blank_value: zeroes
formula: !!js/function |
function() {
return (this.quantity || 0) * (this.unit_price || 0);
}data_typetextnumbercurrencypercentbooleandatedatetimeformula_blank_valuezeroesblankssummary (Rollup) | 汇总
yaml
name: total_orders
type: summary
label: Total Orders
summary_object: orders
summary_type: count
summary_field: customer
summary_filters: [["status", "!=", "cancelled"]]⚠️ MUST be one of: , , , , . Do NOT use other values.
summary_typecountsumavgminmaxFile and Media Types | 文件和媒体类型
file
yaml
name: attachment
type: file
label: Attachment
multiple: trueimage
yaml
name: avatar
type: image
label: AvatarSpecial Types | 特殊类型
code (Code Editor) | 代码编辑器
yaml
name: custom_script
type: code
label: Script
language: javascript
is_wide: true⚠️ MUST be one of: , , , , , , , , , , , , , , , , , , , , . Do NOT use other values.
languagejavascripttypescriptjsonhtmlcsssqlpythonjavarubygoshellyamlxmlmarkdownphpcsharpcppcswiftluarobject (JSON)
yaml
name: metadata
type: object
label: Metadata
blackbox: true
is_wide: truegrid (Table/Array)
yaml
name: line_items
type: grid
label: Line Items
is_wide: trueAmis UI Customization | Amis UI 自定义
Fields can have custom Amis rendering configuration:
yaml
# objects/materials/fields/classification.field.yml
name: classification
type: text
label: Classification
amis:
id: 'u:classification'
type: tree-select
label: Classification
multiple: true
clearable: true
source:
url: /graphql
method: post
requestAdaptor: |
api.data = {
query: `{ hierarchical_picklist_items(filters: ["list", "=", "classification"]) { label, value, parent } }`
}
adaptor: |
const items = payload.data?.hierarchical_picklist_items || [];
return { options: buildTree(items) };
cache: 86400000
onEvent:
change:
weight: 0
actions:
- actionType: setValue
args:
value:
related_field: "${event.data.value}"Conditional Visibility | 条件可见性
Use with Amis formula syntax:
visible_onyaml
name: rejection_reason
type: textarea
label: Rejection Reason
visible_on: "{{status == 'rejected'}}"
name: tracking_number
type: text
label: Tracking Number
visible_on: "{{status == 'shipped' || status == 'completed'}}"Default Values | 默认值
yaml
# Static
defaultValue: 'draft'
defaultValue: 0
defaultValue: true
# Dynamic
defaultValue: '{now}' # Current date/time
defaultValue: '{userId}' # Current user
defaultValue: '{spaceId}' # Current workspaceField Dependencies | 字段依赖
yaml
# Reload field when dependency changes
name: contact
type: lookup
label: Contact
reference_to: contacts
depend_on:
- customer
filters: [["account", "=", "{$customer}"]]Best Practices | 最佳实践
- Use specific types: not just
currency,numbernot justemailtext - Add indexes: on frequently queried/filtered fields
index: true - Label follows user's language: Write in the language of the user's prompt. For i18n, use the translations skill
label - Use sort_no: Control field display order
- Group fields: Use to organize related fields
group - Set appropriate defaults: Use to reduce user input
defaultValue