メインコンテンツへスキップ
カスタムオブジェクトは、アプリがワークスペースに追加する新しいレコードタイプです。ポストカード、請求書、サブスクリプションなど、あなたのドメインに特化したあらゆるものを定義できます。 各オブジェクトは、そのスキーマ(フィールド、リレーション、デフォルト値)と、同期やデプロイをまたいで維持される安定したユニバーサル識別子を宣言します。
src/objects/post-card.object.ts

主なポイント

  • universalIdentifier は、デプロイをまたいで一意かつ安定している必要があります。
  • 各フィールドには、nametypelabel、および自身の安定した universalIdentifier が必要です。
  • fields 配列は任意です。カスタムフィールドなしでオブジェクトを定義できます。
  • ここで定義されたインラインフィールドには objectUniversalIdentifier不要です — 親オブジェクトから継承されます。 所有していないオブジェクトにフィールドを追加するには、defineField() を使用します。
  • yarn twenty dev:add object を使用すれば、新しいオブジェクトをスキャフォルドできます。名前、フィールド、リレーションシップの設定をガイドしてくれます。 アーキテクチャ → エンティティのスキャフォールディング を参照してください。
ベースフィールドは自動的に追加されます。 カスタムオブジェクトを定義すると、Twenty は idnamecreatedAtupdatedAtcreatedByupdatedBydeletedAt などの標準フィールドを自動的に作成します。 これらを fields 配列で宣言する必要はありません。カスタムフィールドのみを追加してください。 同じ名前でフィールドを宣言することでデフォルトフィールドを上書きすることもできますが、これはほとんどの場合お勧めできません。

フィールドタイプ

twenty-sdk/define からエクスポートされる、FieldType 値の完全な一覧: 複合タイプは複数のサブフィールドを保持します(例: FULL_NAME = 名 + 姓、CURRENCY = amountMicros + currencyCode)。 SELECTMULTI_SELECT は、上記の例のように options 配列を必要とします。

デフォルト値

文字列リテラルのデフォルト値は、文字列の内部でシングルクォートで囲む必要があります。つまり、defaultValue: "'Draft'" のように書き、defaultValue: "Draft" のようには書きません。 そのため上記の status フィールドでは、`'${PostCardStatus.DRAFT}'` を使用しています。 引用符で囲まれていない文字列は、レコード作成時に評価される計算済みデフォルト値用に予約されています。
  • 'uuid'UUID フィールド用に UUID を生成します。
  • 'now' — 現在のタイムスタンプ(DATE_TIME フィールド用)を表します。
同じ規則が、複合デフォルトの文字列サブフィールド(例: ACTOR フィールド上の { source: "'MANUAL'" })および SELECT / MULTI_SELECT の値にも適用されます。 引用符で囲まれていないリテラル文字列のデフォルト値がある場合、アプリのビルド時に警告が発生します。

NULL 許容性

isNullable は、フィールドが NULL を受け付けるかどうかを制御します。 デフォルトは true で、任意のフィールドでは省略できます。 データベースレベルでフィールドを必須にするには、isNullable: false を設定します。 isNullable への変更は、既存フィールドを更新する同期を含め、すべての同期で適用されます。そのため、マニフェストを編集して再同期することで、フィールドの NULL 許容性を切り替えることができます。
既存のフィールドを NULL 非許容にするには、デフォルト値が必要です。 フィールドを isNullable: false に変更する場合は、NULL ではない defaultValue も指定する必要があります。 デフォルト値は、NOT NULL 制約が適用される前に既存の NULL 行をすべてバックフィルします。これがない場合、同期は Default value cannot be null for non-nullable fields というエラーで失敗します。 リレーションフィールドおよび TS_VECTOR フィールドは常に NULL を許容するため、isNullable はそれらには影響しません。

次のステップ

  • このオブジェクトを他のオブジェクトに接続する — 双方向リレーションパターンについては Relations を参照してください。
  • 他のアプリのオブジェクトにフィールドを追加するdefineField() については Extending Objects を参照してください。
  • このオブジェクトを UI に表示する — サイドバーに表示するには、Views および Navigation Menu Items を参照してください。