Cum funcționează relațiile
Relațiile conectează două obiecte între ele. În Twenty, relațiile sunt întotdeauna bidirecționale — fiecare relație are două părți, iar fiecare parte este declarată ca un câmp ce o referențiază pe cealaltă.
Fiecare relație necesită două câmpuri care se referențiază reciproc:
- Partea MANY_TO_ONE — se află pe obiectul care deține cheia străină.
- Partea ONE_TO_MANY — se află pe obiectul care deține colecția.
FieldType.RELATION și se referențiază încrucișat prin relationTargetFieldMetadataUniversalIdentifier.
Exemplu: Post Card are mulți destinatari
UnPostCard poate fi trimis către multe înregistrări PostCardRecipient. Fiecare destinatar aparține exact unui Post Card.
Pasul 1: Definiți partea ONE_TO_MANY pe PostCard (partea “one”):
src/fields/post-card-recipients-on-post-card.field.ts
src/fields/post-card-on-post-card-recipient.field.ts
Importuri circulare: ambele câmpuri de relație se referă unul la celălalt prin
universalIdentifier. Pentru a evita problemele de import circular, exportați ID-urile câmpurilor ca constante denumite din fiecare fișier și importați-le în celălalt. Sistemul de build le rezolvă în timpul compilării.Relații de joncțiune
Un obiect de joncțiune conectează o înregistrare sursă la una sau mai multe înregistrări-țintă. De exemplu,PostCardRecipient poate conține atât o relație postCard, cât și o relație recipient. În câmpul ONE_TO_MANY al obiectului sursă, setează junctionTargetFieldUniversalIdentifier la câmpul de relație de pe obiectul de joncțiune care indică spre țintă:
RECIPIENT_FIELD_ID trebuie să identifice o relație MANY_TO_ONE sau morfă pe obiectul de joncțiune. Acesta indică lui Twenty care înregistrare asociată este ținta atunci când o funcționalitate precum distribuirea activității din cronologie parcurge joncțiunea.
Relaționarea cu obiectele standard
Pentru a crea o relație cu un obiect Twenty încorporat (Person, Company etc.), utilizațiSTANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.
O relație este declarată întotdeauna pe ambele obiecte, iar acest lucru nu se schimbă atunci când una dintre părți este un obiect standard: manifestul trebuie să definească și câmpul invers pe obiectul standard, cu universalIdentifier al obiectului standard ca objectUniversalIdentifier. Dacă lipsește câmpul invers, aplicația nu reușește să se sincronizeze cu Relation field target metadata not found.
src/fields/person-on-self-hosting-user.field.ts
src/fields/self-hosting-users-on-person.field.ts
Proprietăți ale câmpului de relație
Câmpuri de relație inline
Puteți, de asemenea, să declarați o relație direct îndefineObject. Când este inline, omiteți objectUniversalIdentifier — este moștenit de la obiectul părinte: