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.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 adefineApplication().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 colonnacreatedAt 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
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.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().