universalIdentifier pe care să o imporți. În schimb, serverul derivează fiecare identificator într-un mod determinist, iar twenty-sdk expune aceeași derivare astfel încât manifestul tău să poată rezolva exact valoarea pe care o folosește serverul.
Câmpuri de sistem
Câmpurile scalare prezente pe fiecare obiect, niciunul dintre ele nu este declarat de tine cudefineField():
id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector
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ă.Câmpuri de relație de sistem
getSystemRelationFieldUniversalIdentifier este disponibil începând cu versiunea 2.23 a twenty-sdk și necesită un server Twenty pe versiunea 2.23 sau o versiune ulterioară.timelineActivities, attachments, noteTargets și taskTargets, fiecare indicând către obiectul de relație standard corespunzător.
Aceste câmpuri nu sunt rezolvate cu getFieldUniversalIdentifier: identificatorul lor este derivat independent de nume, din obiectul care găzduiește câmpul și obiectul către care indică acest câmp. Astfel, redenumirea unui obiect nu modifică niciodată identificatorii câmpurilor sale de relație.
Folosește getSystemRelationFieldUniversalIdentifier pentru a le rezolva:
objectUniversalIdentifiereste obiectul care găzduiește câmpul.relationTargetObjectUniversalIdentifiereste obiectul către care indică câmpul.
attachment.targetRocket, câmpul morfic pe care serverul îl creează pe obiectul de relație standard), inversează-le pe cele două:
fieldMetadataUniversalIdentifier.
Vizualizări de sistem
getSystemViewUniversalIdentifier și getSystemViewFieldUniversalIdentifier
sunt disponibile începând cu versiunea 2.26 a twenty-sdk și necesită un server Twenty pe
versiunea 2.26 sau o versiune ulterioară.All {objectLabelPlural}, indexată prin ViewKey.INDEX), cu câte o coloană pentru fiecare câmp afișabil. La fel ca în cazul câmpurilor de relație de sistem, identificatorii lor sunt derivați fără nume, astfel încât redenumirea unui obiect sau a unui câmp nu îi schimbă niciodată.
Folosește getSystemViewUniversalIdentifier pentru a rezolva vizualizarea:
objectMetadataApplicationUniversalIdentifiereste aplicația care deține obiectul, ceea ce reprezintă spațiul de nume pentru vizualizare.objectUniversalIdentifiereste obiectul pe care îl listează vizualizarea.viewKeyeste cheia vizualizării de sistem, astăziViewKey.INDEX.
viewUniversalIdentifier, cum ar fi o intrare în bara laterală NavigationMenuItemType.VIEW. Pentru a deschide pur și simplu lista principală a unui obiect, preferă NavigationMenuItemType.OBJECT cu targetObjectUniversalIdentifier: nu are nevoie de derivare.
getSystemViewFieldUniversalIdentifier rezolvă o singură coloană dintr-o vizualizare de sistem, pornind de la vizualizare și câmpul pe care îl afișează:
Obiecte standard Twenty
Pentru un obiect Twenty standard (Person, Company, Opportunity, …), nu trebuie să derivezi nimic: identificatorii sunt constante pre-calculate pe care le poți importa direct, atât pentru câmpuri, cât și pentru vizualizări.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().