id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector
Da Sie diese Felder nicht mit defineField() deklarieren, gibt es keine universalIdentifier-Konstante, die Sie importieren könnten. Wie referenzieren Sie also createdAt als Spalte in einer Ansicht?
Das Problem
Seit Twenty 2.19 wird die universelle Kennung eines Systemfelds deterministisch abgeleitet vom Server aus drei Eingaben: der universellen Kennung der Applikation, der universellen Kennung des Objekts und dem Feldnamen. Sich eine ID auszudenken und sie hart zu codieren, funktioniert nicht: Sie stimmt mit nichts auf dem Server überein, und die Synchronisierung lehnt die lose Referenz ab:Die Lösung
getFieldUniversalIdentifier ist ab twenty-sdk 2.21 verfügbar.getFieldUniversalIdentifier, um genau denselben Wert aufzulösen, den der Server verwendet. Die Funktion nimmt die drei Eingaben entgegen und gibt die universelle Kennung des Feldes zurück:
applicationUniversalIdentifierist die Kennung Ihrer App, diejenige, die Sie andefineApplication()übergeben.objectUniversalIdentifierist die Kennung des Objekts, zu dem das Feld gehört.nameist der Name des Systemfelds, einer der oben aufgeführten Werte.
Beispiel: eine createdAt-Spalte in einer Ansicht
Der typische Anwendungsfall ist das Hinzufügen einercreatedAt-Spalte zu einer Ansicht eines Ihrer benutzerdefinierten Objekte. Lösen Sie die Feld-ID auf und referenzieren Sie sie wie jeden anderen fieldMetadataUniversalIdentifier:
src/views/example-view.ts
fieldMetadataUniversalIdentifier erwartet wird: Ansichtsfelder, Filter, Sortierungen, Gruppierungen und Page-Layout-Widgets.
Lösen Sie die ID auf, statt sie hart zu codieren. Da der Server den Wert aus der Applikations-ID, der Objekt-ID und dem Feldnamen ableitet, hält ein Aufruf von
getFieldUniversalIdentifier Ihre Referenz korrekt, selbst wenn sich diese
Eingaben ändern, und verhindert Abweichungen, falls sich die Ableitung jemals weiterentwickelt.Standardobjekte von Twenty
Für ein Standard-Twenty-Objekt (Person, Company, Opportunity, …) müssen Sie nichts ableiten: Die Systemfeld-Kennungen sind vorab berechnete Konstanten, die Sie direkt importieren können.getFieldUniversalIdentifier, wenn es sich um ein Objekt handelt, das Ihre App mit defineObject() definiert, für das es keine solche Konstante gibt.
name ist ein Standard-Feld, kein Systemfeld. Es behält seine eigene hart codierte
universelle Kennung und wird nicht über
getFieldUniversalIdentifier aufgelöst. Für Objekte, die Sie definieren, referenzieren Sie das
name-Feld über die Kennung, die Sie ihm in defineObject() gegeben haben.