Masaüstü istemci ekranlarını sunucunun yayımladığı metadata'dan çizer. Bu sayfa, src/cluster_erp/desktop/ altındaki core/metadata_store.py dosyasının bu metadata'yı nasıl yükleyip uyarladığını, core/fk_cache.py dosyasının yabancı anahtar alanlarının seçenek listelerini nasıl yükleyip önbelleğe aldığını ve core/entity_types.py dosyasının neyi bildirdiğini açıklar. Sunucu tarafı sözleşme metadata modeli sayfasında açıklanır. Web istemcisinin aynı işi nasıl yaptığı metadata çizimi sayfasındadır.
Kısaca¶
MetadataStore.load,GET /_metaokur, ardından sırasıyla görüntü anahtarlarını, izinle kapılı alanları, kiracı alan katmanını ve uygulama kapsamını uygular (src/cluster_erp/desktop/core/metadata_store.py:19-32)./_metasonrasındaki herhangi bir adımın başarısız olması metadata'yı gönderildiği gibi bırakır ve hiçbir şeyi gizlemez (src/cluster_erp/desktop/core/metadata_store.py:39-82).register_labelsher metadata etiketinimeta.<module>...anahtarları altında çevirmene kopyalar (src/cluster_erp/desktop/core/metadata_store.py:119-192).FkCachebir seçenek listesini 200'er satırlık sayfalarla gezer, 300 saniye tutar, en çok 50 liste saklar ve bir modülün listelerini o modülün her değişiklik sinyalinde düşürür (src/cluster_erp/desktop/core/fk_cache.py:13-14,src/cluster_erp/desktop/core/fk_cache.py:51-77,src/cluster_erp/desktop/core/fk_cache.py:164-214).
Nasıl çalışır¶
Metadata'nın yüklenmesi¶
load() açılışta, ana pencere oluşmadan önce bir kez çalışır. main() onu en çok üç kez yeniden dener (src/cluster_erp/desktop/main.py:194-222). Adımlar şunlardır:
GET /_metaham belgeyi doldurur. BaşarısızlıkFalsedöndürür (src/cluster_erp/desktop/core/metadata_store.py:20-27)._apply_switches,GET /_switchesokur veprune_switched_offçağırır.switchdeğeri kapalı olan bir alan ya da sütun formlardan, liste görünümlerinden, alt tablolardan ve aksiyon gövdelerinden çıkarılır. Bilinmeyen bir anahtar açık sayılır (src/cluster_erp/desktop/core/metadata_store.py:52-60,src/cluster_erp/desktop/core/metadata_store.py:443-473).prune_gated_fields, kullanıcının sahip olmadığı birpermissionadlandıran her alanı form gruplarından ve aksiyon formlarından çıkarır (src/cluster_erp/desktop/core/metadata_store.py:231-265)._apply_field_overlay,GET /_overlayokur veapply_field_overlayçağırır (src/cluster_erp/desktop/core/metadata_store.py:39-46)._load_app_scope,GET /app_store/registryokur ve gizli modülleri hesaplar (src/cluster_erp/desktop/core/metadata_store.py:67-82).
Kiracı alan katmanı¶
apply_field_overlay, katmandaki her varlık için metadata'yı yerinde değiştirir (src/cluster_erp/desktop/core/metadata_store.py:268-440):
- Kiracının kapattığı gönderilmiş bir alan kendi grubundan çıkar. Salt okunur ve zorunlu olmayan olarak, yalnızca mevcut kayıtlarda gösterilen
closed_fieldsanahtarlı tek bir gruba taşınır (src/cluster_erp/desktop/core/metadata_store.py:308-328,src/cluster_erp/desktop/core/metadata_store.py:429-440). - Zorunluluk geçersiz kılması olan gönderilmiş bir alan zorunlu olur (
src/cluster_erp/desktop/core/metadata_store.py:325-326). - Kiracının tanımladığı bir alan,
storagedeğeriextraolarak hedef grubuna katılır. Koşullu bir alan, hedef grubun hemen ardından kendi koşullu grubunu alır. İzinle kapılı bir alan yalnızca sahipleri için eklenir (src/cluster_erp/desktop/core/metadata_store.py:329-394). - Liste için işaretli bir kiracı alanı, esneyen sütundan sonra eklenen
extra.<key>anahtarlı bir sütun alır (src/cluster_erp/desktop/core/metadata_store.py:395-410). - Bir alan kovasını toplayan aksiyon formları aynı anahtarları izler ve türetilmiş alanlar dışında o kovanın kiracı alanlarını alır (
src/cluster_erp/desktop/core/metadata_store.py:392-394,src/cluster_erp/desktop/core/metadata_store.py:411-428).
Kiracı alanlarının sunucu tarafı kiracı alanları sayfasında açıklanır.
Uygulama kapsamı¶
hidden_modules(registry), yalnızca kullanıcının kullanamadığı uygulamaların kapsadığı modülleri döndürür. Bildirimi system veya permanent olan ya da durumu kurulu, hak kazanılmış ve koltuklu olan bir uygulama kullanılabilirdir. Hiçbir uygulamanın kapsamadığı bir modül asla gizlenmez (src/cluster_erp/desktop/core/metadata_store.py:207-228). sorted_modules gizli modülleri dışarıda bırakır ve kalanları order değerine göre sıralar. module ve entity gizli bir modülü adıyla sorulduğunda yine döndürür (src/cluster_erp/desktop/core/metadata_store.py:93-110). Lisanslama uygulama mağazası, lisanslama ve haklar sayfasında açıklanır.
tests/test_desktop_app_scope.py bu davranışı sabitler: gizli küme sunucu kapısını yansıtır, koltuk varsa belirleyicidir, doğrudan arama çalışmaya devam eder, kapalı alanlar budanır ve kayıt defterinin başarısız olması hiçbir şeyi gizlemez (tests/test_desktop_app_scope.py:61-131).
Etiketler¶
Metadata etiketleri dile göre anahtarlanmış sözlüklerdir. resolve(label, lang) metni o dilde, yoksa İngilizce, yoksa boş metin olarak döndürür (src/cluster_erp/desktop/core/metadata_store.py:112-117). register_labels, Translator.t bulabilsin diye etiketleri çevirmene kaydeder (src/cluster_erp/desktop/core/metadata_store.py:119-192, src/cluster_erp/desktop/i18n/translator.py:57-70):
| Anahtar kalıbı | Etiket kaynağı | Kaynak |
|---|---|---|
meta.<module>.group.<key> |
kenar çubuğu grubu | src/cluster_erp/desktop/core/metadata_store.py:131 |
meta.<module>.section.<key> |
kenar çubuğu bölümü | src/cluster_erp/desktop/core/metadata_store.py:132-137 |
meta.<module>.<entity>.label ve .label_plural |
varlık | src/cluster_erp/desktop/core/metadata_store.py:140-142 |
meta.<module>.<entity>.col.<key> |
liste görünümü ve alt tablo sütunları | src/cluster_erp/desktop/core/metadata_store.py:144-149 |
meta.<module>.<entity>.filter.<key> ve .filter.<key>.<value> |
liste süzgeçleri ve seçenekleri | src/cluster_erp/desktop/core/metadata_store.py:151-158 |
meta.<module>.<entity>.grp.<key>, .fld.<key>, .fld.<key>.<value> |
form grupları, alanlar ve seçenekler | src/cluster_erp/desktop/core/metadata_store.py:160-171 |
meta.<module>.<entity>.tab.<key> |
ayrıntı görünümü sekmeleri | src/cluster_erp/desktop/core/metadata_store.py:173-176 |
meta.<module>.<entity>.action.<key> |
aksiyonlar | src/cluster_erp/desktop/core/metadata_store.py:178-179 |
meta.<module>.<entity>.scope |
kapsam seçici | src/cluster_erp/desktop/core/metadata_store.py:181-183 |
Yabancı anahtar önbelleği¶
FkCache her seçenek listesi için iki eşlem sunar: kimlikten görüntü metnine ve kimlikten tam satıra (src/cluster_erp/desktop/core/fk_cache.py:36-50). Önbellek anahtarı module:endpoint:display_field biçimindedir; sorgu parametreleri varsa sıralı olarak eklenir, böylece farklı parametrelerle kapsanan listeler çakışmaz (src/cluster_erp/desktop/core/fk_cache.py:17-33).
| Yöntem | Davranış | Kaynak |
|---|---|---|
preload |
Liste yoksa ya da ömründen eskiyse yükler ve kimlikten metne eşlemin bir kopyasını döndürür | src/cluster_erp/desktop/core/fk_cache.py:145-162 |
resolve |
Bir kimliğin görüntü metnini döndürür. Bilinmeyen bir kimlik ilk sekiz karakterini döndürür | src/cluster_erp/desktop/core/fk_cache.py:94-108 |
get_item |
Bir kimliğin tam satırını döndürür | src/cluster_erp/desktop/core/fk_cache.py:110-128 |
invalidate |
Bir modül ve ucun tüm listelerini düşürür | src/cluster_erp/desktop/core/fk_cache.py:130-137 |
invalidate_all |
Tüm listeleri düşürür | src/cluster_erp/desktop/core/fk_cache.py:139-143 |
_load, limit 200 ve artan offset ile /<module><endpoint> ister. Düz bir listeyi ya da items ve total içeren bir nesneyi kabul eder ve sayfa kısa kaldığında ya da total değerine ulaşıldığında durur. Görüntü metni yapılandırılmış alandır, yoksa name (src/cluster_erp/desktop/core/fk_cache.py:164-214). Yeni bir anahtar eklemeden önce yer açılana kadar en eski girdileri çıkarır (src/cluster_erp/desktop/core/fk_cache.py:85-92, src/cluster_erp/desktop/core/fk_cache.py:175-177). Başarısız bir yükleme boş bir listeyi önbelleğe almak yerine anahtarı siler (src/cluster_erp/desktop/core/fk_cache.py:215-223).
Varlık tanımlayıcıları¶
entity_types.py, module ve entity_type alanlı dondurulmuş bir veri sınıfı olan EntityDescriptor bildirir (src/cluster_erp/desktop/core/entity_types.py:6-9). Ayrıca beş sabit bildirir: core sözde modülünde NOTE ve ATTACHMENT, documents modülünde DOCUMENT_TYPE, DOCUMENT ve DOCUMENT_VERSION (src/cluster_erp/desktop/core/entity_types.py:15-29). Genel ekranlar kendi tanımlayıcılarını metadata'dan kurar, örneğin src/cluster_erp/desktop/core/generic_api.py:22.
Neden böyle kurulmuştur¶
- Kapılı alanların budanması:
src/cluster_erp/desktop/core/metadata_store.py:232-234içindeki belge dizgesi, API değeri çıkardığı için aksi halde yazılamayan boş bir kutunun görüneceğini belirtir. - Anahtarların varsayılan olarak açık olması:
src/cluster_erp/desktop/core/metadata_store.py:49-51içindeki yorum, hiçbir şeyin kazara boşaltılmadığını belirtir. - Uygulama kapsamının web kabuğunu yansıtması:
src/cluster_erp/desktop/core/metadata_store.py:63-66içindeki yorum, masaüstünün web kabuğuyla aynı modülleri gösterdiğini ve aynı kuralı API kapısının uyguladığını belirtir. - Başarısız yüklemelerin önbelleğe alınmaması:
src/cluster_erp/desktop/core/fk_cache.py:217-220içindeki yorum, boş bir önbellek listesinin bir kaydetmenin çözülmemiş yabancı anahtar değerlerini sessizce temizlemesine yol açabileceğini belirtir.
Kurallar ve sınırlar¶
- Masaüstü ve web istemcileri aynı metadata biçimlerini budamalıdır.
tests/test_order_shipment_chain.py:201(test_web_and_desktop_prune_the_same_shapes),prune_switched_offişlevini masaüstü deposundan içe aktarır (tests/test_order_shipment_chain.py:16). - Bir modülün seçenek listeleri, varlık türü ne olursa olsun o modülün her değişiklik sinyalinde düşürülür (
src/cluster_erp/desktop/core/fk_cache.py:65-77).
Diğer parçalarla etkileşim¶
- Metadata, metadata modeli ve kiracı alanları sayfalarında açıklanan sunucu rotalarından gelir.
Sidebar,MainWindowve her genel bileşen depoyu okur; bkz. sekmeler, bölmeler ve yerleşim ve genel bileşenler.- Yabancı anahtar alanları
FkCache.preloadişleviniGenericForm._fill_fk_comboüzerinden çağırır (src/cluster_erp/desktop/widgets/generic/generic_form.py:841-900).
Sınırlar ve açık noktalar¶
- Metadata süreç başına bir kez yüklenir.
src/cluster_erp/desktop/içinde açılıştan sonra onu yeniden yükleyen kod yoktur; bu, depo üzerindeload(çağrıları aranarak bulundu. FkCache._loadHTTP isteklerini önbellek kilidini tutarken ve çağıran iş parçacığında yürütür (src/cluster_erp/desktop/core/fk_cache.py:102-104,src/cluster_erp/desktop/core/fk_cache.py:164-189). Formlar onu GUI iş parçacığından çağırır (src/cluster_erp/desktop/widgets/generic/generic_form_dialog.py:189-190).- Kapalı alanlar grubunun yedek etiketi, katman bir etiket göndermediğinde kullanılan sabit bir İngilizce metindir (
src/cluster_erp/desktop/core/metadata_store.py:275). DOCUMENT_TYPE,DOCUMENTveDOCUMENT_VERSIONsabitlerininsrc/cluster_erp/desktop/içinde kullanıcısı yoktur.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| metadata store | MetadataStore |
Bir kez yüklenen, budanan ve genel ekranlara sunulan, sunucu metadata'sının istemci tarafındaki kopyası. | metadata deposu | src/cluster_erp/desktop/core/metadata_store.py:13 |
| foreign-key cache | FkCache |
Yabancı anahtar alanları ve sütunları için tam seçenek listelerinin masaüstü önbelleği. | yabancı anahtar önbelleği | src/cluster_erp/desktop/core/fk_cache.py:36 |
| hidden modules | hidden_modules |
Yalnızca kullanıcının kullanamadığı uygulamaların kapsadığı, kenar çubuğuna konmayan modüller. | gizli modüller | src/cluster_erp/desktop/core/metadata_store.py:207 |
| closed fields group | closed_fields |
Kapatılmış alanları mevcut kayıtlarda gösteren salt okunur grup. | kapalı alanlar grubu | src/cluster_erp/desktop/core/metadata_store.py:434 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.