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_fieldsbildirerek katılır (src/cluster_erp/core/metadata.py:517-550). 25 metadata bildirimi bunu yapar (src/cluster_erp/modulesüzerindegrep -rn "tenant_fields=TenantFieldsMeta"ile sayıldı). - Kiracının kararlarını üç tablo tutar:
core_field_catalog,core_field_definitionsvecore_field_settings(src/cluster_erp/core/tenant_fields.py:168-295). - Bir kiracı alanının değeri kova satırının
extraJSONB sütunundaextra[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/_overlayile 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_DUPLICATEile 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üzerindeTenantFieldService,validate_extraveyatenant_fields importiçingrep -rlnile sayıldı). - Modüller başka kodun dayandığı gelen alanları
DescribeFieldConsumersolayı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ı.