Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Web uygulaması

Açıklama

Metadata çizimi

Web uygulamasının sunucu metadata belgesini modül sekmelerine, listelere, formlara, kartlara ve aksiyonlara nasıl dönüştürdüğü.

Web uygulamasında varlık başına ekran kodu yoktur. Her modülün yayımladığı metadata belgesini okur, oturum açmış kullanıcı ve kiracı için budar ve her parçayı genel bir motora verir. Bu sayfa GET /api/v1/_meta yanıtından boyanmış bir ekrana giden yolu açıklar. Metadata sınıflarının kendisi metadata modeli sayfasında listelenir.

Kısaca

  • loadMeta() /_meta, /_switches ve /_overlay uçlarını oturum başına bir kez yükler ve sonucu bellekte tutar (webapp/js/meta.js:16-47).
  • Hiçbir ekran belgeyi okumadan önce üç geçiş çalışır: izin budaması, görüntüleme anahtarı budaması ve kiracı alan katmanı (webapp/js/meta.js:29-38).
  • Bir modül uygulaması her kenar çubuğu bölümünü view_type değerine göre bir sekmeye çevirir (webapp/js/module-app.js:101-139).
  • Bir liste satırı detail_view.tabs ile kurulan bir kayıt kartı açar; kartın düzenleme kipi form.field_groups ile kurulan genel formdur (webapp/js/gen-list.js:816-844, webapp/js/gen-detail.js:63-139).
  • Etiketler geçerli dili seçen ve İngilizceye geri düşen resolveLabel ile çözülür (webapp/js/meta.js:284-288).

Nasıl çalışır

Belgeden ekrana

Akış şeması metadata'nın hangi parçasını hangi motorun çizdiğini gösterir.

flowchart TD
  meta["GET /_meta"] --> load["loadMeta"]
  sw["GET /_switches"] --> load
  ov["GET /_overlay"] --> load
  load --> prune["pruneGatedFields ve pruneSwitchedOff"]
  prune --> overlay["applyFieldOverlay"]
  overlay --> app["makeModuleScreen"]
  app -->|"view_type list veya tabbed_list"| list["makeGenList"]
  app -->|"view_type tree"| tree["makeGenTree"]
  app -->|"view_type settings"| settings["makeGenSettings"]
  app -->|"view_type custom"| custom["getCustomWidget"]
  list -->|"satıra dokunma"| detail["makeGenDetail"]
  detail -->|"form sekmeleri"| card["mountRecordForm"]
  card -->|"düzenleme veya oluşturma"| form["createGenForm"]
  list -->|"aksiyonlar"| sheet["openActionSheet"]

Aynı içerik adımlar halinde:

  1. loadMeta() ayrıştırılmış belgeyi raw içinde saklar (webapp/js/meta.js:27-28).
  2. pruneGatedFields, kullanıcının sahip olmadığı bir permission adlandıran form alanlarını ve aksiyon gövde alanlarını kaldırır (webapp/js/meta.js:53-74). Yorum, API'nin bu değerleri diğer herkes için çıkardığını, aksi hâlde formun boş ve yazılamaz bir kutu göstereceğini belirtir.
  3. pruneSwitchedOff, switch değeri kiracı için kapalı olan alanları, liste sütunlarını ve alt tablo sütunlarını kaldırır. Bilinmeyen bir anahtar açık sayılır (webapp/js/meta.js:80-105).
  4. applyFieldOverlay kiracının alan kararlarını uygular: kapatılan ürün alanları formdan ve listeden çıkar, kiracı tanımlı alanlar storage: "extra" ile form gruplarına katılır, isteğe bağlı liste sütunları ve süzgeçler eklenir ve kapatılmış alanlar salt okunur gösterim için tutulur (webapp/js/meta.js:117-231). Bkz. kiracı alanları.
  5. makeModuleScreen modülün kenar çubuğunu sekmelere düzleştirir (webapp/js/module-app.js:93-139). Bkz. modül uygulamaları ve uygulama kapsamı.
  6. Her sekmenin çizim işlevi kendi bölmesine boyar; böylece önceki bir sekmeden gelen geç yanıt kopuk bir düğüme düşer (webapp/js/module-app.js:183-192).

Bölüm türleri ve motorları

SidebarSectionMeta.view_type Motor Modül metadata'sındaki kullanım Kaynak
list makeGenList 84 webapp/js/module-app.js:115-116
tabbed_list her entity_tabs girdisi için bir makeGenList sekmesi 1 webapp/js/module-app.js:109-114
tree makeGenTree 1 webapp/js/module-app.js:117-118
settings tabs üzerinde makeGenSettings 9 webapp/js/module-app.js:119-125
custom custom_widget için kayıtlı bileşen 29 webapp/js/module-app.js:126-137
detail yok; modül uygulaması atlar 0 webapp/js/module-app.js:109-137

Kullanım sayıları src/cluster_erp/modules üzerinde grep -rn 'view_type="<value>"' ile yapıldı. hidden_from_bar taşıyan bir bölüm sekme almaz; required_permission taşıyan bir bölüm o koda sahip olmayan kullanıcı için sekme almaz (webapp/js/module-app.js:105-108).

Varlık parçaları ve motorları

Metadata parçası Çizen Sayfa
ListViewMeta (columns, filters, search_enabled, paginated) makeGenList genel liste
FormMeta ve FieldGroupMeta createGenForm, makeGenFormView, mountRecordForm genel form
DetailViewMeta ve DetailTabMeta makeGenDetail genel ayrıntı
TreeViewMeta makeGenTree genel ağaç ve ayar ekranları
ActionMeta openActionSheet, runEntityAction aksiyonlar ve aksiyon kartı
RecordLinkMeta kayıt kartının bağlantı girdileri, cluster:open-section olarak yayılır genel form
FacetMeta taraf kartındaki facet satırları genel ayrıntı
AvatarMeta avatar.js genel ayrıntı
HomeWidgetMeta ana ekran bileşen kaydı ana ekran bileşenleri
ModuleMeta.provides providerOf(capability) kayıt belgeleri, görüntüleyici ve paylaşım

Etiketler ve başlıklar

resolveLabel(label) etiketi geçerli dilde, sonra İngilizce etiketi, sonra boş dizeyi döndürür (webapp/js/meta.js:284-288). moduleLabel ilk kenar çubuğu grubu etiketini kullanır ve ham adın baş harfleri büyük biçimine geri düşer (webapp/js/meta.js:296-306). recordTitle(row, entityMeta) önce detail_view.title_field, sonra boş olmayan ilk liste sütunu, sonra display_name, name, title veya code kullanır ve hiçbir zaman bir kimlik kullanmaz (webapp/js/meta.js:392-414). langLabel(row) referans satırlarındaki label_<lang> sütunlarını İngilizce ve kod geri dönüşleriyle okur (webapp/js/meta.js:418-421).

Yetenek araması

providerOf(capability), ModuleMeta.provides içinde bir yetenek bildiren modülü bulur; böylece genel kod onu sunan modülü hiç adlandırmaz (webapp/js/meta.js:423-432). Kayıt belgeleri özelliği record_documents yeteneğini kullanır (webapp/js/record-docs.js:23-37). tests/test_metadata_driven_rules.py:63 bu sağlayıcının yetenekle bildirildiğini denetler.

Katman tazeleme

Bir kiracı alan tanımı veya ayarı değiştiğinde meta.js, varlık türü tenant_field_definition veya tenant_field_setting olan veri değişti sinyalini dinler ve katmanı yeniden kurulan bir taban üzerine tekrar uygular (webapp/js/meta.js:233-256). Açık ekranlar yeniden açılana kadar kuruldukları metadata'yı korur (webapp/js/meta.js:233-235).

Neden böyle kurulu

  • Projenin yazılı mühendislik kuralları ekran, form, liste ve aksiyon davranışının metadata'dan gelmesini ister. Bkz. metadata güdümlü arayüz.
  • webapp/js/meta.js:31-35 içindeki yorum, 3 MB belgenin bir kopyası bir masaüstünde yaklaşık 100 ms tuttuğu için tabanın açılışta kopyalanmak yerine gerektiğinde yeniden kurulduğunu belirtir.
  • Sunucu None değerlerini belgeden çıkarır. 92f8051 commit'inde src/cluster_erp/server/app.py:1534-1537 içindeki yorum, null değerlerin belgenin yarısı olduğunu ve her istemcinin eksik bir anahtarı ayarlanmamış saydığını belirtir.

Kurallar ve sınırlar

  • Genel motorlar hiçbir iş modülünü adlandırmaz. tests/test_architecture_boundaries.py:75 gen-list.js, gen-detail.js, gen-form.js, entity.js ve gen-settings.js dosyalarını tarar.
  • Sunucu açılışta bir sub_entity_table sekmesinin sütunları olan bir varlığı gösterdiğini denetler (92f8051 commit'inde src/cluster_erp/server/app.py:547-589).
  • Metadata belgesi sunucu süreci başına bir kez kurulur. Bir metadata değişikliği yeniden başlatmadan sonra etkili olur (src/cluster_erp/server/app.py:1530-1543).

Diğer parçalarla etkileşim

Sınırlar ve açık noktalar

  • EntityMeta.lock (RecordLockMeta) webapp/js/ içindeki hiçbir dosya tarafından okunmaz; .lock araması hiçbir okuyucu bulmadı. Kilidi sunucunun servisleri uygular.
  • Bileşeni kayıtlı olmayan özel bir bölüm, bozuk bir sekme yerine konsol hatasıyla atlanır (webapp/js/module-app.js:126-137).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
metadata store loadMeta Bir kez yüklenen, budanan ve genel ekranlara sunulan, sunucu metadata'sının istemci tarafındaki kopyası. metadata deposu webapp/js/meta.js:16
field overlay applyFieldOverlay Kiracının alan kararlarını ürünle gelen formların ve listelerin üzerine koyan geçiş. alan katmanı webapp/js/meta.js:117
capability provider providerOf Bildirilmiş bir yeteneği sunan modülü bulan arama. yetenek sağlayıcısı webapp/js/meta.js:425

İlgili sayfalar


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

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