Resumen
Las Custom Relationships te permiten definir y gestionar links entre cualquier par de object types —Contacts, Content Instances, Documents, Orders y más— sin escribir código ni cambiar schemas. Una relationship es una sola definición con dos lados, cada uno con su propio título, alias, object type, scope opcional y cardinalidad. A partir de esos dos lados CXF deriva el tipo de cardinalidad y expone el link en ambos objetos. Para el modelo mental, consulta Conceptos básicos. Las relationships son bidireccionales: cada lado se direcciona por su propio alias, así el mismo link se lee de forma natural desde cualquiera de los objetos.Dónde encontrarlo
Las definiciones de relationship se administran desde los Templates y Profiles. Una vez definidas, adjuntas y desadjuntas los objetos relacionados desde el tab de Relationships de un registro.Properties
Una definición contiene ambos lados, con sufijos_1 y _2:
| Property | Tipo | Requerido | Descripción |
|---|---|---|---|
title_1 / title_2 | string | Sí | Etiqueta legible de cada lado. |
alias_1 / alias_2 | string | Sí | Identificador de cada lado (snake_case) — cómo lo direccionas. Único entre relationships, y los dos lados deben diferir. |
object_type_1 / object_type_2 | enum | Sí | El object type de cada lado. |
cardinality_1 / cardinality_2 | enum | Sí | one o many en cada lado — juntos forman el tipo de cardinalidad. |
content_type_1 / content_type_2 | string | Condicional | Requerido cuando el object type de ese lado es content_instances. |
template_id_1 / template_id_2 | reference | No | Restringe el lado a un Template (ver Scoping). |
profile_id_1 / profile_id_2 | reference | No | Restringe el lado a un Profile. |
pivot_fields_config | array | No | Campos extra tipados sobre el link — solo many_many (ver Pivot fields). |
Cardinalidad
Cada lado esone o many; el par forma el tipo de cardinalidad de la
relationship:
cardinality_1 | cardinality_2 | Tipo | Ejemplo |
|---|---|---|---|
one | one | one_one | Un Contact ↔ un único registro de Profile |
one | many | one_many | Un Customer → muchas Orders |
many | one | many_one | Muchas Orders → un Customer |
many | many | many_many | Students ↔ Courses |
Pivot fields
Una relationshipmany_many puede llevar pivot fields — valores extra
guardados en el link mismo (no en ninguno de los objetos). Cada uno se define con
un slug y un type (text, number o boolean), y se valida al adjuntar o
actualizar un link.
Los pivot fields se permiten solo en relationships
many_many.Scoping
Cada lado es global o scoped:- Global —
template_idyprofile_idno están definidos; el lado aplica a todos los registros de su object type. - Scoped — restringido a un Template o Profile específico, así solo esos registros pueden participar.
Adjuntar y desadjuntar
Vinculas registros adjuntándolos a una relationship por su alias, y los desvinculas desadjuntándolos. Para los ladoscontent_instances y documents
también provees el Template correspondiente. Adjuntar y desadjuntar disparan los
eventos relationship.added y relationship.removed
(events) y escriben
logs, así las automations pueden reaccionar cuando se forman o
rompen los links.
Filtrar por relationship
Las relationships se pueden consultar en Views y Segments: filtra registros según si tienen o no tienen una relationship dada, y según los atributos de los objetos relacionados (queries anidadas).System vs custom relationships
- Las system relationships vienen integradas en CXF. Están marcadas con
is_system_relationshipy no se pueden editar ni eliminar. - Las custom relationships son las definidas por el usuario que se describen aquí.
Comportamiento y reglas
- Solo cardinalidad válida —
cardinality_1ycardinality_2deben ser cada unooneomany, formando uno de los cuatro tipos de arriba. - Los aliases deben ser únicos entre relationships, y los dos lados no pueden compartir alias.
content_typees requerido cuando el object type de un lado escontent_instances.- Los pivot fields se rechazan en cualquier cosa que no sea
many_many. - El
template_idde un lado scoped debe referenciar un Template existente. - Como el alias se resuelve dinámicamente, un alias que colisione con un método o scope integrado queda sombreado por él — elige aliases distintos.
Seeds
Las definiciones de relationship viajan entre entornos como Seeds estructurales (no son instancias de template). Cada una es un ítemrelationships que contiene ambos lados:
Gobernanza y permisos
- Solo un super admin o un Master puede crear, editar y eliminar custom relationships.
- Las system relationships (
is_system_relationship) no se pueden editar ni eliminar.
Acceso por API
Las definiciones de relationship se gestionan por la API, y hay endpoints dedicados para adjuntar, desadjuntar y actualizar los pivot fields de un link. Consulta la API reference.Relacionado
Object types
Los object types que una relationship puede conectar.
Views
Filtra registros por sus relationships.