Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Platform

Açıklama

Kiracı alanları

Yöneticinin gelen alanları kapatmasını ve extra JSONB torbasında saklanan kiracı tanımlı alanlar eklemesini sağlayan mekanizma.

Kiracı alanları her kiracının, kod değişikliği olmadan formlarının ne topladığına karar vermesini sağlar: gelen alanlar kapatılabilir veya zorunlu yapılabilir ve yeni alanlar eklenebilir. Bu sayfa src/cluster_erp/core/tenant_fields.py içindeki çekirdek servisi ve src/cluster_erp/server/routes/tenant_fields.py içindeki rotaları anlatır. Üzerine kurulduğu metadata sınıfları metadata modeli sayfasında listelenir.

Kısaca

  • Bir varlık, bir veya daha fazla depolama kovasıyla EntityMeta.tenant_fields bildirerek katılır (src/cluster_erp/core/metadata.py:517-550). 25 metadata bildirimi bunu yapar (src/cluster_erp/modules üzerinde grep -rn "tenant_fields=TenantFieldsMeta" ile sayıldı).
  • Kiracının kararlarını üç tablo tutar: core_field_catalog, core_field_definitions ve core_field_settings (src/cluster_erp/core/tenant_fields.py:168-295).
  • Bir kiracı alanının değeri kova satırının extra JSONB sütununda extra[key] olarak durur (src/cluster_erp/core/tenant_fields.py:16-19, src/cluster_erp/core/metadata.py:142-146).
  • İstemciler sabit metadata'nın üzerine GET /api/v1/_overlay ile kiracıya özel bir katman uygular (src/cluster_erp/server/routes/tenant_fields.py:446-456).
  • Ayar ekranları üretilir: servis, bildiren modülün metadata'sına ayar varlıkları ekler (src/cluster_erp/core/tenant_fields.py:3433-3497).

Nasıl çalışır

Üç tablo

Tablo Sınıf Bir satırın anlamı Kaynak
core_field_catalog FieldCatalogEntry Kiracının topladığı, bir kez tanımlanan bir kavram: kod, etiketler, tür, seçenekler, kategori, koruma sınıfı, izin src/cluster_erp/core/tenant_fields.py:168-201
core_field_definitions FieldDefinition Bir kavramın bir varlık kovasına yerleşimi: own (satırda saklanır) veya derived (bağlı bir kayıttan salt okunur gösterilir) src/cluster_erp/core/tenant_fields.py:208-266
core_field_settings FieldSetting Kiracının gelen bir alan için kararı: etkin, zorunluluk geçersiz kılma, sıra, liste ve süzgeç bayrakları src/cluster_erp/core/tenant_fields.py:269-292

Üçü de BaseModel'den türer; bu yüzden silinmez, kullanımdan kaldırılır ve benzersiz dizinleri yalnızca canlı satırları kapsar (src/cluster_erp/core/tenant_fields.py:194-201, src/cluster_erp/core/tenant_fields.py:255-266, src/cluster_erp/core/tenant_fields.py:287-295). Bir tanımı kapatmak is_active değerini false yapar; saklanan değerler kalır ve salt okunur gösterilir (src/cluster_erp/core/tenant_fields.py:9-13).

Metadata'dan tanımlar

Açılışta sunucu her modülün metadata'sıyla build_specs çağırır (src/cluster_erp/server/app.py:151). Tanımlar bildiren her varlığı, kovalarını, her kovanın gelen alanlarını ve varlıklar arası yabancı anahtar bağlantılarını kaydeder (src/cluster_erp/core/tenant_fields.py:300-354, src/cluster_erp/core/tenant_fields.py:451-500). bucket_for_table bir tablo adını bir varlığa ve kovaya geri eşler; değişiklik geçmişi onu kullanır (src/cluster_erp/core/tenant_fields.py:506-513, src/cluster_erp/core/change_history.py:373).

Değerler

Sahip servisler bir satırı saklamadan önce TenantFieldService.validate_extra çağırır. Her anahtar kovanın bilinen, açık bir alanı olmalıdır ve her değer tanımına göre dönüştürülür. Kapalı bir alan saklanan değerini korur ama yeni değer almaz; bilinmeyen bir anahtar reddedilir (src/cluster_erp/core/tenant_fields.py:1942-1955). coerce_value sekiz alan türünü işler ve ondalık sayıyı dizgi olarak saklar (src/cluster_erp/core/tenant_fields.py:139-150, src/cluster_erp/core/tenant_fields.py:854-911). İhlaller FIELD_VALUE_INVALID yükseltir (src/cluster_erp/core/errors.py:61-66).

Katman ve ayar ekranları

Akış şeması bir kiracının kararlarının bir istemciye nasıl ulaştığını gösterir.

flowchart LR
 meta["Modül metadata'sı: tenant_fields kovaları"] --> specs["açılışta build_specs"]
 specs --> inject["with_tenant_field_entities"]
 inject --> metaapi["GET /api/v1/_meta"]
 tables["core_field_catalog, definitions, settings"] --> overlay["TenantFieldService.overlay"]
 specs --> overlay
 overlay --> overlayapi["GET /api/v1/_overlay"]
 metaapi --> client["Web ve masaüstü istemciler"]
 overlayapi --> client

Düz metinle: metadata belgesi süreç başına tek kalır ve bildiren modüle eklenmiş tenant_field_setting, tenant_field_definition ve tenant_field_catalog ayar varlıklarını taşır (src/cluster_erp/core/tenant_fields.py:3430-3474). Ayar bölümü olmayan bir modül bir tane alır (src/cluster_erp/core/tenant_fields.py:3484-3497). Katman her istekte kiracının tablolarından hesaplanır: eklenecek alanlar, budanacak gelen alanlar ve salt okunur gösterilecek kapalı alanlar (src/cluster_erp/server/routes/tenant_fields.py:446-456).

Rotalar

Ayar rotaları bildiren her modülün altında /api/v1/{module}/_fields/... yolunda durur; böylece genel liste ve form motorları onlara diğer her uç gibi ulaşır (src/cluster_erp/server/routes/tenant_fields.py:1-9, src/cluster_erp/server/routes/tenant_fields.py:42). 18 rota vardır: tanımlar (listele, oluştur, getir, güncelle, kapat, yeniden aç), ayarlar (listele, getir, güncelle), katalog (listele, oluştur, getir, güncelle, bağla, türet, kapat, yeniden aç) ve katman (@router. ve @overlay_router. dekoratörlerinden sayıldı, src/cluster_erp/server/routes/tenant_fields.py:150-456). Her ayar rotası varlığının adını taşıyan bir izin ister; örneğin tenant_field_definition.read (src/cluster_erp/server/routes/tenant_fields.py:155).

Arama ve geçmiş

Bir alan aranabilir olduğunda servis, metin aramasıyla aynı normalleştirilmiş ifadeyi kullanarak extra->>'key' üzerinde eşzamanlı bir trigram ifade dizini kurar (src/cluster_erp/core/tenant_fields.py:1681-1690). Bkz. arama, sayfalama ve toplu işlemler. Değişiklik geçmişi extra.<key> değerini bir sütun gibi kaydeder, koruma sınıfı 3 ve üstü anahtarları gizler ve onaydan sonra TenantFieldValuesChanged yayınlar (src/cluster_erp/core/tenant_fields.py:916-922, src/cluster_erp/core/change_history.py:137-151, src/cluster_erp/core/change_history.py:357-386).

Neden böyle kurulmuştur

  • Modül belge dizgisi tasarımı belirtir: bir varlık yalnızca kovalarını metadata'da bildirir, geri kalan her şey bu modüldeki platform işidir; böylece modüller birbirini içe aktarmaz (src/cluster_erp/core/tenant_fields.py:1-31).
  • Katalog belge dizgisi kavramların neden bir kez tanımlandığını belirtir: her yerleşim etiketi, seçenekleri ve korumayı paylaşır; böylece aynı şey asla iki farklı yazımlı iki alan olmaz (src/cluster_erp/core/tenant_fields.py:169-174).

Kurallar ve sınırlar

  • Bir alan anahtarı ^[a-z][a-z0-9_]{1,59}$ desenine uymalı ve gelen bir sütun olmamalıdır (src/cluster_erp/core/tenant_fields.py:152-153).
  • Her kategorinin en düşük bir koruma sınıfı vardır; bir alan daha çok korunabilir, asla daha az değil (src/cluster_erp/core/tenant_fields.py:86-101).
  • Koruma sınıfı 3'ten itibaren bir alan izin kapısı ister (src/cluster_erp/core/tenant_fields.py:154-155). Alan düzeyi erişim alan ve satır erişimi sayfasında belgelenir.
  • Var olan bir kavramı yineleyen yeni bir alan FIELD_DEFINITION_DUPLICATE ile reddedilir (src/cluster_erp/core/errors.py:67-70).

Diğer parçalarla etkileşim

  • 15 modüldeki sahip servisler servisi kullanır (src/cluster_erp/modules üzerinde TenantFieldService, validate_extra veya tenant_fields import için grep -rln ile sayıldı).
  • Modüller başka kodun dayandığı gelen alanları DescribeFieldConsumers olayını yanıtlayarak bildirir (src/cluster_erp/core/contracts.py:2470). Bkz. sözleşmeler başvurusu.

Sınırlar ve açık noktalar

  • Dizin kurma hatası yükseltilmez, günlüğe yazılır; o alanda arama sonraki denemeye kadar dizinsiz çalışır (src/cluster_erp/core/tenant_fields.py:1684-1687).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
tenant field FieldDefinition Bir varlık kovasına yerleştirilmiş kiracı tanımlı alan. kiracı alanı src/cluster_erp/core/tenant_fields.py:208
field catalogue FieldCatalogEntry Her biri bir kez tanımlanan kiracı alan kavramları listesi. alan kataloğu src/cluster_erp/core/tenant_fields.py:168
bucket TenantBucketMeta Kiracı alanı değerlerini extra sütununda saklayan satır türü. kova src/cluster_erp/core/metadata.py:517
overlay overlay İstemcilerin sabit metadata'ya uyguladığı kiracıya özel değişiklikler. katman src/cluster_erp/core/tenant_fields.py:1856
protection class protection_class Bir alanın değerlerinin ne kadar hassas olduğunu söyleyen K0 ile K4 arası düzey. koruma sınıfı src/cluster_erp/core/tenant_fields.py:129-137

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13