Makale Özeti

Bu yazımızda WF ile Conditions kavramını incelemeye çalışıyoruz.

Makale

.Net Frameowork 4.0 ile Windows Workflow Foundation iş akışı yapısının 4 sürümünün çıkışı çok yaklaşmışken biz WWF 3.x sürümleri yardımı ile iş akışı süreçlerini örnekler yardımı ile incelemeye devam ediyor olacağız. Bu güne kadar iş akışına temel bir giriş yaptık ve araç kutusunda yer alan iş akışı bileşenlerini nasıl kullanabileceğimizi tek tek incelemeye başladık. Bu inceleme işlemlerini örnekler ile zenginleştirerek ise bizlerin kullanımı esnasında dikkat edecek olduğumuz noktalara da değinmeye çalıştık. Bu formatta devam ederek Windows Workflow Foundation ile Condition (Koşul) kavramını inceliyor olacağız.

Condition denildiği zaman aklımıza While ve IfElseBranchActivity bileşenlerinde süreci durduracak ya da başka bir işlem yapmamıza olanak tanıyacak bir kriter olarak gelmektedir. bir önceki Parallel Activity yazımızda While döngüsüne denk gelen aktivite bileşenini kullanırken kısmen bu özelliği nasıl kullanabileceğimize kısaca göz atma fırsatı bulduk. Ancak Condition 'ı tamamen nasıl kullanabileceğimizi bu yazımızın içerisinde kullanıyor olacağız.

Şimdi Condition yapısını örnek üzerinde inceleyelim. Bu örneğimizi yaparken Visual Studio 2010 ide sini ve .Net Framework 3.0 sürümünü kullanıyor olacağız.

Uygulamayı geliştirmek için Sequential Workflow Console Application tasarımında proje oluşturduktan sonra ekrana bir adet While aktivitesi sürüklüyoruz.


Tasarım ekranı üzerine sağ tıklama yaptıktan sonra özellikler ekranından Condition değerleri verebileceğimiz bölüme ulaşabilmemiz mümkündür. Kullanabileceğimiz Condition tipleri iki adettir. Bunlar;
şeklinde yer almaktadır. Bu koşul tiplerinden en hızlı çalışanı ve en çok tercih edileni Code Condition 'dır. Bizde koşulları incelerken ilk olarak kod üzerinden inceliyor olacağız.

Bu işlem için kod tarafına geçerek koşul olarak kullanacak olduğumuz rakam artışını sağlayan method hazırlıyoruz.

private int count;
private void ContinueLooping(object sender, ConditionalEventArgs args)
{
    args.Result = (count < 10);
}

Condition olarak kullanacak olduğumuz metodu hazırladıktan sonra tasarım ekranında While aktivitesinin içerisine ve aktivitenin sonuna olmak üzere iki tane kod aktivite ekliyor ve aşağıdaki kod parçalarını yazıyoruz.

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
    Console.WriteLine("Merhaba {0}",count);
    count++;
}

private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
    Console.ReadLine();
}

Şimdi ise While Aktivitesine koşulu eklemeye sıra geldi. Bunun için özellikler ekranında condition özelliğine code condition seçeneğini seçtikten sonra Contions özelliğine bizim oluşturmuş olduğumuz ContinueLooping() 'i gösteriyoruz.



Yapmış olduğumuz bu işlemler sonrasında koşulları da aktif olarak kullandığımız uygulamanın çalıştığı anki ekran görüntüsü aşağıdaki gibi olacaktır.



 Kod yardımı ile oluşturmuş olduğumuz koşulu işlediğimizde sorunsuzca çalıştığını görmüş olduk. Kod koşulları dışında kullanabileceğimiz bir diğer seçenek ise kural bazlı koşullar (rule conditions) dır. Bu seçeneği kullandığımız durumlarda bir öncekinden farklı olarak koşulları girebileceğimiz bir ekran karşımıza çıkacak ve kriterimizi buraya girmiş olacağız. Bu yapmış olduğumuz değişiklikleri ve eklentileri arka plan Workflow Foundation xml içerisinde saklayarak bizim While ya da ifElseBranch aktivitelerini kullanacağımız durumlarda kullanmamıza olanak tanıyacaktır.

Kural bazlı aktiviteleri kullanmak için ilk yapılması gereken koşul kullanılacak olan aktivinin özelliklerinden ki bu bizim örneğimiz için while aktivitesi oluyor, Condition özelliğini Rule Condition olarak belirtiyoruz.



Condition tipi seçme işlemini tamamladıktan sonra ConditionName özelliğine istediğimiz herhangi bir değer verdikten sonra sağ tarafında yer alan butona tıklayarak kriterleri girecek olduğumuz ekranın açılmasına olanak tanıyoruz.



Yukarıdaki ekranda yapmış olduğumuz işlemlerden de görmüş olduğunuz üzere daha önceki örneğimizde kod yardımı ile oluşturmuş olduğumuz sayacın 10 dan ufak olana kadar çalışmasını sağlayan bir metot hazırlamış ve kullanmıştık. Bu kullanımda ise bu tür işlemler yapılmasına gerek yoktur. Eklenmiş olunan kriterlere istenen değerler atanarak While aktivitesinde sorunsuzca kullanılabildi. Ayrnıca karşımıza çıkan bu ekranın diğer özelliklerinden biri de başka kriterler ekleyebilir, bu kriterleri düzenleyebilir, silebilir ya da isimlerini değiştirebiliriz.

Şimdi ise yapmış olduğumuz işlemler sonrasında bakalım ekran görüntüsü ya da çalışma mantığında değişen bir şey olmuş mu?



Gördüğümüz kadarıyla herşey sorunsuz gözüküyor. Bu da bize hem Code Condition hem de Rule Condition ile elde ettiğimiz sonuçların aynı olduğunu göstermektedir. Aralarında en büyük fark kullanım şekillleridir. Ancak dikkat edeceğiniz üzere kullanım şekilleri farklı olmakla birlikte aslında yazılan kod parçaları ve işlem adımları birbirlerine çok benzerdir.

Şimdi üzerinde denemeler yapmış olduğumuz örneği biraz daha karmaşık bir duruma getirirken hem de ifElse aktivitesinde de koşulları nasıl kullanacağımıza göz atıyor olalım.

Yapacak olduğumuz işlem için tasarım ekranında şu şekilde bir değişiklik yapmamız gerekmektedir. While aktivitesinin içerisine bir Sequence aktivite ekledikten sonra onun içerisine de ifElse aktivite ekliyoruz. Sonrasında ise ifElse aktivitesinde olacak sonuçları gözlemleyebilmek için Code Activity 'ler ekleyerek tasarım ekranında yapılacak olan değişikleri tamamlıyoruz.


Tasarım ekranında yapacak olduğumuz değişiklikleri tamamladıktan sonra sıra koşulları belirlemeye geldi. Bunun için ise ifElse aktivitesinin özelliklerinden Condition seçeneğine Rule Activity değerini atadıktan sonra aktivitenin 5 ten ufak olan değer için merhaba yazmasını diğerleri için ise Hoşçakal yazmasını sağlayacağız. Hoşçakal yazması için sağ taraftaki kod aktivitesine Console.WriteLine("Hoşçakal"); count++; kodları yazılır.



Yapmış olduğumuz işlemler sonrasında yapmış olduğumuz işlemler konusunda istediğimizi alabilmiş miyizi kontrol edebilmek için uygulamayı çalıştırıyor ve sonuçları gözlemliyoruz.



Sonuç oldukça başarılı :)

Bu yazımızda Workflow Foundation 'da Condition kavramını inceleye çalıştık. Condition tiplerinden hem Code Condition olarak nasıl yapabileceğimizi hem de Rule Condition olarak nasıl kullanabileceğimizi örnekler yardımı ile inceledikten sonra While ve ifElse aktiviteleri üzerinde Condition tipleri yardımı ile örnekler yaparak yazımızı tamamladık.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com
http://www.turhaltemizer.com