Oluşturma, düzenleme ve devre dışı bırakmanın ötesindeki her iş adımı bir metadata aksiyonudur (ActionMeta): onaylama, gönderme, dönüştürme, yeniden hesaplama, bir belge açma. Web uygulaması bunları hiçbir zaman satır içi düğmeler olarak çizmez. Etiketli bir Aksiyonlar düğmesinin (toolbar.actions) arkasında sunar ve ekranın altından yükselen bir kartta listeler. Bu sayfa aksiyonların nerede göründüğünü, webapp/js/action-sheet.js dosyasının onları nasıl çalıştırdığını ve durum değişikliklerinin aksiyonlarla nasıl ilerlediğini açıklar. Sınıfın kendisi metadata modeli sayfasında listelenir.
Kısaca¶
ActionMeta.scopedeğeriglobal,single_recordveyaparentolur (src/cluster_erp/core/metadata.py:418-434). Modül metadata'sı 210 aksiyon bildirir: 188single_record, 21globalve 1parent(src/cluster_erp/modulesüzerindeActionMeta(ve herscope=değeri içingrep -rnile sayıldı).- Bir
single_recordaksiyonu yalnız satır için her koşul sağlandığında sunulur (webapp/js/action-sheet.js:20-34). - Bir aksiyon üç yoldan biriyle çalışır:
GETucu dönen dosyayı görüntüleyicide açar, gövde alanı olmayan bir aksiyon onay ister ve gönderir, gövde alanları olan bir aksiyon bir form açar (webapp/js/action-sheet.js:118-223). - Başarılı ve
GETolmayan bir aksiyonGenApi.actionüzerinden veri değişti sinyalini yayar (webapp/js/gen-api.js:164-174).
Nasıl çalışır¶
Aksiyonların göründüğü yerler¶
| Yer | Sunulan aksiyonlar | Kaynak |
|---|---|---|
| Liste gezinme çubuğunda Aksiyonlar düğmesi | single_record ve parent olmayan tüm aksiyonlar |
webapp/js/gen-list.js:407, webapp/js/gen-list.js:551-562 |
| Liste seçim çubuğunda Aksiyonlar | Seçili tek satıra uyan single_record aksiyonları; sıfır veya birden çok satırda devre dışı |
webapp/js/gen-list.js:614-640 |
| Kayıt kartı gezinme çubuğunda Aksiyonlar | Açık kayda uyan single_record aksiyonları |
webapp/js/gen-form.js:2387-2393, webapp/js/gen-form.js:2335-2337 |
| Ayar ekranı satırları | Seçili satırlarda single_record aksiyonları, diğerleri genel girdiler olarak |
webapp/js/gen-settings.js:165-177, webapp/js/gen-settings.js:225 |
| Ayrıntı alt listeleri | Alt varlığın aksiyonları, aynı biçimde süzülür | webapp/js/gen-detail.js:30 |
| Arama sonuçları | Her aksiyon, yaşadığı ekranı açan bir hedef olarak | webapp/js/search-index.js:78-127 |
Projenin yazılı mühendislik kuralları aksiyonlar için etiketli bir giriş düğmesi ister, çünkü yalnız simgeli bir giriş keşfedilmedi. Liste kodu aynı gerekçeyi belirtir (webapp/js/gen-list.js:557-559).
Aksiyon kartı akışı¶
Akış şeması bir aksiyonu düğmeden sunucuya kadar izler.
flowchart TD
chip["Aksiyonlar düğmesi"] --> sheet["openActionSheet"]
sheet -->|"seçim"| run["runEntityAction"]
run --> method{"uç yöntemi"}
method -->|"GET"| blob["apiFetchBlob"]
blob --> viewer["openViewer"]
method -->|"diğer"| body{"body_fields veya body_field_groups"}
body -->|"yok"| confirm["confirmAlert"]
confirm -->|"onaylandı"| post["GenApi.action"]
body -->|"var"| form["createGenForm ile pushView"]
form -->|"Kaydet ve geçerli"| post
post --> signal["emitDataChanged"]
post --> toast["showToast"]Aynı akış adımlar halinde:
openActionSheet({title, subtitle, actions, onPick})kalıcı bir kart kurar. Her satır aksiyon etiketini ve varsadescriptiondeğerini gösterir (webapp/js/action-sheet.js:55-85). Escape, kartın dışına dokunma ve İptal onu kapatır; açıkken odak içeride tutulur (webapp/js/action-sheet.js:87-106).runEntityAction(moduleName, entityMeta, action, target, opts)uç yöntemini okur (webapp/js/action-sheet.js:118-128).- Bir
GETaksiyonu yanıtı blob olarak getirir ve belge görüntüleyicide açar. Onay istemez, sinyal yaymaz veonDoneçağırmaz (webapp/js/action-sheet.js:129-148). Bkz. kayıt belgeleri, görüntüleyici ve paylaşım. body_fieldsvebody_field_groupstaşımayan bir aksiyon bir onay iletişim kutusu gösterir. İleti, bildirilmişse aksiyonundescriptiondeğeri, değilsecommon.confirm_actionolur (webapp/js/action-sheet.js:157-165). Ardından boş bir gövde gönderir ve sunucununmessagedeğerini veyacommon.successgösterir (webapp/js/action-sheet.js:166-173).- Gövde alanları olan bir aksiyon, bu alanlardan kurulan genel bir form, giriş satırı olarak açıklama ve aksiyon adıyla etiketlenmiş bir kaydet düğmesi olan bir ekran iter (
webapp/js/action-sheet.js:176-198). Kaydet doğrular, toplanan değerleri gönderir, ekranı kapatır veonDoneçağırır (webapp/js/action-sheet.js:202-219).
GenApi.action {id} yerine hedef kimliği koyar, bildirilen yöntemi gönderir ve GET dışındaki her yöntem için veri değişti sinyalini yayar (webapp/js/gen-api.js:164-174). Aksiyon gövde alanları, form alanları gibi izne ve görüntüleme anahtarına göre budanır (webapp/js/meta.js:66-71, webapp/js/meta.js:99-102).
Koşullar¶
actionApplies(action, row) condition değerini ve conditions içindeki her girdiyi toplar. Hepsi sağlanmalıdır. Tek bir koşul içinde value boru ile ayrılmış bir kümedir ve negate sınamayı tersine çevirir (webapp/js/action-sheet.js:20-34). Aynı işlev karttaki kayıt bağlantılarını süzer (webapp/js/gen-form.js:2364-2368).
Aksiyonlarla durum değişiklikleri¶
Yalnız aksiyonlarla değişen bir durum alanı düzenlenebilir bir form alanı olarak gösterilmez; ona bağlı bir form koşulu bunun yerine yüklenen kaydı okur (webapp/js/gen-form.js:703-707). web-client/_e2e_status_actions.mjs bunu teklif talebi ve satış teklifi kayıtları için sabitler: kayıt taslak olarak oluşturulur ve durumu yalnız aksiyonlarla değişir.
Neden böyle kurulu¶
action-sheet.jsbaşlık yorumu, alan taşıyan bir aksiyonun boş gövde göndermek yerine gerçek bir metadata formu açtığını belirtir (webapp/js/action-sheet.js:5-7).src/cluster_erp/core/metadata.py:430-433içindeki yorum,descriptionalanının bir yaşam döngüsü adımı hiçbir zaman çıplak bir fiil olmasın diye var olduğunu belirtir.webapp/js/action-sheet.js:144-147içindeki yorum, yeniden yükleme yeni açılan görüntüleyicinin üzerine boyayacağı için birGETaksiyonununonDoneçalıştırmaması gerektiğini belirtir.
Kurallar ve sınırlar¶
parentkapsamlı aksiyonlar listelerden süzülür vewebapp/js/içindeki başka hiçbir dosya onları sunmaz (webapp/js/gen-list.js:407;webapp/js/içinde'parent'araması başka bir kullanım bulmadı).- Kapılı uygulama paketleri
openActionSheetişlevini platform bağlamı üzerinden alır ve aynı kartı kullanır (webapp/js/custom-widgets.js:52-53). - Tarayıcı testleri:
web-client/_e2e_action_sheet.mjs,web-client/_e2e_status_actions.mjs,web-client/_e2e_soline_bom_action.mjs.
Diğer parçalarla etkileşim¶
- Onaylar bileşeni onaylama, reddetme, erteleme, açma ve geri çekme için aynı kartı kullanır (
webapp/js/widget-approvals.js:1-9). Bkz. ana ekran bileşenleri. - Sunucudaki onay zincirleri onaylar ve onay zincirleri sayfasında anlatılır.
Sınırlar ve açık noktalar¶
- Metadata'daki tek
parentaksiyonunun (src/cluster_erp/modules/crm/rfq_line_materials/metadata.py:50) web uygulamasında bir giriş noktası yoktur. action-sheet.jsbaşlık yorumu hâlâ bir gezinme çubuğu⋯girişini anlatır (webapp/js/action-sheet.js:3-4). Liste bunun yerine etiketli Aksiyonlar düğmesini çizer (webapp/js/gen-list.js:557-562).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| action sheet | openActionSheet |
Alttan yükselen ve uygulanabilir aksiyonları listeleyen kalıcı kart. | aksiyon kartı | webapp/js/action-sheet.js:56 |
| action scope | ActionMeta.scope |
Bir aksiyonun tüm listeye mi, tek kayda mı yoksa bir üst kayda mı uygulandığı. | aksiyon kapsamı | src/cluster_erp/core/metadata.py:422 |
| form-backed action | runEntityAction |
Gövde alanları çağrıdan önce itilmiş bir formda toplanan aksiyon. | formlu aksiyon | webapp/js/action-sheet.js:119 |
İlgili sayfalar¶
- Web uygulaması platformu
- Genel liste
- Genel form
- Veri tazeleme ve değişiklik sinyalleri
- Metadata modeli
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.