src/objects/post-card.object.ts
关键点
universalIdentifier必须在各次部署间保持唯一且稳定。- 每个字段都需要
name、type、label以及其自身稳定的universalIdentifier。 fields数组是可选的——你可以定义没有自定义字段的对象。- 此处定义的内联字段不需要
objectUniversalIdentifier——它会从父对象继承。 使用defineField()为你不拥有的对象添加字段。 - 你可以使用
yarn twenty dev:add object脚手架创建新对象,它会引导你完成命名、字段和关系。 参见 Architecture → Scaffolding entities。
基础字段会自动添加。 当你定义自定义对象时,Twenty 会为你创建标准字段,例如
id、name、createdAt、updatedAt、createdBy、updatedBy 和 deletedAt。 你无需在 fields 数组中声明这些字段——只需声明你的自定义字段。 你可以通过声明一个同名字段来覆盖默认字段,但这么做通常并不是一个好主意。字段类型
从twenty-sdk/define 导出的完整 FieldType 值集合:
复合类型会存储多个子字段(例如,
FULL_NAME = 名 + 姓;CURRENCY = amountMicros + currencyCode)。 SELECT 和 MULTI_SELECT 需要一个如上示例所示的 options 数组。
默认值
字面量字符串默认值必须在字符串内部用单引号包裹——应写成defaultValue: "'Draft'",而不是 defaultValue: "Draft"。 这就是上面的 status 字段使用 `'${PostCardStatus.DRAFT}'` 的原因。
未加引号的字符串保留用于计算得到的默认值,这些默认值会在创建记录时进行求值:
'uuid'— 生成一个 UUID(用于UUID字段)'now'— 当前时间戳(用于DATE_TIME字段)
ACTOR 字段上的 { source: "'MANUAL'" })以及 SELECT/MULTI_SELECT 值。 在构建应用时,未加引号的字面字符串默认值会触发警告。
可空性
isNullable 控制字段是否接受 NULL。 它默认是 true —— 对可选字段可以省略。 将 isNullable 设为 false,可在数据库层面将字段设为必填。
对 isNullable 的更改会在每次同步时应用,包括更新现有字段的同步——因此你可以通过编辑 manifest 并重新同步来切换字段的可空性。
将现有字段改为不可为空时需要提供默认值。 当你将字段更改为
isNullable: false 时,还必须提供一个非空的 defaultValue。 在应用 NOT NULL 约束之前,默认值会为所有现有的 NULL 行进行回填;如果没有默认值,同步将失败,并出现错误:Default value cannot be null for non-nullable fields。 关系字段和 TS_VECTOR 字段始终可为空,因此 isNullable 对它们不起作用。接下来
- 将此对象与其他对象关联——关于双向关系模式,参见 Relations。
- 为其他应用的对象添加字段——关于
defineField(),参见 Extending Objects。 - 在 UI 中展示此对象——参见 Views 和 Navigation Menu Items,将其放入侧边栏。