Skip to main content
Twenty içindeki her nesne, kendi başınıza asla bildirmediğiniz sistem meta verileriyle birlikte gelir; bir alan kümesi ve sütunlarıyla birlikte ana liste görünümü gibi. Sunucu, nesne sağlandığında bunların hepsini oluşturur ve Twenty büyüdükçe bu küme de büyür. Siz bunu bildirmediğiniz için, içe aktarabileceğiniz bir universalIdentifier sabiti yoktur. Bunun yerine, sunucu her tanımlayıcıyı deterministik olarak türetir ve twenty-sdk, bildirim dosyanızın sunucunun kullandığı kesin değeri çözümleyebilmesi için aynı türetmeyi dışa açar.

Sistem Alanları

Her nesnede bulunan, hiçbirini defineField() ile bildirmediğiniz skaler alanlar: id, createdAt, updatedAt, deletedAt, createdBy, updatedBy, position, searchVector Peki bir görünümde createdAt alanına sütun olarak nasıl referans verirsiniz?

Sorun

Twenty 2.19’dan beri, bir sistem alanının evrensel tanımlayıcısı, sunucu tarafından üç girdiden deterministik olarak türetilir: uygulama evrensel tanımlayıcısı, nesne evrensel tanımlayıcısı ve alan adı. Rastgele bir id uydurup onu hardcode etmek işe yaramaz: sunucudaki hiçbir şeyle eşleşmez ve senkronizasyon, askıda kalan referansı reddeder:

Çözüm

getFieldUniversalIdentifier, twenty-sdk 2.21 sürümünden itibaren kullanılabilir.
Sunucunun kullandığıyla tamamen aynı değeri elde etmek için getFieldUniversalIdentifier kullanın. Üç girdiyi alır ve alanın evrensel tanımlayıcısını döndürür:
  • applicationUniversalIdentifier, uygulamanızın tanımlayıcısıdır; defineApplication() çağrısına aktardığınız tanımlayıcı.
  • objectUniversalIdentifier, alanın ait olduğu nesnenin tanımlayıcısıdır.
  • name, sistem alan adıdır; yukarıda listelenen değerlerden biridir.

Örnek: bir görünümde createdAt sütunu

Tipik durum, özel nesnelerinizden birinin görünümüne bir createdAt sütunu eklemektir. Alan id’sini çözümleyin ve ona, herhangi bir fieldMetadataUniversalIdentifier gibi referans verin:
src/views/example-view.ts
Aynı çözümlenen id, bir fieldMetadataUniversalIdentifier beklendiği her yerde çalışır: görünüm alanları, filtreler, sıralamalar, gruplar ve sayfa düzeni bileşenleri.
Id’yi çözümleyin, hardcode etmeyin. Sunucu değeri uygulama id’si, nesne id’si ve alan adından türettiği için, getFieldUniversalIdentifier çağrısı, bu girdiler değişse bile referansınızı doğru tutar ve türetme zaman içinde gelişirse sapmayı önler.

Sistem ilişki alanları

getSystemRelationFieldUniversalIdentifier 2.23 sürümünden itibaren twenty-sdk içinde kullanılabilir ve Twenty sunucusunun 2.23 veya daha yeni bir sürümünü gerektirir.
Yukarıdaki skaler sistem alanlarının yanı sıra, sunucu her nesne üzerinde dört sistem ilişki alanı da sağlar: timelineActivities, attachments, noteTargets ve taskTargets. Bunların her biri, karşılık gelen standart ilişki nesnesini işaret eder. Bu alanlar getFieldUniversalIdentifier ile çözümlenmez: tanımlayıcıları, alanı barındıran nesne ve alanın işaret ettiği nesneden isimden bağımsız olarak türetilir. Bu sayede bir nesnenin adını değiştirmek, ilişki alanlarının tanımlayıcılarını asla değiştirmez. Bunları çözümlemek için getSystemRelationFieldUniversalIdentifier kullanın:
  • objectUniversalIdentifier, alanın barındırıldığı nesnedir.
  • relationTargetObjectUniversalIdentifier, alanın işaret ettiği nesnedir.
Yön, argüman sırasına göre kodlanır. Ters tarafı çözümlemek için (örneğin, attachment.targetRocket, sunucunun standart ilişki nesnesi üzerinde oluşturduğu morph alanı), ikisini değiştirin:
Skaler sistem alanlarında olduğu gibi, çözümlenen kimlik, fieldMetadataUniversalIdentifier beklendiği her yerde çalışır.

Sistem görünümleri

getSystemViewUniversalIdentifier ve getSystemViewFieldUniversalIdentifier, twenty-sdk 2.26 sürümünden itibaren kullanılabilir ve Twenty sunucusunun 2.26 veya daha yeni bir sürümünü gerektirir.
Sunucu ayrıca her nesnede bir sistem görünümü de sağlar: ana liste görünümü (All {objectLabelPlural}, ViewKey.INDEX anahtarıyla), gösterilebilir her alan için bir sütunla. Sistem ilişki alanlarında olduğu gibi, tanımlayıcıları isimden bağımsız olarak türetilir; bu nedenle bir nesnenin veya alanın adını değiştirmeniz onları asla değiştirmez. Görünümü çözümlemek için getSystemViewUniversalIdentifier kullanın:
  • objectMetadataApplicationUniversalIdentifier, görünümün ad alanını belirleyen, nesneye sahip olan uygulamadır.
  • objectUniversalIdentifier, görünümün listelediği nesnedir.
  • viewKey, bugün için ViewKey.INDEX olan sistem görünüm anahtarıdır.
Çözümlenen kimlik, bir viewUniversalIdentifier beklendiği her yerde, örneğin bir NavigationMenuItemType.VIEW kenar çubuğu girdisinde çalışır. Sadece bir nesnenin ana listesini açmak için, targetObjectUniversalIdentifier ile NavigationMenuItemType.OBJECT kullanmayı tercih edin: hiçbir türetmeye ihtiyaç duymaz. getSystemViewFieldUniversalIdentifier, bir sistem görünümündeki tek bir sütunu, görünümden ve görüntülediği alandan yola çıkarak çözümler:
İlk argümana dikkat edin: bir sütun, görüntülediği alana sahip olan uygulamanın ad alanındadır, görünüme sahip olanın değil. Uygulamanızın standart bir nesneye eklediği bir alan, Twenty’ye ait bir görünüm üzerinde, kendi uygulamanız altında türetilen bir sütun alır.
Sistem görünümleri ve sütunları sunucuya aittir: bunları bildirmek için değil, yalnızca onlara başvurmak için tanımlayıcılarını çözümleyin. defineView() üzerindeki key kullanımdan kaldırılmıştır ve yok sayılır; bu nedenle bir bildirim görünümü asla INDEX anahtarını talep edemez ve sunucu, eklediğiniz her alan için zaten bir sütun sağlar; bu yüzden bir sistem görünümünde aynı alan için kendi defineViewField() bildiriminizi yapmak bununla çelişir.

Standart Twenty nesneleri

Standart bir Twenty nesnesi (Person, Company, Opportunity, …) için hiçbir şey türetmeniz gerekmez: hem alanlar hem de görünümler için, doğrudan içe aktarabileceğiniz önceden hesaplanmış sabit tanımlayıcılar vardır.
Yukarıdaki yardımcı işlevlere, defineObject() ile uygulamanızın tanımladığı ve böyle bir sabitin bulunmadığı nesneler için başvurun.
name, bir sistem alanı değil, bir varsayılan alandır. Kendi hardcode edilmiş evrensel tanımlayıcısını korur ve getFieldUniversalIdentifier ile çözülmez. Tanımladığınız nesnelerde, name alanına defineObject() içinde ona verdiğiniz tanımlayıcı ile referans verin.