Ana içeriğe atla

Senaryo

Template modundaki #{...} bloğu içine çok satırlı JEXL Script yazılabilir. Bu yöntemle:
  • JSON array elemanları üzerinde döngü kurulabilir.
  • Toplama, sayaç ve filtreleme işlemleri yapılabilir.
  • if/else ile koşullu çıktı üretilebilir.
Body’den JSONPath ile çekilen array değerleri, JEXL bağlamına otomatik olarak liste olarak aktarılır; for (item : koleksiyon) söz dizimiyle gezinilebilir.
JEXL Script’te return kullanılmaz. Bloğun sonundaki son ifadenin değeri otomatik olarak döndürülür.

Örnek 1: Etiket Dizisini JSON Dizisine Dönüştürme

Aşağıdaki istek body’si verilsin:
{
  "name": "Karabaş",
  "tags": [
    {"id": 5, "name": "aşılı"},
    {"id": 12, "name": "mikroçipli"}
  ]
}
tags dizisindeki her nesneyi özel formatta bir JSON dizisine dönüştürme:

Şablon

#{
  var out = '[';
  var first = true;
  for (item : body.$.tags) {
    if (!first) { out = out + ','; }
    out = out + '{"id":' + item.id + ',"label":"' + item.name + '"}';
    first = false;
  }
  out + ']'
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → tagList
Varsayılan Değer[]

Beklenen Çıktı

[{"id":5,"label":"aşılı"},{"id":12,"label":"mikroçipli"}]

Örnek 2: Sipariş Kalemlerini Toplama

Aşağıdaki istek body’si verilsin:
{
  "orderId": "ORD-001",
  "items": [
    {"name": "Ürün A", "price": 120.00},
    {"name": "Ürün B", "price": 85.50},
    {"name": "Ürün C", "price": 44.50}
  ]
}
Kalem fiyatlarının toplamını hesaplama:

Şablon

#{
  var total = 0;
  for (item : body.$.items) {
    total = total + item.price;
  }
  total
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → orderTotal
Varsayılan Değer0

Beklenen Çıktı

250.0

Örnek 3: Koşullu Filtreleme ile Aktif Öğeleri Seçme

Yalnızca active: true olan öğeleri ayıklama:

Şablon

#{
  var out = '[';
  var first = true;
  for (item : body.$.items) {
    if (item.active == true) {
      if (!first) { out = out + ','; }
      out = out + '"' + item.name + '"';
      first = false;
    }
  }
  out + ']'
}

Beklenen Çıktı

items: [{"name":"A","active":true},{"name":"B","active":false},{"name":"C","active":true}] için:
["A","C"]

Örnek 4: if/else ile Rol Bazlı Yetki Seviyesi

Body’den gelen kullanıcı rolüne göre yetki seviyesi belirleme:

Şablon

#{
  var role = body.$.user.role;
  if (role == 'admin') {
    'TAM_YETKİ'
  } else if (role == 'manager') {
    'KISITLI_YETKİ'
  } else {
    'SADECE_OKUMA'
  }
}

Satır Yapılandırması

AlanDeğer
Oluşturma ModuTemplate
ŞablonYukarıdaki JEXL Script bloğu
HedefÖzel Değişken → permissionLevel
Varsayılan DeğerSADECE_OKUMA

Sonuç

user.role DeğeripermissionLevel
adminTAM_YETKİ
managerKISITLI_YETKİ
viewer veya diğerSADECE_OKUMA
(boş)SADECE_OKUMA

Örnek 5: Array Body’den İlk Elemana Erişim

İstek body’si doğrudan bir JSON dizisi olduğunda ($[n] söz dizimi):
[
  {"id": 101, "name": "Birinci Kayıt"},
  {"id": 102, "name": "İkinci Kayıt"}
]

Şablon

#{body.$[0].name}
#{body.$[1].id}

Sonuç

ŞablonÇıktı
#{body.$[0].name}Birinci Kayıt
#{body.$[1].id}102

Karmaşık mantık için Script Politikası: JEXL Script döngüler ve basit mantık için uygundur. Dış servise çağrı, kapsamlı veri dönüşümü veya hata yönetimi gerektiren senaryolarda Script politikasını tercih edin.
JEXL Script bloğunda { ve } karakterleri dengeli kullanıldığında sorunsuz çalışır. Script içinde bir JSON string üretiyorsanız aynı #{...} bloğunun içinde serbestçe {} kullanabilirsiniz.