universalIdentifier da importare. Invece, il server deriva ogni identificatore in modo deterministico e twenty-sdk espone la stessa derivazione affinché il tuo manifest possa risolvere il valore esatto utilizzato dal server.
Campi di sistema
I campi scalari presenti su ogni oggetto, nessuno dei quali dichiari condefineField():
id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector
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.Campi di relazione di sistema
getSystemRelationFieldUniversalIdentifier è disponibile da twenty-sdk
2.23 in poi e richiede un server Twenty dalla versione 2.23 o successiva.timelineActivities, attachments, noteTargets e taskTargets, ciascuno dei quali punta al corrispondente oggetto di relazione standard.
Questi campi non vengono risolti con getFieldUniversalIdentifier: il loro identificatore è derivato in modo indipendente dal nome, dall’oggetto che ospita il campo e dall’oggetto a cui il campo punta. In questo modo, rinominare un oggetto non modifica mai gli identificatori dei suoi campi di relazione.
Usa getSystemRelationFieldUniversalIdentifier per risolverli:
objectUniversalIdentifierè l’oggetto che ospita il campo.relationTargetObjectUniversalIdentifierè l’oggetto a cui il campo punta.
attachment.targetRocket, il campo morph che il server crea sull’oggetto di relazione standard), scambia i due:
fieldMetadataUniversalIdentifier.
Viste di sistema
getSystemViewUniversalIdentifier e getSystemViewFieldUniversalIdentifier
sono disponibili da twenty-sdk 2.26 in poi e richiedono un server Twenty
dalla versione 2.26 o successiva.All {objectLabelPlural}, con chiave ViewKey.INDEX), con una colonna per ogni campo visualizzabile. Come per i campi di relazione di sistema, i loro identificatori sono derivati senza dipendere dai nomi, quindi rinominare un oggetto o un campo non li modifica mai.
Usa getSystemViewUniversalIdentifier per risolvere la vista:
objectMetadataApplicationUniversalIdentifierè l’applicazione proprietaria dell’oggetto, che è ciò in base a cui viene definito lo spazio dei nomi della vista.objectUniversalIdentifierè l’oggetto che la vista elenca.viewKeyè la chiave della vista di sistema, oggiViewKey.INDEX.
viewUniversalIdentifier, ad esempio in una voce della sidebar NavigationMenuItemType.VIEW. Per aprire semplicemente la lista principale di un oggetto, è preferibile usare NavigationMenuItemType.OBJECT con targetObjectUniversalIdentifier: non richiede alcuna derivazione.
getSystemViewFieldUniversalIdentifier risolve una singola colonna su una vista di sistema, a partire dalla vista e dal campo che visualizza:
Oggetti standard di Twenty
Per un oggetto standard di Twenty (Person, Company, Opportunity, …), non hai bisogno di derivare nulla: gli identificatori sono costanti pre-calcolate che puoi importare direttamente, sia per i campi che per le viste.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().