Zum Hauptinhalt springen
Eine Ansicht ist eine gespeicherte Konfiguration dafür, wie Datensätze eines Objekts angezeigt werden: welche Felder erscheinen, in welcher Reihenfolge, ob sie sichtbar sind und welche Filter oder Gruppen angewendet werden. Verwenden Sie defineView(), um vorkonfigurierte Ansichten mit Ihrer App auszuliefern – typischerweise eine Standard-Indexansicht für jedes benutzerdefinierte Objekt, das Sie erstellen.
src/views/example-view.ts
import { defineView, ViewKey } from 'twenty-sdk/define';
import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER } from '../objects/example-object';
import { NAME_FIELD_UNIVERSAL_IDENTIFIER } from '../objects/example-object';

export default defineView({
  universalIdentifier: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
  name: 'All example items',
  objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER,
  icon: 'IconList',
  key: ViewKey.INDEX,
  position: 0,
  fields: [
    {
      universalIdentifier: 'f926bdb7-6af7-4683-9a09-adbca56c29f0',
      fieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER,
      position: 0,
      isVisible: true,
      size: 200,
    },
  ],
});

Hauptpunkte

  • objectUniversalIdentifier gibt an, auf welches Objekt diese Ansicht angewendet wird. Es kann sich um ein von Ihnen definiertes benutzerdefiniertes Objekt oder ein Standardobjekt von Twenty handeln.
  • key bestimmt den Ansichtstyp – ViewKey.INDEX ist die Hauptlistenansicht für das Objekt.
  • fields steuert, welche Spalten erscheinen und in welcher Reihenfolge. Jedes Feld referenziert einen fieldMetadataUniversalIdentifier.
  • Für erweiterte Konfigurationen können Sie außerdem filters, filterGroups, groups und fieldGroups deklarieren.
  • position steuert die Reihenfolge, wenn mehrere Ansichten für dasselbe Objekt existieren.

Filter

Eine Ansicht kann mit vorab angewendeten Filtern ausgeliefert werden. Jeder Filter hat drei Koordinaten: das Feld, das gefiltert wird, der Operand (wie verglichen wird) und der Wert (womit verglichen wird). Alle drei müssen übereinstimmen — die Verwendung eines Operanden, der nicht auf einen Feldtyp anwendbar ist, wird bei der Synchronisierung zurückgewiesen.
import { ViewFilterOperand } from 'twenty-shared/types';

filters: [
  {
    universalIdentifier: '...',
    fieldMetadataUniversalIdentifier: STATUS_FIELD_UNIVERSAL_IDENTIFIER,
    operand: ViewFilterOperand.IS,
    value: ['ACTIVE'],
  },
],

Unterstützte Operanden pro Feldtyp

FeldtypUnterstützte Operanden
TEXT, EMAILS, FULL_NAME, ADDRESS, LINKS, PHONES, RAW_JSON, FILES, ACTOR, ARRAYCONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY
ACTOR.source, ACTOR.workspaceMemberIdIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
SELECTIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
MULTI_SELECTCONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY
RELATIONIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
NUMBERIS, IS_NOT, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
RATINGIS, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
CURRENCY, CURRENCY.amountMicrosGREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
CURRENCY.currencyCodeIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
DATE, DATE_TIMEIS, IS_RELATIVE, IS_IN_PAST, IS_IN_FUTURE, IS_TODAY, IS_BEFORE, IS_AFTER, IS_EMPTY, IS_NOT_EMPTY
BOOLEANIS
UUIDIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
TS_VECTORVECTOR_SEARCH
Feldtypen mit ähnlichen Namen können völlig unterschiedliche Operanden verwenden – SELECT und MULTI_SELECT sind ein häufiges Beispiel.

Wertstruktur je Operand

Das Feld value ist immer ein JSON-serialisierbarer Wert, aber die erwartete Struktur hängt vom Operanden ab:
OperandenfamilieWertstrukturBeispiel
IS, IS_NOT bei SELECTArray von Optionsschlüsseln (Strings)['ACTIVE', 'PENDING']
CONTAINS, DOES_NOT_CONTAIN bei MULTI_SELECTArray von Optionsschlüsseln (Strings)['TAG_A']
IS, IS_NOT bei RELATIONArray von Datensatz-IDs (UUIDs)['c5a1...']
CONTAINS, DOES_NOT_CONTAIN bei textähnlichen FeldernZeichenkette'acme'
IS, IS_NOT bei NUMBERString (der Wert)'5'
IS bei RATING / UUIDString (der Wert)'5'
GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUALString (der Grenzwert)'10'
IS, IS_BEFORE, IS_AFTER bei DATE / DATE_TIMEISO-8601-String'2025-01-01T00:00:00Z'
IS_EMPTY, IS_NOT_EMPTYleerer String''
IS bei BOOLEAN'true' oder 'false''true'

Wie Ansichten in der UI angezeigt werden

Eine Ansicht für sich ist aus der Seitenleiste nicht erreichbar. Damit sie dort erscheint, verknüpfen Sie sie mit einem Navigationsmenüeintrag des Typs VIEW, der auf den universalIdentifier der Ansicht zeigt. Das ist das kanonische Muster: Jedes benutzerdefinierte Objekt liefert typischerweise eine Standardansicht plus einen Eintrag in der Seitenleiste, der sie öffnet.