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,/_switchesve/_overlayuç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_typedeğerine göre bir sekmeye çevirir (webapp/js/module-app.js:101-139). - Bir liste satırı
detail_view.tabsile kurulan bir kayıt kartı açar; kartın düzenleme kipiform.field_groupsile 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
resolveLabelile çö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:
loadMeta()ayrıştırılmış belgeyirawiçinde saklar (webapp/js/meta.js:27-28).pruneGatedFields, kullanıcının sahip olmadığı birpermissionadlandı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.pruneSwitchedOff,switchdeğ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).applyFieldOverlaykiracının alan kararlarını uygular: kapatılan ürün alanları formdan ve listeden çıkar, kiracı tanımlı alanlarstorage: "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ı.makeModuleScreenmodülün kenar çubuğunu sekmelere düzleştirir (webapp/js/module-app.js:93-139). Bkz. modül uygulamaları ve uygulama kapsamı.- 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-35iç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
Nonedeğerlerini belgeden çıkarır. 92f8051 commit'indesrc/cluster_erp/server/app.py:1534-1537iç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:75gen-list.js,gen-detail.js,gen-form.js,entity.jsvegen-settings.jsdosyalarını tarar. - Sunucu açılışta bir
sub_entity_tablesekmesinin sütunları olan bir varlığı gösterdiğini denetler (92f8051 commit'indesrc/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¶
- Masaüstü istemci aynı belgeyi çizer; bkz. masaüstü bölümü.
- İstemcinin
hasPermissionile denetlediği izin kodları aynı metadata'dan tohumlanır; bkz. roller ve izinler.
Sınırlar ve açık noktalar¶
EntityMeta.lock(RecordLockMeta)webapp/js/içindeki hiçbir dosya tarafından okunmaz;.lockaraması 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¶
- Web uygulaması platformu
- Metadata modeli
- Modül uygulamaları ve uygulama kapsamı
- Metadata ile ekran ekleyin
- Metadata güdümlü arayüz
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.