23. Zamanlanmış İş Akışları (Scheduled Workflows)
Genel Bakış
Zamanlanmış İş Akışları, yöneticilerin (administrators) süreçleri otomatik ve tekrarlayan bir şekilde çalışacak şekilde yapılandırmasına olanak tanır. Sistem, etkinleştirilmiş tüm zamanlamaları (schedules) periyodik olarak kontrol eder ve eşleşen süreçleri manuel müdahale olmaksızın başlatır.
Nasıl Çalışır
Arka plandaki bir zamanlayıcı her 60 saniyede bir çalışır ve etkinleştirilmiş tüm zamanlamaları değerlendirir. Bir zamanlamanın süresi geldiğinde, sistem, kaydedilmiş olan initiatorEmail değerini ${initiator} süreç değişkeni olarak ayarlayarak runtimeService.startProcessInstanceByKey() yöntemini kullanıp yapılandırılan süreci başlatır.
Zamanlama Yetenekleri
| Sıklık (Frequency) | Davranış | Yapılandırma |
|---|---|---|
| DAILY (Günlük) | İlk kontrolde günde bir kez tetiklenir | Ek yapılandırma gerekmez |
| WEEKLY (Haftalık) | Haftanın belirli bir gününde tetiklenir | dayOfWeek (1=Pazartesi .. 7=Pazar) |
| MONTHLY (Aylık) | Ayın belirli bir gününde tetiklenir | dayOfMonth (1-31) |
| EVERY_N_DAYS (N Günde Bir) | Son çalıştırmadan itibaren her N günde bir tetiklenir | intervalDays (ör. 3 = 3 günde bir) |
Başlangıç Formu Kısıtlaması
⚠️ Önemli: Sadece başlangıç form özellikleri olmayan süreçler zamanlanabilir. Kullanıcı girişi gerektiren (başlangıç formu alanları olan) süreçler otomatik olarak başlatılamaz çünkü formu dolduracak bir kullanıcı bulunmamaktadır. Yönetici (admin) kullanıcı arayüzü bu kısıtlamayı zorunlu kılar — süreç açılır listesi (dropdown) yalnızca uygun süreçleri gösterir.
Başlatıcı (Initiator)
initiatorEmail alanı, sürecin "kim olarak" (${initiator} değişkeni) çalışacağını belirler. Oturum açmış kullanıcıya göre otomatik olarak ayarlanır:
- Oluşturulurken (On create): Zamanlamayı oluşturan yöneticiyi kaydeder.
- Yeniden etkinleştirildiğinde (On re-enable): Zamanlamayı yeniden etkinleştiren yönetici olarak güncellenir.
Bu durum, ${initiator} değişkeninin her zaman zamanlamayı etkinleştiren son kişiyi yansıtmasını sağlar.
Kaçırılan Yürütmeler (Missed Executions)
Geçmişi telafi etme mekanizması (catch-up mechanism) yoktur. Bir zamanlamanın tetiklenmesi gerektiği sırada sunucu kapalıysa, o çalıştırma basitçe atlanır. Sunucu yeniden başlatıldıktan sonraki ilk kontrol, geçerli tarihe göre normal bir şekilde değerlendirme yapacaktır.
Yürütme Durumu (Execution Status)
Her zamanlama kendi son yürütme sonucunu izler:
| Durum | Anlamı |
|---|---|
SUCCESS (Başarılı) |
Süreç başarıyla başlatıldı. Süreç örneği kimliği (process instance ID) kaydedildi. |
FAILED (Başarısız) |
Başlatma sırasında bir hata oluştu (ör. motor hatası). |
PROCESS_NOT_FOUND (Süreç Bulunamadı) |
Süreç tanımı anahtarı (process definition key) artık motorda (engine) mevcut değil. |
Yönetici Kullanıcı Arayüzü (Admin UI)
Zamanlamalar sayfası, Yönetim > Zamanlamalar (Administration > Schedules) bölümünde (yalnızca yönetici rolü) mevcuttur. Bu sayfadan şunları yapabilirsiniz:
- Bir süreç ve sıklık seçerek yeni bir zamanlama Oluşturma (Create)
- Mevcut bir zamanlamanın sürecini veya sıklığını Düzenleme (Edit)
- Bir zamanlamayı açıp/kapatma (Toggle) (yeniden etkinleştirmek başlatıcıyı günceller)
- Bir zamanlamayı kalıcı olarak Silme (Delete)
- Son çalıştırma zamanını, durumunu ve süreç örneği kimliğini Görüntüleme (View)
Zaman Dilimi (Timezone)
Tüm zamanlama değerlendirmeleri sunucu saatini (server time) (LocalDate.now() / LocalDateTime.now()) kullanır. Bir zaman dilimi yapılandırması yoktur — sunucunun JVM zaman dilimi geçerlidir.