Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Masaüstü istemci

Açıklama

Metadata deposu ve yabancı anahtar önbelleği

Masaüstü MetadataStore'un metadata'yı yükleyip budaması, uygulama kapsamı, etiketler ve FkCache seçenek listesi önbelleği.

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 /_meta okur, 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).
  • /_meta sonrası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_labels her metadata etiketini meta.<module>... anahtarları altında çevirmene kopyalar (src/cluster_erp/desktop/core/metadata_store.py:119-192).
  • FkCache bir 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:

  1. GET /_meta ham belgeyi doldurur. Başarısızlık False döndürür (src/cluster_erp/desktop/core/metadata_store.py:20-27).
  2. _apply_switches, GET /_switches okur ve prune_switched_off çağırır. switch değ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).
  3. prune_gated_fields, kullanıcının sahip olmadığı bir permission adlandıran her alanı form gruplarından ve aksiyon formlarından çıkarır (src/cluster_erp/desktop/core/metadata_store.py:231-265).
  4. _apply_field_overlay, GET /_overlay okur ve apply_field_overlay çağırır (src/cluster_erp/desktop/core/metadata_store.py:39-46).
  5. _load_app_scope, GET /app_store/registry okur 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_fields anahtarlı 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, storage değeri extra olarak 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-234 iç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-51 iç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-66 iç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-220 iç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_off iş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

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 üzerinde load( çağrıları aranarak bulundu.
  • FkCache._load HTTP 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, DOCUMENT ve DOCUMENT_VERSION sabitlerinin src/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ı.

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