|
Windows Workflow Foundation - Uygulamalara Parametreler Yollamak |
|
Gönderiliyor lütfen bekleyin... |
|
|
Geçen yazılarımda Windows Workflow Foundation ile basit bir uygulama yapmıştık. Daha sonra Out-Of-The-Box aktivitelerini tanıyarak sizleri Sequential Workflow ve State Machine Workflow uygulamalarına hazırlamaya çalışmıştım. Bu yazımda ise Sequential Workflow alt yapısını kullanarak, daha önceden tanımladığımız Workflow ’a parametreleri göndermeyi ve gönderilen parametreler sonucunda oluşan çıktıyı yakalamak işlemlerinden söz etmeye çalışacağız.
Windows Workflow Foundation teknolojisini kullanarak tanımladığımız akış kütüphanelerini daha esnek ve dinamik yapılar olarak tanımlamak istediğimizde, dışarıdan parametreler almak ya da dışarıya değerler döndürmek ihtiyacı duyarız. WWF içerisinde biz bu işi özellikleri (property) kullanarak yaparız.
Özellik kavramını biraz daha genişletecek olursanız karşınıza iki tür özellik yapısının çıktığını göreceksiniz. Bunlardan ilki olan ve aşağıdaki uygulama içerisinde de kullandığım sınıflar içerisinde tanımlanan standart özelliklerdir. Zaten standart özellik tanımlamasını .Net içerisinde çok sık olarak kullanmaktayız. İkincisi yapı ise dependency property ’dir. Dependency property kavramı .Net Framework 3.0 ile gelen teknolojilerde çok sık kullanılan bir yapıdır. WPF, WWF gibi teknolojilerde çok sık kullanılırlar. Yaptıkları iş ise data binding durumunda .Net framework 3.0’ a uyumluluk göstermesi ve özellikle Custom Activity tanımlamalarında eğer özelliklerin değerleri çalışma zamanında belirleniyorsa Workflow bazında değer saklanması işlevini görür. Aslında dependency property kavramını ilerleyen zamanlarda Custom Activity tanımlama ile ilgili örneklere geçtiğimde daha rahat kavrayacaksınız .
Uygulama Adımları
Bu bölümde dışarıdan aldığı yaş parametresine göre geriye “Yasınız 18’den büyük”, “Yasınız 18’den küçük” ve ya “Yasınız 18” değerini döndüren squential workflow uygulaması yapacağız. Bu uygulamadaki amaç uygulama içerisinde kullanılan IfElse aktivitesinin kullanımını öğrenmekten çok tanımladığımız workflowlara parametreler yollamak ve Workflowların çalışması bittiğinde geriye döndürdüğü değerleri yakalamak olmalıdır.
• Bir tane Sequential Workflow Console Application başlatın. Uygulamayı başlattıktan sonra aşağıdaki görüntüyü elde edeceksiniz.
• ToolBox’tan bir tane IfElse aktivitesi sürükleyip bırakın. Parametre olarak alınacak yas değeri için 3 durum söz konusudur(if: yas 18’den büyük mü, else if: yas 18’den küçük mü, else: yaş 18). Varsayılan olarak akış diyagramı üzerine bir tane IfElse aktivitesi sürükleyip bıraktığınızda if ve else blokları gelecektir. Uygulama içerisindeki 3 durumu da destekleyebilmek için IfElse aktivitesi içersindeki IfElseBranch aktivitelerine bir IfElseBranch aktivitesi daha ekleyin. Bunu yaparken IfElse aktivitesi üzerine sağ tuşla tıklayarak Add Branch bölümünü seçin. IfElse aktiviteleri koşul aktiviteleri bölümüne girmektedir. Bir sonraki yazımda koşul aktivitelerinin sequence worklfowlar içerisindeki kullanımına değineceğiz.
• IfElse aktivitesine branch ekledikten sonra aşağıdaki görüntüyü alacaksınız.
• Bu aşamada IfElse aktivitesininin Name özelliğini “YasiDenetle“ olarak belirleyin. “YasiDenetle” adlı IfElse aktivitesine bağlı IfElseBranch aktivitelerinin name özelliklerini aşağıdaki resimdeki gibi belirleyin.
• Yukarıdaki resme baktığınızda “BuyukMu” ve “KucukMu” IfElseBranch aktivitelerinin üzerlerinde ünlem işareti olduğunu göreceksiniz. Ünlem işareti o aktivitenin koşulunun belirlenmemiş olduğunu bildirir. Şimdi “BuyukMu” aktivitesini seçin ve Properties penceresini açın. Orada Condition adında bir özellik göreceksiniz. Burada DeclarativeRuleCondition’ı seçin.
• DeclarativeRuleCondition’ı seçip ConditionName özelliğinin yanında bulunan(mavi renkle işaretlediğim bölüm) butona tıklayın. Aşağıdaki menün açıldığını göreceksiniz.
• Yukarıdaki menüdeki New butonuna tıklayarak “BuyukMu” IfElseBranch için bir koşul tanımlarız. Ben Workflow’un kod bölümüne gidip int tipinde “Yas” adında bir özellik tanımladım. Aşağıdaki koşulda Yas özelliğinin değerinin 18’den büyük olup olmadığını kontrol ediyoruz.
• Koşulu tanımlayıp OK butonuna bastığınızda aşağıdaki ekran görüntüsünü elde edeceksiniz. Condition1’i seçip OK butonuna bastığınızda “BuyukMu” IfElseBranch için çalıştırılacak koşulu belirlemiş olacaksınız.
• Yukarıdaki işlemleri yaptığınızda aşağıdaki ekran görüntüsüne ulaşacaksınız. Bu aşamadan sonra yapmanız gereken, “KucukMu” IfElseBranch aktivitesi için de bir koşul tanımlamak ve Code aktivitelerini iş akışı üzerine yerleştirmek.
• “KucukMu” IfElseBranch aktivitesini seçin ve özellikler penceresinden bir önceki adımlarda yaptığınız gibi Condition özelliğini DeclarativeRuleCondition olarak ayarlayın. ConditionName özelliğinden SelectCondition Menüsünü açın ve yeni bir koşul eklemek için New butonuna tıklayın. Açılan Rule Condition Editor penceresinde Condition bölümüne aşağıdaki koşulu yazın.
• Rule Condition Editor penceresindeki OK butonuna bastığınızda aşağıdaki ekran görüntüsü ile karşılaşacaksınız. Select Condition penceresindeki “Condition2” adlı koşulu seçin ve OK butonuna basın. Böylelikle “KucukMu” IfElseBranch aktivitesinin de koşunu belirlemiş olduğunuz.
• Buraya kadar adımları takip ettiyseniz aşağıdaki ekran görüntüsünü göreceksiniz. Bu yaptığınız koşul tanımlama işleminin başarılı olduğunu gösteren bir resimdir. Biraz açıklama yapmak gerekirse, şu ana kadar bir iş akışı projesi içersine IfElse aktivitesi eklediniz. IfElse aktivitesi içerisine bir tane daha IfElseBranch aktivitesi ekledik. Buradaki “BuyukMu” olarak tanımladığınız IfElseBranch, kod içerisindeki if bloğunu ifade etmektedir. “KucukMu” olarak tanımladığınız IfElseBranch, kod içerisindeki else if bloğunu ifade etmektedir. Eşit IfElseBranch ise kod içerisindeki else bloğunu ifade etmektedir. O zaman nasıl kod yazarken if ve else if blokları için koşul yazıyorsak, buradaki “BuyukMu” ve “KucukMu” IfElseBranch aktiviteleri için koşullar tanımlamamız rasyonel bir davranış olacaktır.
• Her IfElseBranch aktivitesi içerisine bir tane CodeActivity ekleyin.
• codeActivity1’seçin ve Name özelliğini caBuyukCalistir olarak belirleyin. ExecuteCode özelliğine BuyukCalistir yazın ve Enter butonuna basın.
• BuyukCalistir yazıp Enter butonuna bastığınızda kod tarafına sizin yerinize BuyukCalistir adında bir metot tanımlandığını göreceksiniz. BuyukCalistir metodunun içerisinde yazdığınız kod, Yas özelliğinin değeri 18’den büyük olduğu durumda çalışacaktır.
• Sürükleyip bıraktığınız Code aktivitelerinin Name özelliklerini sırasıyla caBuyukCalistir, caKucukCalistir ve caEsitCalistir olarak belirleyin.
• Bu adımda caBuyukCalistir, caKucukCalistir ve caEsitCalistir Code aktivitelerinin ExecuteCode özelliklerini sırasıyla BuyukCalistir, KucukCalistir ve EsitCalistir olarak belirleyip, her belirleme sonucunda Enter butonuna basarak kod tarafına metotların işlenmesini sağlayın. Bu işlemleri yaptıktan sonra aşağıdaki ekran görüntüsüne ulaşacaksınız. Bunun yanı sıra geriye değer döndürmek için kullanacağımız string tipinde DonusDegeri adında bir özellik tanımlamanız gerekmektedir.
• Metotları tanımladıktan sonra geriye metotları işlemek kaldı. Aşağıdaki kodları metotlarınıza ekleyin.
• Bu aşamaya geldiğinizde Workflow’unuzu tanımlamış olacaksınız. Geriye parametreleri workflow’a yollamak ve dönüş değerini konsola yazdırmak kalıyor.
• Ctrl + F5 butonuna basarak uygulamanızı çalıştırdığınızda 19 olarak yolladığımız parametre sonucunda karşınıza “Yasiniz 18’den büyük” metinsel ifadesi sönüş değeri olarak çıkacaktır. Siz de bunu ekrana yazdırarak sonucu görmeyi sağlayacaksınız.
DependencyProperty
DependencyProperty, .NetFramework 3.0 içerisindeki özelliklerin yeni bir kullanım şeklidir. DependencyProperty olarak tanımlanan değişkenler, çalışma zamanında özelliklerin değerleri değiştiğinde, arka planda çalışan sisteme özelliklerin değerlerinin değiştiğini haber veren bir yapı içerisine dahil edilmiş olurlar. Özellikle WPF içerisindeki data binding kullanım şekli ya da WWF içerisinde tanımlanan Custom Activitylerde kullanılan bir yapı olarak karşımıza çıkıyor. Aslında .Net Framework 3.0 içerisinde özel amaçlı özelliklerle çalışmak istiyorsanız bundan sonra DependencyPropertyleri kullanmalısınız. Aynı zamanda DependencyPropertyler bir aktivitede output olarak kullanılan özelliğin diğer bir aktivede input olarak kullanılabileceği durumlar için geliştirilmiştir.
Yukarıdaki örnekte tanımladığımız Yas özelliğini DependencyProperty ile tanımlanmasını görelim. Aşağıda DependencyPropertylerinin tanımlanması ile ilgili bir örnek kod bulunmaktadır.
Workflowlarla çalışmak istediğinizde ilk ihtiyaç duyacağınız şeyler workflow’a parametreler yollamak ve workflow çalışmasını bitirdiğinde dönüş değerini yakalamak olacaktır. Workflow’u oluştururken parametre yollamak istiyorsanız ihtiyaç duyacağınız şey, Dictionary<string, object> tipinde bir koleksiyon oluşturmak. Bunun içerisinde eklediğiniz elemanlar wokflow içerisine parametre olarak yollanacaktır. Yollama işlemini de workflowruntime nesnesinin CreateWorkflow metoduna Dictionary<string, object> tipindeki kolleksinyonu parametre olarak vermenizle yapacaksınız. Ayrıca bu bölüm içerisinde .Net Framework 3.0 yapısı ile entegrasyonu sağlamak ve genelde custom activity tanımlamak için kullanacağımız DependencyProperty kavramını gördük.
Çağdaş Davulcu
[email protected]
Makale:
Windows Workflow Foundation - Uygulamalara Parametreler Yollamak .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
|
|