Vai al contenuto principale
Ogni oggetto in Twenty viene distribuito con un insieme di campi di sistema che non dichiari mai esplicitamente. Vengono creati automaticamente dal server quando viene effettuato il provisioning dell’oggetto: id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector Poiché non dichiari questi campi con defineField(), non esiste alcuna costante universalIdentifier da importare. Quindi, come fai a fare riferimento a createdAt come colonna in una vista?

Il problema

A partire da Twenty 2.19, l’identificatore universale di un campo di sistema viene derivato in modo deterministico dal server sulla base di tre input: l’identificatore universale dell’applicazione, l’identificatore universale dell’oggetto e il nome del campo. Inventare un id e hardcodarlo non funziona: non corrisponde a nulla sul server e la sincronizzazione rifiuta il riferimento orfano:

La soluzione

getFieldUniversalIdentifier è disponibile da twenty-sdk 2.21 in poi.
Usa getFieldUniversalIdentifier per ottenere esattamente lo stesso valore utilizzato dal server. Accetta i tre input e restituisce l’identificatore universale del campo:
  • applicationUniversalIdentifier è l’identificatore della tua app, quello che passi a defineApplication().
  • objectUniversalIdentifier è l’identificatore dell’oggetto a cui il campo appartiene.
  • name è il nome del campo di sistema, uno dei valori elencati sopra.

Esempio: una colonna createdAt in una vista

Il caso tipico è aggiungere una colonna createdAt a una vista di uno dei tuoi oggetti personalizzati. Risolvi l’id del campo e usalo come qualsiasi altro fieldMetadataUniversalIdentifier:
src/views/example-view.ts
Lo stesso id risolto funziona ovunque ci si aspetti un fieldMetadataUniversalIdentifier: campi di vista, filtri, ordinamenti, raggruppamenti e widget di layout di pagina.
Risolvi l’id, non hardcodarlo. Poiché il server deriva il valore dall’id dell’applicazione, dall’id dell’oggetto e dal nome del campo, chiamare getFieldUniversalIdentifier mantiene corretto il riferimento anche se questi input cambiano ed evita discrepanze se la modalità di derivazione dovesse mai evolvere.

Oggetti standard di Twenty

Per un oggetto standard di Twenty (Person, Company, Opportunity, …), non hai bisogno di derivare nulla: gli identificatori dei campi di sistema sono costanti pre-calcolate che puoi importare direttamente.
Usa getFieldUniversalIdentifier quando l’oggetto è uno che la tua app definisce con defineObject(), per cui non esiste alcuna costante di questo tipo.
name è un campo predefinito, non un campo di sistema. Mantiene un proprio identificatore universale hardcoded e non viene risolto tramite getFieldUniversalIdentifier. Sugli oggetti che definisci tu, fai riferimento al campo name tramite l’identificatore che gli hai assegnato in defineObject().