Handle Setter¶
IsHandled özelliği bulunan Event node'larını içeren akışlarda, diğer trexMes node'larının ardından zincire eklenir ve olayın handle durumunu çalışma zamanında set eder. IsHandled = true ayarlandığında panel, ilgili olaya ait tüm işlemleri keser.
Özet¶
IsHandled özelliği olan Event node'ları (Business Events, Form Events vb.) bu değeri statik olarak tanımlar. Handle Setter ise akışın o noktasındaki duruma göre — örneğin bir önceki node'dan gelen veriye veya flow context'e bakarak — bu kararı dinamik olarak verir.
Konumu
Handle Setter, akıştaki diğer trexMes node'larından sonra, Responser'dan önce gelir. Akışı tetiklemez; yalnızca msg.payload array'ine TrexEventHandler operasyonu ekler.
Property Tablosu¶
| Alan | Tip | Varsayılan | Açıklama |
|---|---|---|---|
name |
string | — | Node-RED canvas üzerinde gösterilecek ad |
isHandled |
any | — | Handle değeri veya kaynak path |
isHandledType |
string | bool |
Değerin nereden okunacağı: bool, msg, flow |
isHandledType Seçenekleri¶
| Tip | Anlamı | Örnek isHandled |
|---|---|---|
bool |
Sabit boolean | true veya false |
msg |
Mesaj nesnesinden oku | payload.isHandled |
flow |
Flow context'ten oku | currentHandledState |
Çıkış Mesajı¶
msg.payload array'ine şu operasyonu ekler:
continueevent değeri isHandled'in tersidir:
isHandled |
continueevent |
Anlam |
|---|---|---|
true |
false |
"Node-RED handle etti, panel kendi işleyicisini ÇALIŞTIRMASIN" |
false |
true |
"Panel kendi işleyicisini de çalıştırsın" |
Davranış Kodu¶
let isHandled;
switch (node.isHandledType) {
case "bool":
isHandled = node.isHandled;
break;
case "msg":
isHandled = RED.util.getMessageProperty(msg, node.isHandled);
break;
case "flow":
isHandled = node.context().flow.get(node.isHandled);
break;
}
isHandled = (isHandled === true); // Strict cast
if (!Array.isArray(msg.payload)) {
node.status({ fill: "red", shape: "ring",
text: "payload should be a json array" });
return;
}
msg.payload.push({
operationtype: "TrexEventHandler",
continueevent: !isHandled
});
Tipik Kullanım¶
Handle Setter, diğer trexMes node'larından sonra, Responser'dan hemen önce konumlanır:
flowchart LR
A[Business Events] --> B[Custom Form\nveya diğer node'lar]
B --> C[function\nkarar mantığı]
C --> D[Handle Setter\nmsg.shouldHandle]
D --> E[Responser]
style A fill:#ccffcc,color:#000
style B fill:#ccffcc,color:#000
style D fill:#ccffcc,color:#000
style E fill:#ccffcc,color:#000
IsHandled = true olduğunda panel, bu olaya bağlı kendi işleyicisini çalıştırmaz; işlem kesilir.
Örnek Function Node Kodu¶
Akış içinde karar verip Handle Setter'a yönlendirmek için:
// function node içinde
const orderNo = msg.payload.orderNo;
const isPremium = await checkPremium(orderNo);
// Premium siparişleri biz işleyelim, diğerlerini panel
msg.shouldHandle = isPremium; // bool
return msg;
Ardından Handle Setter'da:
isHandled:shouldHandleisHandledType:msg
Önemli Uyarı¶
msg.payload array olmak zorunda
Handle Setter msg.payload'ın array olmasını bekler. Eğer öncesinde bir form/event node çalışmamışsa array olmayacaktır.
Çözüm: Önce bir Custom Form veya benzeri node'tan geçirin, ya da function node ile:
Durum Göstergesi¶
Hata durumunda node altında:
Sık Karşılaşılan Hatalar¶
payload should be a json array
Yukarıdaki uyarı bölümüne bakın — msg.payload array değil.
isHandled her zaman false
isHandledType doğru ayarlanmış mı? bool seçtiyseniz isHandled alanında değer literal true/false olmalıdır.
İlgili Nodlar¶
- Olay Nodları — Tüm event node'ları statik
Is Handledalanına sahiptir - Mesaj Yapısı —
TrexEventHandleroperationtype detayı