Ana içeriğe geç

Method Invoker

Method Invoker
Inputs: 1
Outputs: 1
Kategori: trexMes service

trexMes panel tarafında tanımlı bir method'u çağırır. Parametre değerlerini dinamik olarak (msg/flow/global/jsonata) hesaplayıp panele gönderir.

Property Tablosu

Alan Tip Varsayılan Açıklama
name string Canvas üzerinde gösterilecek ad
service string (boş) Servis adı (örn. OrderService)
method string (boş) Method adı (örn. SaveOrder)
props array [] Parametre listesi
data string (boş) (legacy) Veri kaynak yolu
dataType string (legacy) Veri kaynak tipi

props Yapısı

Her satır bir method parametresi:

Anahtar Açıklama Örnek
p Parametre adı (ParameterName) orderNo
v (unused)
d Değer veya path payload.orderNo
dt Değer kaynağı (dataType) msg, flow, global, vs.
[
  { "p": "orderNo",    "d": "payload.orderNo", "dt": "msg" },
  { "p": "quantity",   "d": "50",              "dt": "num" },
  { "p": "operatorId", "d": "currentUser",     "dt": "flow" }
]

Çıkış Mesajı

{
  "operationtype": "MethodInvokerProcess",
  "receiveddata": { /* event data */ },
  "name": "SaveOrder",
  "message": "OrderService.SaveOrder",
  "value": [
    { "ParameterName": "orderNo",    "Value": "ORD-001" },
    { "ParameterName": "quantity",   "Value": 50 },
    { "ParameterName": "operatorId", "Value": "OP-007" }
  ]
}

message alanı service.method formatında otomatik oluşturulur.

dataType Çeşitleri

dataType Anlam Örnek d
msg Mesaj nesnesinden payload.orderNo
flow Flow context currentOrder
global Global context defaultMachine
num Sabit sayı 42
json Sabit JSON {"prio":1}
bool Sabit boolean true
jsonata JSONata ifadesi payload.items[type='A'].id
diğer Sabit string "ACME"

Detay →

Tipik Akış (Asenkron Method Çağrısı)

flowchart LR
    A[Form Events<br/>btnSave click] --> B[Method Invoker<br/>OrderService.SaveOrder]
    B --> C[Responser]

    D[Method Returns<br/>SaveOrder] --> E[switch<br/>success?]
    E -->|true| F[Custom Form<br/>Onay]
    E -->|false| G[Custom Form<br/>Hata]
    F --> H[Responser]
    G --> H

    style A fill:#ccffcc,color:#000
    style B fill:#ccffcc,color:#000
    style C fill:#ccffcc,color:#000
    style D fill:#ccffcc,color:#000
    style F fill:#ccffcc,color:#000
    style G fill:#ccffcc,color:#000
    style H fill:#ccffcc,color:#000

İki ayrı akış

Method çağrısı asenkron'dur. İlk akış Method Invoker ile çağrıyı yapar ve Responser ile kapanır. Method cevabı geldiğinde ayrı bir akış Method Returns ile tetiklenir.

Asenkron İşlem Modeli

Control Properties ile aynı asenkron pattern'i kullanır:

let tasks = node.props.map((item) => {
    return new Promise((resolve, reject) => {
        switch (item.dt) {
            case 'msg':    /* ... */; break;
            case 'flow':   /* ... */; break;
            case 'jsonata':
                // Async JSONata
                RED.util.evaluateJSONataExpression(expr, msg, (err, result) => {
                    err ? reject(err) : resolve({
                        ParameterName: item.p,
                        Value: result
                    });
                });
                return;
            // ...
        }
        resolve({ ParameterName: item.p, Value: computedValue });
    });
});

Promise.all(tasks).then((params) => {
    msg.payload.push({
        operationtype: "MethodInvokerProcess",
        name: node.name,
        message: node.service + "." + node.method,
        value: params
    });
    node.send(msg);
});

Önemli Notlar

Method ismi formatı

service.method formatı panel tarafında tanımlı method ismi ile birebir eşleşmelidir. Servis adı yoksa boş bırakın; message alanı .method olarak gider — bu durumun panel beklentisine uyduğundan emin olun.

Parametre tip uyumsuzluğu

dataType: num seçtiyseniz değer Number() ile dönüştürülür. "abc" gönderirseniz NaN olur ve panel hata verir.

Sık Karşılaşılan Hatalar

Method not found

Panel tarafındaki method ismi yazımı doğru mu? Büyük/küçük harf duyarlı olabilir.

Parametre tip hatası

Panel'in beklediği parametre tipiyle gönderdiğiniz dataType uyuşmuyor olabilir. Örn. panel int bekliyor, siz str gönderiyorsunuz.

Cevap gelmiyor

Method Returns node'u ekledi mi? methodname alanı Method Invoker'daki method ile aynı mı?

İpuçları

Servis adı boşsa

service alanını boş bırakırsanız message: ".SaveOrder" şeklinde olur. Daha güzel görünmesi için tek bir kelime de yazabilirsiniz (Order).

Method timeout

Uzun süren işlemleri (rapor üretme, toplu güncelleme) method çağrısı ile başlatın. Cevabı Method Returns'ten alın. Bu sayede ilk HTTP request bloklamaz.

İlgili