src/objects/post-card.object.ts
Основные моменты
universalIdentifierдолжен быть уникальным и стабильным между развёртываниями.- Каждому полю требуются
name,type,labelи собственный стабильныйuniversalIdentifier. - Массив
fieldsнеобязателен — вы можете определять объекты без пользовательских полей. openRecordInопределяет, где открываются записи этого объекта при щелчке:ObjectOpenRecordIn.USER_CHOICE(по умолчанию, в соответствии с индивидуальными настройками каждого участника рабочего пространства в Settings → Experience),ObjectOpenRecordIn.SIDE_PANELилиObjectOpenRecordIn.RECORD_PAGE. Закрепите его наRECORD_PAGEдля записей, которым для полноценного использования нужна целая страница (как у рабочих процессов и дашбордов), или наSIDE_PANELдля записей, которые уместны только в виде быстрой боковой панели (как события календаря).writabilityопределяет, кто в принципе может выполнять операции записи с записями объекта — до того, как начнут действовать разрешения ролей:MetadataWritability.OPEN(значение по умолчанию — решают роли рабочего пространства),MetadataWritability.APPLICATION(создавать, обновлять и удалять записи могут только собственные логические функции вашего приложения; используйте это для «конфигурационных» объектов, чьи записи задают поведение, чтобы участники рабочего пространства с широким доступом к записям не могли редактировать их через API) илиMetadataWritability.SYSTEM(зарезервировано для данных, управляемых платформой). Операции чтения не затрагиваются — это ограничение применяется на стороне сервера, в отличие отisUIEditable, который лишь скрывает элементы интерфейса. Оно также существует на уровне отдельного поля, где может быть только более строгим, чем на уровне объекта.- Встроенным полям, определённым здесь, не нужен
objectUniversalIdentifier— он наследуется от родительского объекта. ИспользуйтеdefineField(), чтобы добавить поля к объектам, которые вам не принадлежат. - Вы можете сгенерировать заготовки новых объектов с помощью
yarn twenty dev:add object, который проведёт вас через настройку названий, полей и связей. См. Architecture → Scaffolding entities.
Базовые поля добавляются автоматически. Когда вы определяете пользовательский объект, Twenty создаёт для вас стандартные поля, такие как
id, name, createdAt, updatedAt, createdBy, updatedBy и deletedAt. Вам не нужно объявлять их в массиве fields — только ваши пользовательские поля. Вы можете переопределить базовое поле, объявив поле с тем же именем, но это редко бывает хорошей идеей.Типы полей
Полный набор значенийFieldType, экспортируемых из twenty-sdk/define:
Составные типы хранят несколько подполей (например,
FULL_NAME = имя + фамилия; CURRENCY = amountMicros + currencyCode). SELECT и MULTI_SELECT требуют массива options, как в примере выше.
Значения по умолчанию
Строковые значения по умолчанию должны быть заключены в одинарные кавычки внутри строки —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(). - Отображать этот объект в интерфейсе — см. пункты меню навигации, чтобы добавить пункт бокового меню; см. представления, чтобы добавить пользовательские настройки списков.