defineView() per distribuire viste preconfigurate con la tua app — in genere una vista indice predefinita per ogni oggetto personalizzato che crei.
src/views/example-view.ts
Punti chiave
objectUniversalIdentifierspecifica a quale oggetto si applica questa vista. Può essere un oggetto personalizzato che hai definito o un oggetto Twenty standard.keydetermina il tipo di vista —ViewKey.INDEXè la vista elenco principale per l’oggetto.fieldscontrolla quali colonne compaiono e in quale ordine. Ogni campo fa riferimento a unfieldMetadataUniversalIdentifier.- Puoi anche definire
filters,filterGroups,groupsefieldGroupsper configurazioni più avanzate. positioncontrolla l’ordinamento quando esistono più viste per lo stesso oggetto.
Filtri
Una vista può essere fornita con filtri preapplicati. Ogni filtro ha tre coordinate: il campo che viene filtrato, l’operando (come confrontare) e il valore (con cosa confrontare). Tutti e tre devono allinearsi: l’uso di un operando che non si applica a un tipo di campo verrà rifiutato al momento della sincronizzazione.Operatori supportati per tipo di campo
| Tipo di campo | Operandi supportati |
|---|---|
TEXT, EMAILS, FULL_NAME, ADDRESS, LINKS, PHONES, RAW_JSON, FILES, ACTOR, ARRAY | CONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY |
ACTOR.source, ACTOR.workspaceMemberId | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
SELECT | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
MULTI_SELECT | CONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY |
RELATION | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
NUMBER | IS, IS_NOT, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY |
RATING | IS, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY |
CURRENCY, CURRENCY.amountMicros | GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
CURRENCY.currencyCode | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
DATE, DATE_TIME | IS, IS_RELATIVE, IS_IN_PAST, IS_IN_FUTURE, IS_TODAY, IS_BEFORE, IS_AFTER, IS_EMPTY, IS_NOT_EMPTY |
BOOLEAN | IS |
UUID | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
TS_VECTOR | VECTOR_SEARCH |
I tipi di campo con nomi simili possono usare operandi completamente diversi —SELECTeMULTI_SELECTsono un caso comune.
Forma del valore per operando
Il campovalue è sempre un valore serializzabile in JSON, ma la forma prevista dipende dall’operando:
| Famiglia di operandi | Forma del valore | Esempio |
|---|---|---|
IS, IS_NOT su SELECT | array di chiavi di opzione (stringhe) | ['ACTIVE', 'PENDING'] |
CONTAINS, DOES_NOT_CONTAIN su MULTI_SELECT | array di chiavi di opzione (stringhe) | ['TAG_A'] |
IS, IS_NOT su RELATION | array di ID di record (uuid) | ['c5a1...'] |
CONTAINS, DOES_NOT_CONTAIN su campi testuali | stringa | 'acme' |
IS, IS_NOT su NUMBER | stringa (il valore) | '5' |
IS su RATING / UUID | stringa (il valore) | '5' |
GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL | stringa (il limite) | '10' |
IS, IS_BEFORE, IS_AFTER su DATE / DATE_TIME | stringa ISO 8601 | '2025-01-01T00:00:00Z' |
IS_EMPTY, IS_NOT_EMPTY | stringa vuota | '' |
IS su BOOLEAN | 'true' o 'false' | 'true' |
Come le viste vengono visualizzate nell’interfaccia utente
Una vista da sola non è raggiungibile dalla barra laterale. Per farla apparire lì, collegala a una voce del menu di navigazione di tipoVIEW che punti all’universalIdentifier della vista. Questo è il pattern canonico: ogni oggetto personalizzato in genere distribuisce una vista predefinita + una voce nella barra laterale che la apre.