|
WWF - Akış Kontrolü Aktivitelerinin Kullanımı - I |
|
Gönderiliyor lütfen bekleyin... |
|
|
Windows Workflow Foundation ile gelen Out-Of-The-Box aktivitelerini daha önceden sizlere açıklamıştım. Bundan sonraki 3 yazımda sizlere Out-Of-The-Box aktivitelerinin içerisinde yer alan akış kontrolü grubu altındaki aktivitelerinin özelliklerinden ve uygulamaya geçirilmesinden söz edeceğim. Bu 3 yazıdan ilkinin içerisinde IfElse, IfElseBrach ve ConditionalActivityGroup aktivitelerinden söz edeceğim.
Koşul Tipleri
Akış kontrolü aktivitelerinin çoğunda koşul kavramıyla karşılaştığımız için koşul tiplerine ayrı bir yer ayırdım. Windows Workflow Foundation teknolojisi 2 tip koşul bulunmaktadır. Bunlardan biri Code Condition ve diğeri Declarative Rule Condition’dır. Code Condition ve Declarative Rule Condition koşul mekanizmaları çalışma prensibi olarak aynı olsalar da uygulama biçimleri olarak birbirlerinden ayrılırlar. Eğer koşul tipini Code Condition olarak belirlerseniz, koşulu kod yazarak kontrol etmeniz gerekir. Koşul tipini Declarative Code Condition olarak belirlerseniz, koşulu kod yazmaya gerek kalmadan bizim için geliştirilmiş koşul editörü aracılığıyla kontrol işini yaparsınız. Declarative Code Condition şekliyle tanımladığınız koşullar .rules uzantılı xml tabanlı bir dosya içerisinde saklanırlar. Aşağıda .rules uzantılı dosyaya ait bir ekran görüntüsü bulunmaktadır.
IfElse ve IfElseBranch Activity
IfElse aktivitesinin ne olduğunu daha önce yazdığım bir yazıda açıklamış ve başka bir yazım içerisindeki örnek uygulama içerisinde de kullanımını göstermiştim. Tekrar üzerinden geçmem gerekirse, IfElse aktivitesi içerisinde dallar bulunduran bir karar mekanizmasıdır. Bu dalların her birine IfElseBranchActivity adı verilir. IfElse aktivitesi C# sözdizimi içerisindeki if anahtar kelimesinin yaptığı işi yapmaktadır.
Not: Not: uygulamaları Sequence Workflow Console Application üzerinde yapıyorum.
Code Condition Tanımlaması:
• Workflow’un kod bölümüne geçin ve int tipinde, adı Yas olan bir özellik tanımlayın. Yas özelliğini koşul olarak kabul edip, uygulama içerisinde Yas özelliğinin değerini kontrol edeceğiz.
• Toolbox üzerindeki IfElse aktivitesinden bir tane diyagram üzerine sürükleyip bırakın.
• İlk IfElseBranch aktivitesini seçin ve özelliklerini açın. Bu aşamada Condition özelliğini Code Condition olarak belirleyin.
• Condition özelliğini Code Condition olarak belirlediğinizde alt kısımda Conditon özelliği gözükecektir. Buraya bir metot adı yazın ve Enter butonuna basın. Bu işlem, yazdığınız metot içerisinde kontrol işlemini gerçekleştireceğiniz anlamına gelir.
• Şimdi Condition özelliğine “YasiKontrolEt” yazın ve Enter butonuna basın.
• Bu noktada YasiKontrolEt metodu içerisinde kontrol işlemini yapacağız ve duruma göre ConditionalEventArgs tipinde olan e parametresinin Result özelliğine sonucu arayacağız. Eğer Result özelliğine true değerini atarsanız kontrolün yapıldığı IfElseBranch aktivitesi çalıştırılır. Result özelliğine False değerini atarsanız diğer IfElseBranch aktivitesine geçiş yapılır. Biz burada Yas özelliğinin 18’den büyük olup olmadığını kontrol edeceğiz.
• Birinci IfElseBranch aktivitesinin içerisine bir tane Code aktivitesi sürükleyip bırakın.
• Birinci IfElseBranch aktivitesinin ExecuteCode özelliğine Kod1Calistir yazın ve Enter butonuna basın.
• İkinci IfElseBranch aktivitesinin içerisine bir tane Code aktivitesi sürükleyip bırakın.
• İkinci IfElseBranch aktivitesinin ExecuteCode özelliğine Kod2Calistir yazın ve Enter butonuna basın.
• Aşağıdaki kodları yazın.
• Böylelikle IfElse aktivitesinden oluşan workflow’unuzu tanımlamış oldunuz. Bu workflow eğer Yas özelliğinin değeri 18’den büyükse konsolda “Yasiniz 18’den büyük!!!” değilse “Yasiniz 18’den büyük!!! değil” mesajını gösteriyor.
Declarative Rule Condition Tanımlaması:
• Workflow’un kod bölümüne geçin ve int tipinde, adı Yas olan bir özellik tanımlayın. Yas özelliğini koşul olarak kabul edip, uygulama içerisinde Yas özelliğinin değerini kontrol edeceğiz.
• Toolbox üzerindeki IfElse aktivitesinden bir tane diyagram üzerine sürükleyip bırakın.
• İlk IfElseBranch aktivitesini seçin ve özelliklerini açın. Bu aşamada Condition özelliğini Declarative Rule Condition olarak belirleyin.
• Condition özelliğini Declarative Rule Condition olarak belirlediğinizde alt kısımda ConditonName özelliği gözükecektir. Buradaki solda gözüken butona basın ve Select Conditon penceresini açın.
• Select Condition penceresindeki New butonuna basarak koşul tanımlamanızı sağlayacak olan Rule Condition Editor penceresini açın.
• Bu pencere içerisinde daha önceden tanımladığımız Yas özelliğini kontrol eden bir deyim yazın.
• Yukarıdaki pencerede Yas özelliğinin 18 olup olmadığını kontrol eden bir deyim yazdınız.
• OK butonuna basın. Tekrar açılan Select Conditon penceresinde az önce tanımladığınız Condtion1 adlı koşulu seçin.
• Select Condition penceresinde OK butonuna basarak koşul tanımlama işlemini sonlandırın.
• Birinci IfElseBranch aktivitesinin içerisine bir tane Code aktivitesi sürükleyip bırakın.
• Birinci IfElseBranch aktivitesinin ExecuteCode özelliğine Kod1Calistir yazın ve Enter butonuna basın.
• İkinci IfElseBranch aktivitesinin içerisine bir tane Code aktivitesi sürükleyip bırakın.
• İkinci IfElseBranch aktivitesinin ExecuteCode özelliğine Kod2Calistir yazın ve Enter butonuna basın.
• Aşağıdaki kodları yazın.
• Böylelikle IfElse aktivitesinden oluşan workflow’unuzu tanımlamış oldunuz. Bu workflow eğer Yas özelliğinin değeri 18’den büyükse konsolda “Yasiniz 18’den büyük!!!” değilse “Yasiniz 18’den büyük!!! değil” mesajını gösteriyor.
Sonuç olarak yukarıdaki iki yöntemden hangisini denerseniz deneyin, aşağıdaki diyagram görüntüsüne sahip olmanız gerekiyor. Eğer bir problemle karşılaştıysanız daha önceki yazılarımı okuyarak sorunu giderebilirsiniz.
Uygulamamızı Test Edelim:
Yukarıdaki adımları takip ederek Code Condition ya da Declarative Rule Condition koşul tanımlama yöntemleri ile IfElse ve IfElseBranch aktivitelerini workflow’unuz içerisinde tanımlayabilirsiniz.
• Mevcut projeniz içerisindeki Program.cs dosyasını açın. Dosyayı açtığınızda aşağıdaki gibi bir ekran görüntüsü ile karşılaşacaksınız.
• Program.cs içerisindeki Main metodunda yer alan WorkflowInstance tipinde olan instance değişkenin tanımlanmasından önceki bölüme aşağıdaki kodları yerleştirin.
• Ctrl + F5 tuşlarına basarak uygulamanızı çalıştırın.
Böylelikle IfElse aktivitesinin düzgün çalıştığını test etmiş olduk.
ConditionalActivityGroup
IfElse aktivitesine çok benzeyen ConditionalActivityGroup, eğer birden fazla aktivite ile belirli koşullar altında çalışmanız gerekiyorsa, IfElse aktivitesinden çok ConditionalActivityGroup aktiviteyi tercih ederiz. Bulundurduğu alt aktiviteleri WhenCondition özelliğindeki koşula bakarak çalıştırıp çalıştırmayacağına karar verir. IfElse aktivitesinden farkı ise hem While hem de Paralel Activity gibi çalışmasıdır. İşlemleri Paralel aktivite mantığıyla çalıştırabilmesi, aynı koşulda çalışması gereken birden fazla aktiviteyi de eş zamanlı çalıştırabilme imkânı sağlamaktadır. Bu çalışma şeklinde içerisindeki koşullara göre, altındaki aktiviteleri çalıştırır. ConditionalActivityGroup, barındırdığı aktiviteleri UntilCondtion özelliğine değerler atamazsanız sonsuza kadar çalıştırmaya devam edecektir. Burada da bir sayaç tutmak mantıklı olacaktır.
ConditionalActivityGroup Tanımlaması:
• Kod bölümüne geçin ve int tipinde Deger ve Sayac adında 2 özellik tanımlayın.
• Akış diyagramı üzerine bir tane ConditionalActivityGroup sürükleyip bırakın.
• “Drop Activities Here” yazan bölüme 3 tane Code aktivitesinden sürükleyip bırakın.
• İlk Code aktivitesini seçin ve WhenCondition özelliğini Declarative Rule Condition olarak belirleyin. Daha sonra ConditionName özelliğinde gözüken butona tıklayarak Select Condition penceresine gelin.
• New butonuna tıklayarak Rule Conditon Editor penceresine gelin ve aşağıdaki kodu yazın.
• OK butonuna basın. Bundan sonraki aşamalar IfElse aktivitesi içerisinde de tanımlayabildiğimiz Declarative Rule Condition ile aynı aşamalar olduğu için devam ettirmiyorum.
• İşlemleri yaptıktan sonra CodeActivity1 için koşulu tanımlamış oldunuz. Şimdi yapmanız gereken işlem CodeActivty1’in koşulu gerçekleştiğinde hangi kodun çalışacağını belirlemek. Bunun için CodeActivty1’i seçin ve ExecuteCode özelliğine Code1Calistir yazarak Enter butonuna basın. Böylelikle CodeActivity1 için bütün görüntülenen hataları gidermiş oldunuz.
• CodeActivity2’yi seçin.WhenCondition özelliğinde
this.Deger > 10 && this.Deger <= 20 koşulunu tanımlayın. CodeActivity2’nin ExecuteCode özelliğine Code2Calistir yazarak Enter butonuna basın.
• CodeActivity3’yi seçin.WhenCondition özelliğinde
this.Deger > 20 && this.Deger <= 30 koşulunu tanımlayın. CodeActivity3’ün ExecuteCode özelliğine Code3Calistir yazarak Enter butonuna basın.
• Bu işlemleri yaptıktan sonra hiçbir hata ile karşılaşmayacaksınız. Aşağıdaki ekran görüntüsüne ulaşacaksınız.
• Buradan sonra CodeActivityleri kodlamak kalıyor. Bunlar için aşağıdaki kodları yazın.
• ConditionalActivityGroup’u seçin ve UntilCondition özelliğini Declarative Rule Condition olarak belirleyerek Select Condition penceresini açın.
• New butonuna tıklayarak açtığınız Rule Condition Editor penceresinde aşağıdaki kodları yazın.
• Bu koşulu UntilCondition olarak belirleyin. Böylelikle ConditionalActivityGroup’a ait çalışma sınırı koymuş oldunuz. Eğer bu koşulu koymazsanız, içeride yazılan kodlar devamlı çalıştırılacaktı. Aşağıda bu aşamadan sonra ConditionalActivityGroup’a ait özelliklerin ekran görüntüsü bulunmaktadır.
• Bu aşamayı da bitirdiyseniz, ConditionalActivityGroup tanımlamasını da bitirmiş oldunuz. Şimdi tanımladığımız workflow’u test edelim.
Uygulamamızı Test Edelim:
Tanımladığımız ConditionalActivityGroup aktivitesini içerisinde bulunduran workflow’umuzu çalıştırarak test edelim. Test işlemini yapmak için aşağıdaki adımları izleyiniz.
• Mevcut projeniz içerisindeki Program.cs dosyasını açın. Dosyayı açtığınızda aşağıdaki gibi bir ekran görüntüsü ile karşılaşacaksınız.
• Program.cs içerisindeki Main metodunda yer alan WorkflowInstance tipinde olan instance değişkenin tanımlanmasından önceki bölüme aşağıdaki kodları yerleştirin.
• Ctrl + F5 tuşlarına basarak uygulamayı çalıştırın.
Aynı sonucun iki kere gösterildiğini merak mı ediyorsunuz? Burada sayac değerini 0’dan başlatıyoruz. Ve Until koşulumuz > 1 olduğu durum. İlk olarak ConditionalActivityGrup 0 için çalıştırılıyor daha sonra 1 için çalıştırılıyor. Değer 2 olduğunda ConditionalActivityGrup aktivitesinin çalışması sonlanıyor.
Bu bölümde IfElse, IfElseBranch ve ConditionalActivityGroup aktivitelerini tanımış oldunuz. Out-Of-The-Box aktivitelerinden sizin için seçtiğim bu 3 aktivitelerin tanımlanmasını ve uygulanmasını da yazı içeriside tecrübe ettiniz. Bir sonraki yazımda sizlere While, Sequence ve InvokeWorkflow aktivitelerini anlatacağım. Yazı serimi takip ediyorsanız seviyenin giderek daha da arttığını fark edeceksiniz. Bu noktadan sonra Windows Workflow Foundation ile iligili temel seviye konulardan orta seviye konulara geçiş yapmış oldunuz.
Çağdaş Davulcu
[email protected]
Makale:
WWF - Akış Kontrolü Aktivitelerinin Kullanımı - I .NET 3.0 ve .NET 3.5 Özel Bölümü Çağdaş Davulcu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|