Vai al contenuto principale

Cosa copre il livello dati

Il data layer di un’app Twenty è l’insieme dei dati che la tua app aggiunge a uno spazio di lavoro — i nuovi tipi di record che dichiara, le colonne che aggiunge agli oggetti esistenti e come questi record si collegano tra loro.

In questa sezione

card-page-objects
Objects
defineObject — dichiara nuovi tipi di record con i propri campi.
card-page-extending-objects
Estendere gli oggetti
defineField — aggiungi campi agli oggetti standard o di altre applicazioni.
card-page-relations
Relations
Bidirezionale MANY_TO_ONE / connessioni ONE_TO_MANY tra oggetti.
card-page-timeline
Tipi di attività Timeline
Definire gli eventi di audit automatico e gli eventi espliciti delle app per registrare le cronologie.
card-page-validation-rules
Regole di convalida
defineValidationRule — dichiara le condizioni che un record deve soddisfare prima di poter essere salvato.

Entità in sintesi

La CLI rileva questi elementi tramite analisi AST in fase di build, quindi l’organizzazione dei file spetta a te — la convenzione è src/objects/, src/validation-rules/, src/fields/, src/indexes/, src/timeline-activity-types/ e src/related-record-paths/. Gli UUID universalIdentifier stabili collegano tutto tra le varie distribuzioni.

Indici (facoltativi)

Le app possono distribuire indici insieme ai loro oggetti per mantenere veloci le query ricorrenti. Il caso più comune è una colonna di stato o di chiave esterna che leggi spesso.
src/indexes/post-card-status.index.ts

Indici univoci

defineIndex accetta isUnique: true sia per l’univocità a singola colonna sia per quella multi-colonna. Questa è la primitiva consigliata — defineField({ isUnique: true }) è deprecata e verrà rimossa in una futura release.

Altri vincoli

  • Le clausole WHERE parziali restano sotto il controllo dell’amministratore — le app non possono dichiararle.
  • Ogni oggetto è limitato a 10 indici personalizzati (gli indici propri del framework non contano).
Ordina l’array fields nel modo in cui Postgres dovrebbe usarlo — la colonna più a sinistra per prima, come in un elenco telefonico. Gli indici non sono gratuiti: ogni scrittura sulla tabella li aggiorna. Aggiungine uno solo quando hai una query che ne ha bisogno.

Percorsi dei record correlati (opzionale)

I percorsi di record correlati sono in anteprima: si sincronizzano con la tua app, ma le autorizzazioni dei record non li utilizzano ancora. Una volta applicati, richiedono il piano Organization o superiore, come la sicurezza a livello di riga.
Un percorso di record correlato inizia su un oggetto e segue fino a tre campi di relazione, ciascuno sull’oggetto raggiunto dal precedente. Le autorizzazioni dei record utilizzano questi percorsi per estendere l’accesso da un record ai relativi record correlati.
  • Un percorso intrinseco (isInherent: true) si applica ogni volta che il record iniziale è leggibile, indipendentemente da come sia stato concesso l’accesso. Usalo per i record che appartengono al relativo elemento padre, come gli allegati di una scheda di post.
  • Un percorso normale si applica solo quando l’accesso al record iniziale deriva direttamente da un ruolo, quindi gli spazi di lavoro scelgono su quali fare affidamento.
src/related-record-paths/post-card-attachments.related-record-path.ts
Aggiungi secondFieldMetadataUniversalIdentifier e thirdFieldMetadataUniversalIdentifier per percorsi più lunghi. Ogni passaggio deve essere una relazione attiva sull’oggetto raggiunto fino a quel momento, un percorso non può visitare lo stesso oggetto due volte e due percorsi non possono utilizzare gli stessi passaggi.
Cerchi Application Config o Roles & Permissions? Quelli descrivono l’app in sé piuttosto che i dati che aggiunge — si trovano sotto Config. Cerchi Connections (Linear, GitHub, Slack OAuth)? Quelle esistono per essere chiamate dalle funzioni di logica e si trovano sotto Logic.