Přejít na hlavní obsah
Datová vrstva aplikace Twenty představuje data, která vaše aplikace přidává do pracovního prostoru — nové typy záznamů, které deklaruje, sloupce, které přidává k existujícím objektům a způsob, jakým se tyto záznamy vzájemně propojují.
┌──────────────────────────────────────────────────┐
│ Object — a record type, e.g. PostCard            │
│    ├─ Field     (name, type, label)              │
│    ├─ Field                                      │
│    └─ Relation  (link to another object)         │
└──────────────────────────────────────────────────┘

            ├── lives in your app, OR


┌──────────────────────────────────────────────────┐
│ Standard / other apps' objects                   │
│    └─ Field added by your app via defineField    │
└──────────────────────────────────────────────────┘

V této části

Objekty

defineObject — deklarujte nové typy záznamů s jejich vlastními poli.

Rozšiřování objektů

defineField — přidejte pole ke standardním objektům nebo objektům jiných aplikací.

Vztahy

Obousměrná MANY_TO_ONE / ONE_TO_MANY propojení mezi objekty.

Entity v kostce

EntitaÚčelDefinováno pomocí
ObjektNový vlastní typ záznamu (např. PostCard, Invoice) s vlastními polidefineObject()
PoleSloupec v objektu. Samostatná pole mohou rozšiřovat objekty, které jste nevytvořili (např. přidat loyaltyTier k objektu Company)defineField()
VztahObousměrné propojení mezi dvěma objekty — obě strany deklarované jako poledefineField() s FieldType.RELATION
IndexDatabázový index pro zrychlení opakovaného dotazu na jeden z vašich objektůdefineIndex()
SDK je detekuje pomocí analýzy AST v době buildu, takže organizace souborů je na vás — zažitou konvencí je src/objects/, src/fields/ a src/indexes/. Stabilní UUID universalIdentifier vše propojují napříč nasazeními.

Indexy (volitelné)

Aplikace mohou dodávat indexy společně se svými objekty, aby udržely opakované dotazy rychlými. Nejčastějším případem je sloupec se stavem nebo cizím klíčem, který často čtete.
src/indexes/post-card-status.index.ts
import { defineIndex } from 'twenty-sdk/define';

import {
  POST_CARD_UNIVERSAL_IDENTIFIER,
  STATUS_FIELD_UNIVERSAL_IDENTIFIER,
} from '../objects/post-card.object';

export default defineIndex({
  universalIdentifier: 'b6e9d2a1-5a4c-46ca-9d52-42c8f02d1ff0',
  objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
  fields: [
    {
      universalIdentifier: 'b6e9d2a1-5a4c-46ca-9d52-42c8f02d1ff1',
      fieldUniversalIdentifier: STATUS_FIELD_UNIVERSAL_IDENTIFIER,
    },
  ],
});

Jedinečné indexy

defineIndex přijímá isUnique: true jak pro jedinečnost jednoho sloupce, tak vícesloupcovou jedinečnost. Toto je doporučené primitivum — defineField({ isUnique: true }) je zastaralé a bude odstraněno v některém z příštích vydání.
defineIndex({
  universalIdentifier: '…',
  objectUniversalIdentifier: PERSON_UNIVERSAL_IDENTIFIER,
  isUnique: true,
  fields: [{ universalIdentifier: '…', fieldUniversalIdentifier: EMAIL_FIELD_UNIVERSAL_IDENTIFIER }],
});

Další omezení

  • Částečné klauzule WHERE zůstávají pod kontrolou administrátora — aplikace je nemohou deklarovat.
  • Každý objekt je omezen na 10 vlastních indexů (indexy samotného frameworku se nepočítají).
Seřaďte pole fields tak, jak je má Postgres používat — nejlevější sloupec jako první, jako v telefonním seznamu. Indexy nejsou zadarmo: každý zápis do tabulky je aktualizuje. Přidávejte je jen tehdy, když máte dotaz, který je potřebuje.
Hledáte Application Config nebo Roles & Permissions? Ty popisují samotnou aplikaci, nikoli data, která přidává — najdete je pod Config. Hledáte Connections (Linear, GitHub, Slack OAuth)? Ty existují proto, aby byly volány z logických funkcí, a najdete je pod Logic.