Loading...
Loading...
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.
npx skill4agent add steedos/steedos-platform object-fields.field.ymlfields/.field.ymlfields/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.yml# 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 Information| 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 |
is_nameis_name: truenameis_name: truenamenameis_name: true# 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: truetypetype| 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) |
name: customer_name
type: text
label: Customer Name
required: true
searchable: true
index: truename: description
type: textarea
label: Description
rows: 4
is_wide: truename: content
type: html
label: Content
is_wide: truename: website
type: url
label: Websitename: email
type: email
label: Email
unique: true
index: truename: quantity
type: number
label: Quantity
scale: 0
min: 0
max: 999999name: price
type: currency
label: Price
scale: 2
min: 0name: discount_rate
type: percent
label: Discount Rate
scale: 2
min: 0
max: 100name: order_number
type: autonumber
label: Order Number
formula: 'ORD-{YYYY}{MM}{DD}-{0000}'
readonly: true{YYYY}{YY}{MM}{DD}{0000}name: order_date
type: date
label: Order Date
defaultValue: '{now}'name: submitted_at
type: datetime
label: Submitted At
readonly: truename: is_active
type: boolean
label: Is Active
defaultValue: truename: status
type: select
label: Status
options:
- label: Draft
value: draft
- label: Submitted
value: submitted
- label: Approved
value: approved
defaultValue: draftname: tags
type: select
label: Tags
multiple: true
options:
- label: Technology
value: tech
- label: Sales
value: salesname: 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: truereference_tomultipletruefalsefiltersdepend_ondeleted_lookup_record_behaviorclearretainname: order
type: master_detail
label: Order
reference_to: orders
required: true
index: truename: 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_valuezeroesblanksname: total_orders
type: summary
label: Total Orders
summary_object: orders
summary_type: count
summary_field: customer
summary_filters: [["status", "!=", "cancelled"]]summary_typecountsumavgminmaxname: attachment
type: file
label: Attachment
multiple: truename: avatar
type: image
label: Avatarname: custom_script
type: code
label: Script
language: javascript
is_wide: truelanguagejavascripttypescriptjsonhtmlcsssqlpythonjavarubygoshellyamlxmlmarkdownphpcsharpcppcswiftluarname: metadata
type: object
label: Metadata
blackbox: true
is_wide: truename: line_items
type: grid
label: Line Items
is_wide: true# 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}"visible_onname: 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'}}"# Static
defaultValue: 'draft'
defaultValue: 0
defaultValue: true
# Dynamic
defaultValue: '{now}' # Current date/time
defaultValue: '{userId}' # Current user
defaultValue: '{spaceId}' # Current workspace# Reload field when dependency changes
name: contact
type: lookup
label: Contact
reference_to: contacts
depend_on:
- customer
filters: [["account", "=", "{$customer}"]]currencynumberemailtextindex: truelabelgroupdefaultValue