Přejít na hlavní obsah
Naše aplikace potřebuje dva vlastní objekty: šablony dokumentů (co psát) a dokumenty (generovaný výsledek). Pojďme je definovat. Scaffold each entity file with the CLI — has a valid UUID and the right folder for you:
yarn twenty dev:add object
Níže zobrazujeme dokončené soubory.
Každý *_UNIVERSAL_IDENTIFIER trvale žije v src/constants/universal-identifiers.ts a je importován, pokud je použit. snippety níže vynechávají tyto importy pro brevitu - uchovejte je ve svých vlastních souborech.

Objekt šablony

Šablona má name, body s {{placeholders}}, a cíl, který říká, zda je napsán pro osobu nebo společnost. Těloy je RICH_TEXT pole, takže dvacet jí dává plně bohatý textový editor.
import { defineObject, FieldType } from 'twenty-sdk/define';

export default defineObject({
  universalIdentifier: DOCUMENT_TEMPLATE_OBJECT_UNIVERSAL_IDENTIFIER,
  nameSingular: 'documentTemplate',
  namePlural: 'documentTemplates',
  labelSingular: 'Document template',
  labelPlural: 'Document templates',
  icon: 'IconFileText',
  labelIdentifierFieldMetadataUniversalIdentifier:
    TEMPLATE_NAME_FIELD_UNIVERSAL_IDENTIFIER,
  fields: [
    { universalIdentifier: TEMPLATE_NAME_FIELD_UNIVERSAL_IDENTIFIER,
      type: FieldType.TEXT, name: 'name', label: 'Name', icon: 'IconAbc' },
    { universalIdentifier: TEMPLATE_BODY_FIELD_UNIVERSAL_IDENTIFIER,
      type: FieldType.RICH_TEXT, name: 'body', label: 'Body', icon: 'IconFileText',
      description: 'Use {{placeholders}} like {{name.firstName}} or {{jobTitle}}.' },
    { universalIdentifier: TEMPLATE_TARGET_FIELD_UNIVERSAL_IDENTIFIER,
      type: FieldType.SELECT, name: 'target', label: 'Target', icon: 'IconTarget',
      defaultValue: `'PERSON'`,
      options: [
        { id: TEMPLATE_TARGET_OPTION_PERSON_UNIVERSAL_IDENTIFIER,
          value: 'PERSON', label: 'Person', color: 'blue', position: 0 },
        { id: TEMPLATE_TARGET_OPTION_COMPANY_UNIVERSAL_IDENTIFIER,
          value: 'COMPANY', label: 'Company', color: 'green', position: 1 },
      ] },
  ],
});
SELECT volba hodnoty musí být UPPER_CASE (PERSON, ne person) a defaultValue je zabalena do extra uvozovek: `'PERSON'`. Štítek je to, co vidí uživatelé.

Objekt dokumentu

Vygenerovaný dokument ukládá vykreslený content a status. Definujte stejným způsobem s status výběrem DRAFT / GENERATED. Celý soubor: document.object.ts.

Propojení se vztahem

Každý dokument by se měl vrátit ke šabloně, odkud pochází. Vztahy jsou obousměrné — definujete obě strany, každý ve vlastním souboru polí.
import { defineField, FieldType, OnDeleteAction, RelationType } from 'twenty-sdk/define';

// The "many" side: each document belongs to one template.
export default defineField({
  universalIdentifier: DOCUMENT_TEMPLATE_FIELD_UNIVERSAL_IDENTIFIER,
  objectUniversalIdentifier: DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
  type: FieldType.RELATION,
  name: 'template',
  label: 'Template',
  relationTargetObjectMetadataUniversalIdentifier:
    DOCUMENT_TEMPLATE_OBJECT_UNIVERSAL_IDENTIFIER,
  relationTargetFieldMetadataUniversalIdentifier:
    TEMPLATE_DOCUMENTS_FIELD_UNIVERSAL_IDENTIFIER,
  universalSettings: {
    relationType: RelationType.MANY_TO_ONE,
    onDelete: OnDeleteAction.SET_NULL,
    joinColumnName: 'templateId',
  },
});
Druhá strana (template-documents-relation.field.ts) je RelationType.ONE_TO_MANY pole documents, které ukazuje opačnou cestu. Celý vzor viz Relations.

Podívejte se na to ve dvaceti letech

S spuštěním příze dvacet dev otevřete Nastavení → Datový model. Oba objekty se zobrazí a označují vaší aplikací.
Nastavení datového modelu zobrazující dokumenty a šablony dokumentů
Vytvořte jednu šablonu pro testování - pojmenujte ji návrhem prodeje, nastavte Cíl na Osobní a vložte tělo s několika zástupnými znaky:
Dear {{name.firstName}} {{name.lastName}},

As {{jobTitle}} at {{company.name}}, we think you'll love our product.

Best,
The Team
Záznam šablony obchodního návrhu s zástupným tělem
Po tomto kroku: máte documentTemplate a document objekty, propojené relací a jednu šablonu, ze které chcete vygenerovat. Dále platí, že logika, která ji naplňuje.

Další: generování dokumentů →

Napište logickou funkci, která vyplňuje šablonu.