Özel Menü
Custom Menu, space seviyesinde tanımlanan özel menü girdileridir. Mevcut bir Custom HTML sayfasına veya Animation’a bağlanır, ya da alt menüleri taşıyan bir grup görevi görür.
Veri modelinde CustomMenu, Menu sınıfını genişletir — yani her custom menu aynı zamanda bir menü yetkisidir (privilege). İkisi aynı UUID’yi paylaşır: custom_menu_id ile menu_id her zaman aynı değerdir. Bu ayrıntı görünürlük yapılandırmasında belirleyicidir.
Custom Menu’ler space’e bağlıdır, projeye değil. Proje ilişkisi dolaylıdır: bağlı customHtmlId’nin veya animationId’nin ait olduğu proje üzerinden kurulur.

Alanlar
Section titled “Alanlar”| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| name | String (≤100) | Evet | Menü adı. Oluşturduktan sonra değiştirilemez |
| contentType | Enum | Evet | Html, Animation veya Group. Değiştirilemez |
| icon | String (≤16384) | Hayır | İkon tanımlayıcı JSON (aşağıya bakın) |
| menuOrder | Integer | Hayır | Menü sıralaması |
| parent | CustomMenu | Hayır | Üst menü — hiyerarşi için |
| customHtmlId | String | Html ise evet | Bağlanacak Custom HTML kaydı. Değiştirilemez |
| animationId | String | Animation ise evet | Bağlanacak Animation kaydı. Değiştirilemez |
| animationParams | String (≤32767) | Hayır | Animation’a geçirilecek JSON parametreler |
Yeni menü formu ortak alanları sorar:


İçerik Tipleri
Section titled “İçerik Tipleri”ContentType enum’ı üç değer alır:
| Tip | Zorunlu alan | Açıklama |
|---|---|---|
| Html | customHtmlId | Mevcut bir Custom HTML sayfasını açar. Aynı HTML birden fazla menüye bağlanabilir |
| Animation | animationId | Mevcut bir Animation’ı açar. animationParams ile parametre geçirilebilir |
| Group | — | Alt menüleri taşıyan boş kapsayıcı |
Formdaki liste de tam olarak bu üç değeri sunar:

Menü formundaki Icon alanı seçili ikonun önizlemesini gösterir. Henüz ikon yokken Choose icon düğmesi kütüphaneyi açar; ikon atandıktan sonra bu düğmeler Change ve Clear olur (yukarıdaki düzenleme formu görüntüsünde bu hâli görebilirsiniz).
![]()
Kütüphane dört kaynak sunar — FontAwesome, OpenBridge, Material Symbols ve Custom — ve ada göre arama ile kategori süzmesi içerir.
![]()
Seçilen ikon, yalnızca vektör yollarından oluşan bir tanımlayıcı JSON olarak saklanır; renk bilgisi taşımaz. Böylece ikon, içinde bulunduğu temanın metin rengini devralır ve açık/koyu temalarda doğru görünür.
Menü Hiyerarşisi
Section titled “Menü Hiyerarşisi”Custom Menu’ler en fazla 3 seviye iç içe olabilir. Her seviyenin kendi endpoint’i vardır:
- seviye oluşturma denemesi hata döner. Aynı seviye mantığı güncelleme ve silme işlemlerinde de geçerlidir.
Tipik bir kurgu:
Ekranda her seviye kendi paneline düşer. Kök satırı seçtiğinizde o menünün alt seviyesi İkinci Seviye panelinde listelenir; ikinci seviyeden bir satır seçtiğinizde de Üçüncü Seviye paneli dolar.

Html İçerikli Menü
Section titled “Html İçerikli Menü”JDK 21’de Custom HTML ayrı bir kayıttır. Menü, içeriği kendi içinde barındırmaz; yalnızca mevcut bir HTML kaydına referans verir. Sıra şudur:
- Custom HTML sayfasını oluştur →
customHtmlIdal Htmltipinde bir Custom Menu oluştur, bu ID’yi ver

Menü çalışma zamanında, bağlı sayfa gömülü olarak açılır:

Sayfa içinden veri okuma
Section titled “Sayfa içinden veri okuma”Custom HTML sayfası, korumalı (sandboxed) bir iframe içinde çalışır. inSCADA API’sine erişmenin tek yolu, sunucunun sayfaya otomatik enjekte ettiği InscadaApi proxy’sidir:
var api = new InscadaApi(); // sayfa kendi projesini otomatik alır
(async function () { var v = await api.getVariableValue('ActivePower_kW'); document.getElementById('power').textContent = v.value.toFixed(1);
// Birden fazla değişken — tek gidiş-dönüş var batch = await api.getVariableValues(['Voltage_V', 'Current_A']); console.log(batch.Voltage_V.value);})();Menü Görünürlüğü
Section titled “Menü Görünürlüğü”Doğrudan yönetici rolüne eklemek de mümkün değildir — Administrator ve Space Admin sistem rolleridir ve değiştirilemezler; bu rolleri güncelleme girişimi hata döner.
İzinler birleşimli (additive) çalıştığı için çözüm, yalnızca ilgili custom menüleri taşıyan ikinci bir rol oluşturmaktır:
- Amacını yansıtan bir rol oluştur — örneğin
PumpStationAccess - Yeni menüyü bu role ekle
- Rolü ilgili kullanıcılara ata — mevcut rolleri korunur, yenisi üzerine eklenir
Sonraki menüler için yalnızca 2. adımı tekrarlamanız yeterlidir.
En az yetki ilkesi gereği bu role yalnızca custom menüleri ekleyin. Home, Variables, Trends gibi sistem menüleri zaten kullanıcının yönetici rolünden gelir; tekrar eklemek denetim kayıtlarını gereksiz yere kalabalıklaştırır.
Bir kullanıcı menüyü neden göremiyor?
Section titled “Bir kullanıcı menüyü neden göremiyor?”- Kullanıcının rollerini listeleyin
- Her rolün bağlı menülerini listeleyin
- Menü bu listelerin hiçbirinde yoksa → role-menü bağlantısı eksiktir
Klonlama
Section titled “Klonlama”Mevcut bir menü, yeni bir ad verilerek kopyalanabilir. name alanı değiştirilemez olduğu için, benzer bir menüyü farklı adla oluşturmanın pratik yolu budur.
Bir Custom Menu silindiğinde arkasındaki menü yetkisi de silinir ve bu menüye ait tüm role bağlantıları otomatik olarak temizlenir. Rollerde geride başvurusuz (ölü) kayıt kalmaz.
Toplu silme işlemi seviyeye özeldir: silinecek menülerin tamamı aynı seviyede (kök / 2. / 3.) olmalıdır. Farklı seviyelerdeki menüler için ayrı işlem yapın.