id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector
Deoarece nu declari aceste câmpuri cu defineField(), nu există niciun universalIdentifier constant pe care să-l imporți. Deci cum faci referire la createdAt ca o coloană într-o vizualizare?
Problema
Începând cu Twenty 2.19, identificatorul universal al unui câmp de sistem este derivat deterministic de server din trei intrări: identificatorul universal al aplicației, identificatorul universal al obiectului și numele câmpului. Inventarea unui id și hardcodarea lui nu va funcționa: acesta nu se potrivește cu nimic de pe server, iar sincronizarea respinge referința rămasă în aer:Soluția
getFieldUniversalIdentifier este disponibil începând cu twenty-sdk 2.21.getFieldUniversalIdentifier pentru a obține exact aceeași valoare pe care o folosește serverul. Aceasta primește cele trei intrări și returnează identificatorul universal al câmpului:
applicationUniversalIdentifiereste identificatorul aplicației tale, cel pe care îl transmiți cătredefineApplication().objectUniversalIdentifiereste identificatorul obiectului căruia îi aparține câmpul.nameeste numele câmpului de sistem, una dintre valorile listate mai sus.
Exemplu: o coloană createdAt într-o vizualizare
Cazul tipic este adăugarea unei coloanecreatedAt la o vizualizare a unuia dintre obiectele tale personalizate. Calculează id-ul câmpului și fă referire la el ca la orice alt fieldMetadataUniversalIdentifier:
src/views/example-view.ts
fieldMetadataUniversalIdentifier: câmpuri de vizualizare, filtre, sortări, grupări și widget-uri de tip page-layout.
Calculează id-ul, nu îl hardcoda. Deoarece serverul derivă valoarea din
id-ul aplicației, id-ul obiectului și numele câmpului, apelarea
getFieldUniversalIdentifier menține referința corectă chiar dacă aceste
intrări se schimbă și evită divergența dacă metoda de derivare evoluează vreodată.Obiecte standard Twenty
Pentru un obiect Twenty standard (Person, Company, Opportunity, …), nu trebuie să derivezi nimic: identificatorii câmpurilor de sistem sunt constante pre-calculate pe care le poți importa direct.getFieldUniversalIdentifier atunci când obiectul este unul pe care aplicația ta îl definește cu defineObject(), unde nu există o astfel de constantă.
name este un câmp implicit, nu un câmp de sistem. Acesta își păstrează propriul identificator universal
hardcodat și nu este obținut prin
getFieldUniversalIdentifier. În obiectele pe care le definești, fă referire la câmpul
name prin identificatorul pe care i l-ai dat în defineObject().