Özel Tetikleyici
Bu ekran, sistemdeki herhangi bir komuta özel tetikleyiciler tanımlanmasını sağlar. Bir tetikleyici; bir komut çalıştırılmadan önce, çalıştırıldıktan sonra veya komutun yerine geçerek devreye girebilir. Böylece doğrulama, veri güncelleme ya da harici sistemlere bildirim gönderme gibi iş akışları otomatik hale getirilebilir.

Bir satırı düzenlemek ya da silmek için satır sonlarında bulunan Güncelle ve Sil butonları kullanılır.
Tetikleyici Türleri
Tetikleyiciler iki türde tanımlanabilir:
- API Tetikleyici: Belirtilen bir HTTP adresine (endpoint) çağrı yapılır. Harici sistemlere bildirim göndermek veya uzak bir servisi tetiklemek için kullanılır.
- Script Tetikleyici: Doğrudan sistem içinde çalıştırılan bir JavaScript kodu tanımlanır. Veritabanı sorguları çalıştırmak, veri doğrulamak veya kayıt oluşturmak gibi işlemler için kullanılır.
Çalışma Zamanı (Timing)
Her tetikleyici için bir çalışma zamanı belirlenir:
| Zamanlama | Açıklama |
|---|---|
| Öncesi (Before) | Komut işlenmeden önce çalışır. Doğrulama (validasyon) amacıyla kullanılır. Tetikleyici hata verirse komut çalıştırılmaz. |
| Sonrası (After) | Komut başarıyla tamamlandıktan sonra çalışır. Ek kayıt oluşturma veya bildirim gönderme gibi işlemler için kullanılır. |
| Yerine (Instead) | Komutu tamamen devre dışı bırakarak onun yerine tetikleyici çalışır. Yalnızca API tetikleyicilerinde kullanılabilir. |
Yeni Trigger Kartı Oluşturma
Yeni Kayıt ile açılan pop-up penceresinde gerekli bilgiler girilerek Trigger Kartı oluşturulabilir.

| Alan | Açıklama |
|---|---|
| Komut Adı | Tetikleyicinin bağlanacağı komut seçilir. |
| Tür (Kind) | Api veya Script seçilir. |
| Zamanlama (Timing) | Öncesi, Sonrası veya Yerine seçilir. |
| Bitiş Noktası (EndPoint) | Yalnızca API tetikleyicilerinde doldurulur. Çağrı yapılacak HTTP adresi girilir. |
| Script | Yalnızca Script tetikleyicilerinde doldurulur. Çalıştırılacak JavaScript kodu girilir. |
| Sıra (Order) | Aynı komut ve zamanlama için birden fazla tetikleyici varsa çalışma sırası belirlenir. Küçük değer önce çalışır. |
| Açıklama | Tetikleyicinin ne iş yaptığını anlatan kısa bir not. |
| Aktif | Tetikleyicinin aktif olup olmadığı belirlenir. Pasif tetikleyiciler çalıştırılmaz. |
İstenilen tüm bilgiler girildikten sonra Kaydet butonuna basıldığında kart oluşturulmuş olur.
Script Tetikleyicileri
Script tetikleyicilerinde JavaScript kodu kullanılır. Kodun içinden aşağıdaki nesnelere erişilebilir:
| Nesne | Kullanılabilir Olduğu Yer | Açıklama |
|---|---|---|
request | Öncesi, Sonrası | Komuta gönderilen veri |
response | Yalnızca Sonrası | Komutun döndürdüğü sonuç |
db | Öncesi, Sonrası | Veritabanı sorguları için yardımcı |
http | Öncesi, Sonrası | HTTP istekleri için yardımcı |
reject(mesaj, kod) | Öncesi, Sonrası | Tetikleyiciyi hata ile sonlandırır |
Veritabanı Erişimi
db nesnesi ile veritabanında sorgular çalıştırılabilir:
db.queryFirst(sql, parametreler)— Tek bir satır döndürür.db.query(sql, parametreler)— Tüm satırları dizi olarak döndürür.db.scalar(sql, parametreler)— Tek bir değer döndürür.
Parametreler @p0, @p1, @p2 şeklinde sıralı olarak kullanılır:
var musteri = db.queryFirst(
"SELECT CreditLimit, CurrentBalance FROM CustomerAccounts WHERE Id = @p0",
[request.customerAccountId]
);
if (!musteri) {
reject("Müşteri hesabı bulunamadı", "E_CUST_404");
}
Öncesi (Before) script'lerinde yalnızca okuma (SELECT) sorguları kullanılabilir. Veri değiştiren sorgular yalnızca Sonrası (After) script'lerinde kullanılabilir.
Örnek: Doğrulama (Before Script)
// Sipariş oluşturulmadan önce müşterinin kredi limitini kontrol eder
var musteri = db.queryFirst(
"SELECT CreditLimit, CurrentBalance FROM CustomerAccounts WHERE Id = @p0",
[request.customerAccountId]
);
if (!musteri) {
reject("Müşteri hesabı bulunamadı", "E_CUST_404");
}
if (musteri.CurrentBalance + request.totalAmount > musteri.CreditLimit) {
reject("Kredi limiti aşıldı", "E_CREDIT_LIMIT");
}
Örnek: Kayıt Oluşturma (After Script)
// Sipariş oluşturulduktan sonra stok rezervasyonu kaydı ekler
db.query(
"INSERT INTO StockReservations (OrderId, ItemId, Quantity, CreatedAt) VALUES (@p0, @p1, @p2, @p3)",
[response.id, request.itemId, request.quantity, new Date().toISOString()]
);
HTTP Erişimi
http nesnesi ile harici servislere istek gönderilebilir. Üç metod bulunur:
http.get(url)— GET isteği gönderir.http.post(url, gövde)— POST isteği gönderir.http.put(url, gövde)— PUT isteği gönderir.
Her metodun yanıt nesnesi şu alanları içerir:
| Alan | Açıklama |
|---|---|
status | HTTP durum kodu (örn. 200, 404) |
ok | İstek başarılıysa true, aksi halde false |
body | Yanıt içeriği; JSON ise nesne olarak, değilse metin olarak döner |
post ve put metodlarında gövde JSON string olarak gönderilmelidir. Bunun için JSON.stringify() kullanılır.
Örnek: Harici Servise Bildirim Gönderme (After Script)
// Sipariş oluşturulduktan sonra harici bir webhook'a bildirim gönderir
var govde = JSON.stringify({
siparisId: response.id,
musteriId: request.customerAccountId,
tutar: request.totalAmount
});
var yanit = http.post("https://webhook.example.com/siparis-bildirimi", govde);
if (!yanit.ok) {
reject("Bildirim gönderilemedi: " + yanit.status, "E_WEBHOOK");
}
Örnek: Harici Servisten Veri Doğrulama (Before Script)
// Sipariş oluşturulmadan önce harici bir servisten onay alır
var yanit = http.get("https://onay.example.com/kontrol?musteriId=" + request.customerAccountId);
if (!yanit.ok || !yanit.body.onaylandi) {
reject("Müşteri harici onay sisteminden geçemedi", "E_EXT_APPROVAL");
}
Birden Fazla Tetikleyici
Aynı komuta ve aynı zamanlama seçeneğine birden fazla tetikleyici tanımlanabilir. Sıra (Order) alanı hangi tetikleyicinin önce çalışacağını belirler; küçük değerler önce çalışır.
Öncesi (Before) tetikleyicilerinde ilk hata oluştuğunda zincir durur ve sonraki tetikleyiciler çalıştırılmaz.
Tetikleyiciyi Devre Dışı Bırakma
Bir tetikleyici silinmeden devre dışı bırakılabilir. Bunun için tetikleyici kartındaki Güncelle butonu ile Aktif alanı kapatılır. Pasif tetikleyiciler hiçbir koşulda çalıştırılmaz.