universalIdentifier que puedas importar. En su lugar, el servidor deriva cada identificador de forma determinista, y twenty-sdk expone la misma derivación para que tu manifiesto pueda resolver el valor exacto que usa el servidor.
Campos del sistema
Los campos escalares presentes en cada objeto, ninguno de los cuales declaras condefineField():
id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector
Entonces, ¿cómo haces referencia a createdAt como una columna en una vista?
Problema
Desde Twenty 2.19, el identificador universal de un campo de sistema se deriva de forma determinista en el servidor a partir de tres entradas: el identificador universal de la aplicación, el identificador universal del objeto y el nombre del campo. Inventar un id y ponerlo de forma fija en el código no funcionará: no coincide con nada en el servidor y la sincronización rechaza la referencia colgante:La solución
getFieldUniversalIdentifier está disponible a partir de twenty-sdk 2.21.getFieldUniversalIdentifier para resolver exactamente el mismo valor que utiliza el servidor. Toma las tres entradas y devuelve el identificador universal del campo:
applicationUniversalIdentifieres el identificador de tu aplicación, el que pasas adefineApplication().objectUniversalIdentifieres el identificador del objeto al que pertenece el campo.namees el nombre del campo de sistema, uno de los valores enumerados arriba.
Ejemplo: una columna createdAt en una vista
El caso típico es añadir una columnacreatedAt a una vista de uno de tus objetos personalizados. Resuelve el id del campo y haz referencia a él como a cualquier otro fieldMetadataUniversalIdentifier:
src/views/example-view.ts
fieldMetadataUniversalIdentifier: campos de vista, filtros, ordenaciones, agrupaciones y widgets de diseño de página.
Resuelve el id, no lo pongas de forma fija en el código. Como el servidor deriva el valor a partir
del id de la aplicación, el id del objeto y el nombre del campo, llamar a
getFieldUniversalIdentifier mantiene tu referencia correcta incluso si esas
entradas cambian, y evita desviaciones si la derivación evoluciona en algún momento.Campos de relación del sistema
getSystemRelationFieldUniversalIdentifier está disponible desde twenty-sdk
2.23 en adelante y requiere un servidor Twenty en la versión 2.23 o posterior.timelineActivities, attachments, noteTargets y taskTargets, cada uno apuntando al objeto de relación estándar correspondiente.
Estos campos no se resuelven con getFieldUniversalIdentifier: su identificador se deriva sin nombre, a partir del objeto que aloja el campo y del objeto al que apunta el campo. De este modo, cambiar el nombre de un objeto nunca modifica los identificadores de sus campos de relación.
Use getSystemRelationFieldUniversalIdentifier para resolverlos:
objectUniversalIdentifieres el objeto que aloja el campo.relationTargetObjectUniversalIdentifieres el objeto al que el campo apunta.
attachment.targetRocket, el campo morph que el servidor crea en el objeto de relación estándar), intercambie ambos:
fieldMetadataUniversalIdentifier.
Vistas de sistema
getSystemViewUniversalIdentifier y getSystemViewFieldUniversalIdentifier
están disponibles desde twenty-sdk 2.26 en adelante y requieren un servidor
Twenty en la versión 2.26 o posterior.All {objectLabelPlural}, con clave ViewKey.INDEX), con una columna por cada campo visible. Al igual que los campos de relación de sistema, sus identificadores se derivan sin usar nombres, por lo que renombrar un objeto o un campo nunca los cambia.
Usa getSystemViewUniversalIdentifier para resolver la vista:
objectMetadataApplicationUniversalIdentifieres la aplicación propietaria del objeto, que es la que define el espacio de nombres de la vista.objectUniversalIdentifieres el objeto que la vista enumera.viewKeyes la clave de vista de sistema,ViewKey.INDEXactualmente.
viewUniversalIdentifier, como una entrada en la barra lateral de tipo NavigationMenuItemType.VIEW. Para simplemente abrir la lista principal de un objeto, es preferible usar NavigationMenuItemType.OBJECT con targetObjectUniversalIdentifier: no necesita ninguna derivación.
getSystemViewFieldUniversalIdentifier resuelve una sola columna en una vista de sistema, a partir de la vista y del campo que muestra:
Objetos estándar de Twenty
Para un objeto estándar de Twenty (Persona, Compañía, Oportunidad, …), no necesitas derivar nada: los identificadores están precalculados como constantes que puedes importar directamente, tanto para campos como para vistas.defineObject(), donde no existe tal constante.
name es un campo predeterminado, no un campo de sistema. Conserva su propio identificador universal fijo
y no se resuelve mediante
getFieldUniversalIdentifier. En los objetos que defines, haz referencia al campo
name mediante el identificador que le diste en defineObject().