Workflow Foundation ile FlowSwitch ve Parallel Aktivitesi Kullanımı

FlowSwitch aktivitesi tıpkı FlowDecision aktivitesine benzer şekilde çalışır fakat farklı olarak FlowDecision aktivitesinde True ya da False şeklinde 2 adet dal tanımlanmasına karşın, bu yapıda sınırsız sayıda dal tanımlayabilirsiniz. C#’ta ve bir çok programlama dilinde kullandığımız switch yapısına benzer.

Bu yazıda WF ile FlowChart Aktivitesi Oluşturmak makalemizde kullandığımız projemiz üzerinden devam edeceğiz. Projemizin alt tarafına bir FlowSwitch aktivitesi sürükleyip bırakalım. Toolbox kısmında FlowSwitch<T> şeklinde görünmektedir bu aktivite. Sürüklediğinizde sizden içereceği daha tipini gerektiren bir mesaj kutusu görünür. Burada default olarak Int32 görünür ki bizim de bu projemizde kullancağımız data tipi budur. Ardından daha önceden projemize eklediğimiz “Sabah”, “Öğleden Sonra” ve “Akşam” isimli Writeline aktivitelerini FlowSwitch aktivitemize bağlayalım.

WF-FlowSwitch

FlowSwitch aktivitesinin bir adet Expression adından bir özelliği vardır. Burada yazılan koşul, bu aktivitenin birden fazla dalındaki değerleri çözmek için kullanılır. (Tıpkı programlama’da olduğu gibi) Şimdi bu FlowSwitch aktivitemizin Expression özelliğine koşulumuzu yazalım;


CInt(((DateTime.Now.Month Mod 12) + 1) / 4)

NOT: Burada yazdığımız ifade sizi biraz şaşırtabilir. WF 4.0’da yazılan tüm ifadeler Visual Basic syntax’ı ile yazılırlar. Bu ifadeler derlenmezler, sadece workflow aktiviteleri tarafından hesaplanırlar. Böylece bu ifadelerin syntax’ı, uygulamalarda kullandığınız programlama dilinden bağımsızdır. İfade yazacağınız kutunun üzerine geldiğinizde “Enter a VB expression” yazısını görürüz.

Yukarıda yazdığımız ifade, yaklaşık olarak şu andaki zamanın mevsim değerini ifade eder. Aralık, Ocak ve Şubat ayları için 0 değerini üretir, Mart, Nisan, Mayıs için 1 değerini üretir. Şimdi bu aktivitemizde her bir mevsim için bir adet dal (branch) üretiriz.

FlowSwitch aktivitemizin her bir dalına FlowStep adı verilir. Tabi Toolbox’ta FlowStep aktivitesi bulunmaz. Bu dalları açıkça workflow’a eklemezsiniz. Bu dallar FlowSwitch aktivitesinden bağlantılar çizdiğinizde oluşturulurlar.

Şimdi FlowSwitch aktivitemizin etrafına 5 adet Writeline aktivitesi sürükleyip bırakalım. Bunlardan dördünü mevsimler için birini de default değer için kullanacağız. FlowSwitch aktivitesi ile bu 5 Writeline aktivitesini birbirlerine bağlayalım. Daha sonra da bu bağlantı dallarının üzerlerine tıklayıp Properties penceresinden Case özelliğine, ifade sonucunun hangi bağlantıyı seçeceğine dair Int32 değerlerimizi girelim. Default Writeline aktivitesini boş bırakalım ve bu bağlantının IsDefaultCase özelliğini tikleyelim.

WF-FlowStep

Tabi bu diagramımızda Default aktivitesi hiçbir zaman çalıştırılmaz çünkü olası her değer için bir Writeline aktivitesi tanımlamış durumdayız. Projemizi F5 ile çalıştırdığımızda aşağıdakine benzer sonuç elde ederiz;

Merhaba Dünya
İyi Öğle Sonraları
Selam Yaz
ENTER to exit

 

Parallel Aktivitesini Tanıyalım

Parallel aktivitesi, birçok aktivitenin paralel olarak çalıştırılmasına imkan veren bir aktivitedir. Bu projemizde her bir branch belirli bilgiler gösterirler. Gösterdikleri bilgilerin sıraları önemli değildir, bu yüzden bunları bir Parallel aktivite içerisine koyarız.

Şimdi bir Parallel aktivitesini Toolbox’tan workflow’umuzun altına sürükleyip bırakalım. Daha önce eklediğimiz 5 Writeline aktivitesini bu Parallel aktivitesine bağlayalım.

WF-Parallel

Ardından Parallel aktivitemize çift tıklayıp içerisine 3 adet Writeline aktivitesi ekleyelim. Bu aktiviteleri sırayla zamanı, tarihi ve günü göstermek için kullanacağız. Bu yüzden bu aktivitelerin Text özelliklerine sırasıyla;


"Zaman: " + DateTime.Now.TimeOfDay.ToString()

"Tarih: " + DateTime.Now.Date.ToShortDateString()

"Bugün: " + DateTime.Now.ToString("dddd")

ifadelerini yazalım.

WF-Parallel2

NOT: Parallel aktivitesi kendisine bağlanan her bir branch için basit bir adet aktivite destekler. Bizim projemiz için şu anda herhangi bir sorun yok. Fakat, her dal için birden fazla aktiviteye ihtiyacınız varsa,  Sequence aktivitesi kullanmanız gerekecektir. Sonra da içine herhangi bir sayıda aktivite ekleyebilirsiniz.

Şimdi de projemizi F5 ile çalıştıralım. Aşağıdakine benzer bir sonuç almalıyız;

Merhaba Dünya
İyi Öğle Sonraları
Selam Yaz
Zaman: 17:18:07.3144532
Tarih: 05.08.2012
Bugün: Pazar
ENTER to exit

Bir sonraki yazımızda görüşmek üzere..