Ana içeriğe geç

Ö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.

Ress

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:

ZamanlamaAçı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.

Ress

AlanAçı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.
ScriptYalnı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çıklamaTetikleyicinin ne iş yaptığını anlatan kısa bir not.
AktifTetikleyicinin 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:

NesneKullanılabilir Olduğu YerAçıklama
requestÖncesi, SonrasıKomuta gönderilen veri
responseYalnı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 Script'lerde Veritabanı

Ö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:

AlanAçıklama
statusHTTP durum kodu (örn. 200, 404)
okİstek başarılıysa true, aksi halde false
bodyYanı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.