メインコンテンツへスキップ
Twenty のすべてのオブジェクトには、あなたが自分で宣言する必要のない システムフィールド のセットがあらかじめ用意されています。 これらは、オブジェクトがプロビジョニングされるときにサーバーによって自動的に作成されます。 id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector defineField() でこれらのフィールドを宣言しないため、インポートできる universalIdentifier 定数は存在しません。 では、viewcreatedAt をカラムとしてどのように参照すればよいのでしょうか。

問題

Twenty 2.19 以降、システムフィールドのユニバーサル識別子は、アプリケーションのユニバーサル識別子、オブジェクトのユニバーサル識別子、およびフィールド名という 3 つの入力からサーバーによって 決定的に導出 されます。 id を独自に作成してハードコードしても機能しません。サーバー上のどの値とも一致せず、同期時にそのぶら下がった参照は拒否されます。
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found

解決策

getFieldUniversalIdentifiertwenty-sdk 2.21 以降で利用可能です。
getFieldUniversalIdentifier を使用して、サーバーが使用するものとまったく同じ値を解決します。 この関数は 3 つの入力を受け取り、フィールドのユニバーサル識別子を返します。
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';

const createdAtFieldId = getFieldUniversalIdentifier({
  applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
  objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
  name: 'createdAt',
});
  • applicationUniversalIdentifier はあなたのアプリの識別子であり、defineApplication() に渡すものです。
  • objectUniversalIdentifier は、そのフィールドが属するオブジェクトの識別子です。
  • name はシステムフィールド名であり、上に挙げた値のいずれかです。

例: ビュー内の createdAt カラム

典型的なケースは、カスタムオブジェクトの 1 つのビューに createdAt カラムを追加することです。 フィールド id を解決し、他の fieldMetadataUniversalIdentifier と同様にそれを参照します。
src/views/example-view.ts
import {
  defineView,
  getFieldUniversalIdentifier,
} from 'twenty-sdk/define';

const APPLICATION_UNIVERSAL_IDENTIFIER =
  '0b04e15c-27b2-4741-9046-b32e07469072';
const MY_OBJECT_UNIVERSAL_IDENTIFIER =
  'c782b61c-70fd-4c88-9cd6-4e61ab8d7591';

export default defineView({
  universalIdentifier: '70f10d44-144a-4da8-8c6f-3ec2422138c0',
  name: 'All records',
  objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
  icon: 'IconList',
  position: 0,
  fields: [
    {
      universalIdentifier: '75a90bc4-d901-4df4-85e0-af29db5e0104',
      fieldMetadataUniversalIdentifier: getFieldUniversalIdentifier({
        applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
        objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
        name: 'createdAt',
      }),
      position: 0,
      isVisible: true,
      size: 200,
    },
  ],
});
同じように解決された id は、fieldMetadataUniversalIdentifier が必要とされるあらゆる場所、すなわちビューのフィールド、フィルター、ソート、グループ、ページレイアウトウィジェットでそのまま使用できます。
id は解決して、ハードコードしないでください。 サーバーはその値をアプリケーション id、オブジェクト id、フィールド名から導出するため、getFieldUniversalIdentifier を呼び出すことで、それらの入力が変更された場合でも参照を正しい状態に保ち、導出方法が将来変わった場合のずれも防ぐことができます。

標準の Twenty オブジェクト

標準 の Twenty オブジェクト(Person、Company、Opportunity など)の場合、何も導出する必要はありません。システムフィールドの識別子はあらかじめ計算された定数として用意されており、直接インポートできます。
import { STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define';

// STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.fields.createdAt.universalIdentifier
// STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.fields.updatedAt.universalIdentifier
defineObject()あなたのアプリ が定義するオブジェクトのように、そのような定数が存在しない場合にこそ、getFieldUniversalIdentifier を使用してください。
name はシステムフィールドではなく、デフォルト フィールドです。 このフィールドは独自のハードコードされたユニバーサル識別子を持ち、getFieldUniversalIdentifier で解決されることはありません。 あなたが定義したオブジェクトでは、name フィールドは defineObject() で与えた識別子で参照してください。