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

Açıklama

Aksiyonlar ve aksiyon kartı

ActionMeta girdilerinin etiketli Aksiyonlar düğmesi ve alttan açılan aksiyon kartıyla kullanıcıya nasıl ulaştığı ve nasıl çalıştığı.

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.scope değeri global, single_record veya parent olur (src/cluster_erp/core/metadata.py:418-434). Modül metadata'sı 210 aksiyon bildirir: 188 single_record, 21 global ve 1 parent (src/cluster_erp/modules üzerinde ActionMeta( ve her scope= değeri için grep -rn ile sayıldı).
  • Bir single_record aksiyonu 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: GET ucu 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 GET olmayan bir aksiyon GenApi.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:

  1. openActionSheet({title, subtitle, actions, onPick}) kalıcı bir kart kurar. Her satır aksiyon etiketini ve varsa description değ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).
  2. runEntityAction(moduleName, entityMeta, action, target, opts) uç yöntemini okur (webapp/js/action-sheet.js:118-128).
  3. Bir GET aksiyonu yanıtı blob olarak getirir ve belge görüntüleyicide açar. Onay istemez, sinyal yaymaz ve onDone çağırmaz (webapp/js/action-sheet.js:129-148). Bkz. kayıt belgeleri, görüntüleyici ve paylaşım.
  4. body_fields ve body_field_groups taşımayan bir aksiyon bir onay iletişim kutusu gösterir. İleti, bildirilmişse aksiyonun description değeri, değilse common.confirm_action olur (webapp/js/action-sheet.js:157-165). Ardından boş bir gövde gönderir ve sunucunun message değerini veya common.success gösterir (webapp/js/action-sheet.js:166-173).
  5. 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 ve onDone ç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.js baş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-433 içindeki yorum, description alanı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-147 içindeki yorum, yeniden yükleme yeni açılan görüntüleyicinin üzerine boyayacağı için bir GET aksiyonunun onDone çalıştırmaması gerektiğini belirtir.

Kurallar ve sınırlar

  • parent kapsamlı aksiyonlar listelerden süzülür ve webapp/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 openActionSheet iş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 parent aksiyonunun (src/cluster_erp/modules/crm/rfq_line_materials/metadata.py:50) web uygulamasında bir giriş noktası yoktur.
  • action-sheet.js baş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


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

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