Přejít na hlavní obsah
Každý objekt v Twenty je dodáván se sadou systémových polí, která sami nikdy nedefinujete. Tato pole jsou automaticky vytvářena serverem při zřízení objektu: id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector Protože tato pole nedefinujete pomocí defineField(), neexistuje žádná konstanta universalIdentifier, kterou byste mohli importovat. Jak tedy odkážete na createdAt jako na sloupec ve zobrazení?

Problém

Od Twenty 2.19 je univerzální identifikátor systémového pole deterministicky odvozován serverem ze tří vstupů: univerzálního identifikátoru aplikace, univerzálního identifikátoru objektu a názvu pole. Vymyslet si id a natvrdo ho zapsat nebude fungovat: neshoduje se s ničím na serveru a synchronizace zamítne osiřelý odkaz:
Dev sync failed: viewField: INVALID_VIEW_DATA: Field metadata not found

Řešení

getFieldUniversalIdentifier je k dispozici od twenty-sdk verze 2.21 a vyšší.
Použijte getFieldUniversalIdentifier k odvození přesně stejné hodnoty, jakou používá server. Funkce přijímá tři vstupy a vrací univerzální identifikátor pole:
import { getFieldUniversalIdentifier } from 'twenty-sdk/define';

const createdAtFieldId = getFieldUniversalIdentifier({
  applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
  objectUniversalIdentifier: MY_OBJECT_UNIVERSAL_IDENTIFIER,
  name: 'createdAt',
});
  • applicationUniversalIdentifier je identifikátor vaší aplikace, ten, který předáváte do defineApplication().
  • objectUniversalIdentifier je identifikátor objektu, ke kterému pole patří.
  • name je název systémového pole, jedna z výše uvedených hodnot.

Příklad: sloupec createdAt v zobrazení

Typickým případem je přidání sloupce createdAt do zobrazení některého z vašich vlastních objektů. Odvoďte identifikátor pole a odkažte na něj stejně jako na jakýkoli jiný 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,
    },
  ],
});
Tentýž odvozený identifikátor funguje všude tam, kde se očekává fieldMetadataUniversalIdentifier: pole zobrazení, filtry, řazení, seskupování a widgety rozložení stránky.
Identifikátor odvozujte, neukládejte ho natvrdo. Protože server odvozuje hodnotu z ID aplikace, ID objektu a názvu pole, volání getFieldUniversalIdentifier udržuje odkaz správný i v případě, že se tyto vstupy změní, a předchází odchylkám, pokud se samotný způsob odvozování někdy změní.

Standardní objekty Twenty

U standardního objektu Twenty (Person, Company, Opportunity, …) nemusíte nic odvozovat: identifikátory systémových polí jsou předpočítané konstanty, které můžete přímo importovat.
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
Použijte getFieldUniversalIdentifier v případě, kdy je objekt definován vaší aplikací pomocí defineObject() a žádná taková konstanta neexistuje.
name je výchozí pole, nikoli systémové pole. Má svůj vlastní natvrdo daný univerzální identifikátor a neodvozuje se pomocí getFieldUniversalIdentifier. U objektů, které definujete, odkazujte na pole name pomocí identifikátoru, který jste mu dali v defineObject().