Workflow Foundation 4.0, bize kullanmak için If, While, Assign, Sequence gibi yönetimsel elemanlar sunar. Bu yazıda bu elemanların nasıl kullanılacağına dair bilgiler vermeye çalışacağım.
WF 4.0 kullanıcıları workflow elemanları tarafından kullanılan tüm değişkenleri tanımlamak zorundadırlar. Şimdi projemize iki adet değişken tanımlayalım. Birinci değişkenimiz kaç adet zile ihtiyacımız olduğunu gösteren NumberOfBells, diğerini de şimdiye kadar kaç defa zil duyulduğunu gösteren Counter. Peki bu değişkenleri nasıl tanımlıyoruz?
Öncelikle projemize bir adet Sequence aktivitesi ekleyelim. Daha sonra bu aktivitenin üzerine bir defa tıklayıp tasarım kısmında sol altta bulunan “Variables” sekmesine tıklayalım. Daha sonra “Create Variable” kısmına tıklayıp ismi Counter olan tipi de Int32 olan bir değişken kaydedelim. Scope kısmını Sequence olarak bırakabilirsiniz. Bunun anlamı; o değişken Sequence ve onun soyundan gelen tüm aktiviteler tarafından kullanılabilir olmasıdır. Aynı şekilde tekrar “Create Variable” diyelim. Bu sefer değişkenimizi Properties penceresinden tanımlayalım. İsmi NumberOfBells ve tipi de Int32 olan bir değişken tanımlayalım. Scope kısmını yeniden Sequence olarak bırakalım.
Daha sonra ifadeler yazabileceğimiz yukarıdaki resimde kırmızı kutu içerisinde gösterdiğim Expression Editor’ü açalım. Ve oraya DateAndTime.Now.Hour ifadesini yazalım.
Bu ifadeyi default propertie olarak kaydedelim. Bu işlem NumberOfBells değişkenini günün o andaki saat değerine atar. Bu işlemden sonra değişkenlerimiz aşağıdaki şekilde görünmelidir.
Şimdide IF kullanımına bakalım;
DateAndTime sınıfının Hour üyesi geriye 24 saatlik sistemde saati geri döndürür. Örneğin; saat öğleden sonra 3 ise geriye 15 değerini döndürür. Öncelikle diagramımızda bulunan Sequence yapısının içine Toolbox’ta bulunan Writeline aktivitesini sürükleyip bırakalım. Daha sonra bu aktivitenin DisplayName özelliğini Merhaba olarak değiştirelim. Tekrar Sequence içerisine bir If aktivitesi sürükleyip bırakalım.
NOT: Bu adımda If ve Sequence aktivitelerinin sağ üst köşelerinde kırmızı renkli hata kutuları çıkacaktır. If aktivitesindeki kutucuk If aktivitesi içerisinde henüz herhangi bir koşul (condition) yazılmadığını, Sequence aktivitesindeki kutucuk ise ya bu aktivitede ya da alt aktivitelerinde bir hata olduğunu gösterir. Bu hataları kutucukların üstüne gelerek görebilirsiniz.
Şimdi If aktivitesini Properties kısmından DisplayName özelliğini “PM için ayarla” olarak değiştirelim. If aktivitesinin 3 kısmı vardır. Condition kısmı hangi koşulun hesaplanacağını gösterir. Bir Boolean (true ya da false) değer çözmelidir bu koşul. Eğer ifade True is Then aktivitesi, eğer ifade False ise Else aktivitesi çalıştırılır. Hem Then hem de Else aktivitelerinin ikisini birden tanımlamak zorunda değiliz. Eğer hiçbir aktivite tanımlanmasa, hiçbir aktivite çalıştırılmaz. Şimdi koşulumuza NumberOfBells>12 ifadesini girelim.
Şimdi de Assign aktivitesini Then kısmımızın içine sürükleyip bırakalım. Assign aktivitesi size bir değişkene ya da bir argümana bir değer atamanıza imkan verir. Hem To hem de Value özelliklerinin bir ifade içerebileceğine dikkat edin. To özelliğine NumberOfBells, Value özelliğine de NumberOfBells – 12 ifadelerini girelim.
WF 4.0’da bir çok aktivite compound aktivitedir yani başka aktiviteleri içerebilirler. If aktivitesi buna güzel bir örnek olarak gösterilebilir.
Sıra geldi While aktivitesini kullanmaya. While aktivitesini, ismi “PM için ayarla” olan If aktivitesinin altına sürükleyip bırakalım. Ardından DisplayName özelliğini “Zil Çalınma Sayısı” olarak değiştirelim.
While aktivitesi, içerisinde yazılan ifade true olduğu sürece Body kısmındaki aktiviteleri çalıştırır. İlk önce koşul hesaplanır, eğer true ise, içindeki aktiviteler çalıştırılır. Bu durum, koşul false olana kadar devam eder.
NOT: İleride göreceğimiz DoWhile aktivitesi ile While aktivitesi arasındaki fark, programlama olduğu gibidir. DoWhile aktivitesinde önce içindeki aktiviteler bir kez çalıştırılır, sonra koşul çalıştırılıp true olup olmadığı kontrol edilir. While aktivitesinde ise, önce koşul çalıştırılır. Koşul true ise içindeki aktiviteler çalıştırılır. Eğer koşul false ise içindeki ifadeler hiçbir zaman çalıştırılmazlar.
While aktivitesinin koşul kısmına Counter <= NumberOfBells ifadesini yazalım. Daha sonra Body kısmına bir Sequence aktivitesini sürükleyip bırakalım. Bunun da DisplayName özelliğini “Zil Çalınma Sayısı” olarak değiştirelim.
Şimdi bu “Zil Çalınma Sayısı” isimli Sequence aktivitemizin içine bir Writeline aktivitesi sürükleyip bırakalım. Writeline aktivitesinin Text özelliğine de Counter.ToString() ifadesini yazalım. Bunun amacı kaç kere zil çaldığını konsola yazdırmaktır. Ardından bu Writeline aktivitesinin altına bir Assign aktivitesi yerleştirelim. To kısmına Counter, Value kısmına ise Counter + 1 yazalım. Bu kısaca Counter değişkenini bir arttıracaktır.
Ardından bu Assign aktivitesinin altına bir Delay aktivitesi sürükleyip bırakalım. Kısaca Delay aktivitesi, belirli bir zaman periyodu için o aktiviteyi durdurur. Delay aktivitesinin Duration adında tek bir özelliği vardır. Bu özellik aktivitenin ne kadar duracağını gösterir. Bu özelliğe TimeSpan.FromSeconds(1) ifadesini yerleştirelim.
“Zil Çalınma Sayısı” adındaki While aktivitesini sağ üst köşesinden daraltalım.
Sonra da bu While aktivitesinin altına bir Writeline aktivitesi ekleyelim. DisplayName özelliğini “Zaman:” , Text özelliğini de “Şu anki zaman: ” + DateTime.Now.ToString() şeklinde yazalım.
“Zaman” aktivitesinin altına da bir If aktivitesini sürükleyelim ve ismini de “Selamlama” olarak koyalım. Koşul kısmına da DateTime.Now.Hour >= 18 ifadesini yerleştirelim. Şimdi de Selamlama aktivitesinin içindeki Then ve Else kısımlarına da birer Writeline aktivitesi yerleştirelim. Then kısmındaki aktivitenin Text özelliğine “İyi Akşamlar”, Else kısmındaki aktivitenin Text özelliğine de “İyi Günler” yazalım. Şimdi de projemizi kaydedip F5 ile çalıştıralım.
0
1
2
3
4
5
Şu anki zaman: 30.07.2012 17:00:16
İyi Günler
Press any key to continue . . .
Görüleceği üzere 0-5 arası her rakamı yazdırırken 1 saniye bekleme yaptı program. Bu durum Delay aktivitesi sayesinde gerçekleşir.
Bu yazıda Workflow Foundation içerisindeki, bizim de programlama dillerinden bildiğimiz ifadelerin aktivitelerini inceledik.