BPMN ile süreç modelleme dersi #2

Giriş

Bugünkü dersimizde basit bir Sipariş süreci ve Satınalma süreci inceleyeceğiz ve süreç tasarımında kullanılan araçlar hakkında biraz yorum yapacağız. Tasarımların karmaşık hale gelmemesi için süreç içerisinde Alt süreçlere tanışacağız (Subprocess). Ayrıca, ilerleyen bölümde “olaylara dayalı ayrıştırıcı” (intermediate event-based gateway) ve kısmen de olsa diğer objeleri nasıl kullanacağımızı öğreneceğiz.

Alt-süreçler (Subprocesses)

Alt-süreçler birden fazla olan görevleri birleştirmesinde kullanılır. Amaç Tasarımları karmaşık halden çıkarıp daha okunaklı hale getirmek. Dahası, tasarımda kullanılan alt-süreç(leri) ihtiyaca göre başka yerlerde tekrar kullanabilmemizi sağlar.

Şekilde görüldüğü gibi yemeğinin hazırlanması bir alt-süreç olarak tasarlanmış ve bu özellikten dolayı değerli bir tasarım alanı kazanıyoruz. Detayı görmek istiyorsak (+) işaretine basarak başka bir editör sayfasından açıp inceleyebiliriz.Alt-süreçleri aslında ikiye ayrılıyor bir kapalı (+) ve diğeri de açık olan (-). Açık olanına ileri ki bölümde gösteriyor olacağım.

Kaynak: bpmn.io Blog

Bu bölümde aynı sürece ait iki tasarım (Şekil-1 ve Şekil-2) inceleyeceğiz. Şekil-1 üzerinde bulunan bazı görevleri tespit ederek alt-süreçlere dönüştürebiliriz. Şekil-2’de ise sürecin iyileştirilmiş hali bulunuyor, aralarında ki farklılıkları daha iyi görebilmeniz için hazırladım.

Şekil -1 |  Sipariş süreci (karmaşık)

Kırmızı çerçeve içerisine aldığımı iş akışları inceleyiniz. Burada, siparişin geçerli olup olmadığını. Siparişin geçerli olması durumunda, siparişin tutarı 1,000€ üzerinde ise %3’lük bir indirim uygulanacaktır. Bu görevi standart bir işlem olarak algılayıp yeni bir alt-süreç olarak tanımlayabiliriz, adını da “sipariş değerlendirme” koyalım. Aynı şekilde sevkıyat sürecinde bazı standart adımları başka bir alt-süreç olarak tanımlayabiliriz. Not: “Fatura kes” hariç – çünkü Satınalma’nın bir görevidir.

Şekil -2 |  Sipariş süreci (daha okunaklı)

Şekilde görüldüğü gibi iki tane alt-süreç kullanarak Modelimizi hafif ve daha okunaklı hale getirmiş bulunuyoruz. Birincisi “Siparişi değerlendir“, ikincisi de “Sevk et“. Her ikisi standart bir prosedüre bağlı olduğunu varsayarak alt-süreç olarak tanımladım ve böylece her zaman karşılaştığımız gibi, ikisini başka tasarımlarda tekrar değerlendirebiliriz.

Şekil -3 |  Satınalma süreci (basitleştirilmiş)

Aşağıdaki Satınalma sürecine bakarsak, turuncu renkte 3 kapalı(+) ve 1 tane de açık (-) alt-süreç (turuncu çerçeve)  olarak tanımlanmıştır. Açık konumunda ki bu alt-süreç ise ihtiyaçtan dolay açık sergilenmiştir. Üzerinde yakından çalışıp bir değişiklik yapmak istiyorsunuz o yüzden görsel olarak açık olması daha uygundur. Unutmayalım, her şey ihtiyaca göre tasarlanır, bazen istemezsek de karmaşık olabilir.

Şekil -4 |  Koşullara bağlı bir süreç tasarımı (Pizzam nerede kaldı)

Bu çalışmanın sonunda ise olaylara bağlı görevlerin nasıl tetiklendiğini öğreneceğiz ve bununu için “Pizzam nerede kaldı” örneği üzerinden gitmeyi uygun buldum. Sürecinizi tasarlarken bazı aksiyonların istenilen koşullara erişince harekete geçmesini isteyebilirsiniz. Bunun için bir tetikleme mekanizmasına ihtiyacınız olacak. İşte tam burada bir “event-based “ objeler devreye giriyor örnek tasarıma bakarsak daha da iyi anlaşılır.

Süreç nasıl işliyor?

  1. Acıktınız ve bir Pizza beğeniyorsunuz.
  2. Siparişi veriyorsunuz.
  3. 30 dakika bekliyorsunuz.
  4. Siparişiniz gelirse afiyetle Pizza tüketiyorsunuz.
  5. Gelmediği taktirde, Pizzacıyı arayıp halen beklediğinizi söylersiniz.
  6. Telefon görüşmesinden 30 dak. içerisinde tekrar arıyorsunuz.
  7. Üçüncü arama sonunda beklemekten sıkılıp siparişi iptal edersiniz.

Dikkat ederseniz en alt kolda bir “conditional intermediate event  bulunuyor. Bu obje, Telefonla arama – bekleme döngüsünü 3 seferle ile sınırlandırıyor, aslında sizin belirleyeceğiniz şartla (condition) süreci sınırlandırıyor. Yoksa sürekli arar durursunuz. Kırmızı çerçevede gördüğünüz  “event-based Gatway” ise meydana gelen koşula göre süreci ayrıştırıyor. Pizzanız ulaşırsa tüketirsiniz, gecikirse de 30 dakikada bir Pizzacı arar durursunuz, fakat daha sonrası dayanamayıp sipariş iptal edersiniz:) 

Kendini geliştirmek isteyen arkadaşlar

Bu konuda farklı senaryolar üzerinde çalışmalarını tavsiye ederim, lakin süreç dünyasında çok yaygın kullanılan bir tekniktir. Örneğin bir gönderiniz var (Kargo) ve 3 Nakliye firmasından teklif bekliyorsunuz. Çağrıya ilk cevap veren Nakliye firmasına taşıma işi verilecektir.

Bu örneği ödev olarak kabul edenler bana admin@kolaybpm.com adresi üzerinden çözümlerini yollayabilirler. Unutmayın, bu konuda çok sayıda farklı tasarım yapılabilir, önemli olan Notation ile uyumlu olması, sade ve çalışır bir model olmasıdır. – Kolay gelsin