defineView() para incluir vistas preconfiguradas con tu aplicación — normalmente una vista de índice predeterminada para cada objeto personalizado que crees.
src/views/example-view.ts
Puntos clave
objectUniversalIdentifierespecifica a qué objeto se aplica esta vista. Puede ser un objeto personalizado que hayas definido o un objeto estándar de Twenty.keydetermina el tipo de vista —ViewKey.INDEXes la vista de lista principal para el objeto.fieldscontrola qué columnas aparecen y en qué orden. Cada campo referencia unfieldMetadataUniversalIdentifier.- También puedes definir
filters,filterGroups,groupsyfieldGroupspara configuraciones avanzadas. positioncontrola el orden cuando existen múltiples vistas para el mismo objeto.
Filtros
Una vista puede incluir filtros preaplicados. Cada filtro tiene tres coordenadas: el campo que se está filtrando, el operando (cómo comparar) y el valor (contra qué comparar). Las tres deben alinearse: usar un operando que no aplique a un tipo de campo será rechazado en el momento de la sincronización.Operandos admitidos por tipo de campo
| Tipo de campo | Operandos admitidos |
|---|---|
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 |
Los tipos de campo con nombres similares pueden usar operandos completamente diferentes;SELECTyMULTI_SELECTson un caso común.
Forma del valor por operando
El campovalue siempre es un valor serializable en JSON, pero su forma esperada depende del operando:
| Familia de operandos | Forma del valor | Ejemplo |
|---|---|---|
IS, IS_NOT en SELECT | array de claves de opciones (cadenas) | ['ACTIVE', 'PENDING'] |
CONTAINS, DOES_NOT_CONTAIN en MULTI_SELECT | array de claves de opciones (cadenas) | ['TAG_A'] |
IS, IS_NOT en RELATION | array de IDs de registros (uuids) | ['c5a1...'] |
CONTAINS, DOES_NOT_CONTAIN en campos de tipo texto | cadena | 'acme' |
IS, IS_NOT en NUMBER | cadena (el valor) | '5' |
IS en RATING / UUID | cadena (el valor) | '5' |
GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL | cadena (el límite) | '10' |
IS, IS_BEFORE, IS_AFTER en DATE / DATE_TIME | cadena ISO 8601 | '2025-01-01T00:00:00Z' |
IS_EMPTY, IS_NOT_EMPTY | cadena vacía | '' |
IS en BOOLEAN | 'true' o 'false' | 'true' |
Cómo aparecen las vistas en la interfaz de usuario
Una vista por sí sola no es accesible desde la barra lateral. Para que aparezca allí, vincúlala con un elemento del menú de navegación de tipoVIEW que apunte al universalIdentifier de la vista. Ese es el patrón canónico: cada objeto personalizado suele incluir una vista predeterminada + una entrada en la barra lateral que la abre.