Skip to main content
Пользовательские объекты — это новые типы записей, которые ваше приложение добавляет в рабочее пространство — открытка, счёт-фактура, подписка, что‑то специфичное для вашей предметной области. Каждый объект объявляет свою схему (поля, связи, значения по умолчанию) и стабильный универсальный идентификатор, который сохраняется между синхронизациями и развёртываниями.
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 — только ваши пользовательские поля. Вы можете переопределить базовое поле, объявив поле с тем же именем, но это редко бывает хорошей идеей.

Значения по умолчанию

Строковые значения по умолчанию должны быть заключены в одинарные кавычки внутри строки — defaultValue: "'Draft'", а не defaultValue: "Draft". Именно поэтому поле status выше использует `'${PostCardStatus.DRAFT}'`. Незаключённые в кавычки строки зарезервированы для вычисляемых значений по умолчанию, которые рассчитываются при создании записи:
  • 'uuid' — генерирует UUID (для полей UUID)
  • 'now' — текущая временная метка (для полей DATE_TIME)
Та же конвенция применяется к строковым подполям составных значений по умолчанию (например, { source: "'MANUAL'" } в поле ACTOR) и к значениям SELECT/MULTI_SELECT. Строковый литерал по умолчанию, оставленный без кавычек, вызывает предупреждение при сборке приложения.

Допустимость значения NULL

isNullable определяет, допускает ли поле значение NULL. По умолчанию установлено значение true — опускайте этот параметр для необязательных полей. Установите isNullable: false, чтобы сделать поле обязательным на уровне базы данных. Изменения isNullable применяются при каждой синхронизации, включая синхронизации, которые обновляют существующее поле, — таким образом, вы можете изменить допустимость значения NULL для поля, отредактировав манифест и повторно выполнив синхронизацию.
Чтобы сделать существующее поле не допускающим значение NULL, требуется значение по умолчанию. Когда вы изменяете поле на isNullable: false, вы также должны предоставить значение defaultValue, отличное от NULL. Значение по умолчанию заполняет все существующие строки с NULL перед применением ограничения NOT NULL; без него синхронизация завершится с ошибкой Default value cannot be null for non-nullable fields. Поля связей и поля TS_VECTOR всегда допускают значение NULL, поэтому параметр isNullable на них не влияет.

Что дальше

  • Свяжите этот объект с другими — см. Relations для двунаправленного шаблона связей.
  • Добавляйте поля к объектам из других приложений — см. Extending Objects о defineField().
  • Отобразите этот объект в интерфейсе — см. Views и Navigation Menu Items, чтобы поместить его в боковую панель.