Ana içeriğe atla
Özel nesneler, uygulamanızın bir çalışma alanına eklediği yeni kayıt türleridir — Kartpostal, Fatura, Abonelik, alanınıza özgü herhangi bir şey. Her nesne kendi şemasını (alanlar, ilişkiler, varsayılan değerler) ve eşitlemeler ve dağıtımlar boyunca korunan, kararlı bir evrensel tanımlayıcıyı bildirir.
src/objects/post-card.object.ts
import { defineObject, FieldType } from 'twenty-sdk/define';

enum PostCardStatus {
  DRAFT = 'DRAFT',
  SENT = 'SENT',
  DELIVERED = 'DELIVERED',
  RETURNED = 'RETURNED',
}

export default defineObject({
  universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
  nameSingular: 'postCard',
  namePlural: 'postCards',
  labelSingular: 'Post Card',
  labelPlural: 'Post Cards',
  description: 'A post card object',
  icon: 'IconMail',
  fields: [
    {
      universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
      name: 'content',
      type: FieldType.TEXT,
      label: 'Content',
      description: "Postcard's content",
      icon: 'IconAbc',
    },
    {
      universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
      name: 'recipientName',
      type: FieldType.FULL_NAME,
      label: 'Recipient name',
      icon: 'IconUser',
    },
    {
      universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
      name: 'recipientAddress',
      type: FieldType.ADDRESS,
      label: 'Recipient address',
      icon: 'IconHome',
    },
    {
      universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
      name: 'status',
      type: FieldType.SELECT,
      label: 'Status',
      icon: 'IconSend',
      defaultValue: `'${PostCardStatus.DRAFT}'`,
      options: [
        { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
        { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
        { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
        { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
      ],
    },
    {
      universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
      name: 'deliveredAt',
      type: FieldType.DATE_TIME,
      label: 'Delivered at',
      icon: 'IconCheck',
      isNullable: true,
      defaultValue: null,
    },
  ],
});

Önemli noktalar

  • universalIdentifier dağıtımlar arasında benzersiz ve kararlı olmalıdır.
  • Her alan bir name, type, label ve kendi kararlı universalIdentifier değerini gerektirir.
  • fields dizisi isteğe bağlıdır — özel alanlar olmadan da nesneler tanımlayabilirsiniz.
  • Burada tanımlanan satır içi alanların bir objectUniversalIdentifier’a ihtiyacı yoktur — üst nesneden devralınır. Sahibi olmadığınız nesnelere alan eklemek için defineField() kullanın.
  • yarn twenty dev:add object kullanarak, adlandırma, alanlar ve ilişkiler konusunda sizi yönlendirerek yeni nesneler oluşturabilirsiniz. Mimari → Varlık iskeleti oluşturma bölümüne bakın.
Temel alanlar otomatik olarak eklenir. Özel bir nesne tanımladığınızda Twenty, sizin için id, name, createdAt, updatedAt, createdBy, updatedBy ve deletedAt gibi standart alanlar oluşturur. Bunları fields dizinizde bildirmenize gerek yok — yalnızca özel alanlarınızı ekleyin. Aynı ada sahip bir alan bildirerek varsayılan bir alanı geçersiz kılabilirsiniz, ancak bu nadiren iyi bir fikirdir.

Varsayılan değerler

Sabit (literal) dize varsayılanları, dize içinde tek tırnak içine alınmış olmalıdır — defaultValue: "'Draft'", defaultValue: "Draft" değil. Bu nedenle yukarıdaki status alanı `'${PostCardStatus.DRAFT}'` kullanır. Tırnak içine alınmamış dizeler, bir kayıt oluşturulduğunda değerlendirilen, hesaplanmış varsayılanlar için ayrılmıştır:
  • 'uuid' — bir UUID üretir (UUID alanları için)
  • 'now' — geçerli zaman damgası (DATE_TIME alanları için)
Aynı kural, bileşik varsayılanların string alt alanları için (örneğin bir ACTOR alanında { source: "'MANUAL'" }) ve SELECT/MULTI_SELECT değerleri için de geçerlidir. Tırnak içine alınmamış bir sabit string varsayılan, uygulamanız oluşturulurken bir uyarıya neden olur.

Sırada ne var

  • Bu nesneyi diğerlerine bağlayın — çift yönlü ilişki modeli için İlişkiler bölümüne bakın.
  • Diğer uygulamalardaki nesnelere alanlar ekleyindefineField() için Nesneleri Genişletme bölümüne bakın.
  • Bu nesneyi arayüzde görüntüleyin — kenar çubuğuna yerleştirmek için Görünümler ve Gezinme Menüsü Öğeleri bölümlerine bakın.