Makale Özeti

Windows Workflow Foundation ile uygulama geliştirmeye başlamadan önce Toolbox üzerinde bulunan ve Out-Of-The-Box aktiviteleri olarak adlandırılan aktiviteler ile ilgili fikriniz olması gerekir. Aslında microsoft tarafından tam olarak söylene şu: “Daha verimli Workflow Foundation uygulamaları geliştirmek istiyorsanız, örnmeye Out-Of-The-Box aktivitelerinden başlayın”. Bu yazımda sizlere Out-Of-The-Box aktivitelerinden söz edeceğim ve Out-Of-The-Box aktivitelerini gruplandıracağım

Makale

Windows Workflow Foundation – Out-Of-The-Box Activiteleri

 

Windows Workflow Foundation ile uygulama geliştirmeye başlamadan önce Toolbox üzerinde bulunan ve Out-Of-The-Box aktiviteleri olarak adlandırılan aktiviteler ile ilgili fikriniz olması gerekir. Aslında microsoft tarafından tam olarak söylene şu: “Daha verimli Workflow Foundation uygulamaları geliştirmek istiyorsanız, örnmeye Out-Of-The-Box aktivitelerinden başlayın”.

 

Bu yazımda sizlere Out-Of-The-Box aktivitelerinden söz edeceğim ve Out-Of-The-Box aktivitelerini gruplandıracağım.

 

Out-Of-The-Box Activiteleri

 

 

1.    Code Activity:

 

 

Code Activity workflow içerisine kendi kodumuzu eklemeye yarayan aktivite türüdür. Code Activity’i kullanarak yazdığımız kodlar eşzamanlı bir şekilde çalışırlar ve bu nedenden dolayı workflow’un çalışmaya devam etmesi için Code Activity’nin sonlanması gerekmektedir. Code Activity bir bakıma Custom Activity olarak ta düşünülebilirler. Code Activity içerisinde yazılan kodların tekrar kullanımları çok düşüktür hatta sadece o workflow içerisinde kullanılabilirler. Son olarak Code Activity iş akışınız içerisndeki Business Logic’i enkapsüle edilen yapılardan biridir.

 

 

 

2.    Compensate Activity:

 

 

Compensating Activity ile ilgili ayrıntılara girmek isterseniz ilk önce Com+  teknolojinsin bir bölümü olan Compensating Resource Managers bölümüne göz gezdirerek compensate mantığını öğrenmeniz sizin için iyi olacaktır. CompensateActivity’i workflow içerisinde bir hata ile karşılaştıktan sonra gerçekleştirilen işlemleri geri almak için kullanırız. Bunu hata çıkarak sonlanan transaction’ın RollBack edilmesi gibi de algılayabilirsiniz. Compensate Activity’i sadece CompensationHandlerActivity, CancellationHandlerActivity ve k içerisinde kullanabilirsiniz.

 

 

 

3.    Conditional Activity Group:

 

 

İçerisine eklediğimiz aktiviteleri belirli bir koşul temelinde çalıştıran aktivite türüdür. Aslında içerisine eklenen aktiviteleri Child Activity olarak adlandırırız ve CAG’ın yaptığı şey de tanımlanmış Child Activity serisini sırayla çalıştırmaktır. Conditional Activity Group, CAG olarak bilinir. CAG’ın içerisinde bulunan tüm aktivitelerinde WhenCondition adı verilen koşul yapısı bulunur. Bizlerin CAG içerisine eklediğimiz her aktivite için When koşulunu implement etmemiz gerekir. Bunun haricinde CAG içerisine eklenmiş her aktivitenin opsiyonel olan ve adına UntilCondition denilen koşullar bulunmaktadır. Çalışma esnasında Until koşulu yerine getirildiğinde, o sırada çalışan tüm aktiviteler iptal edilir.

 

 

 

4.    Delay Activity:

 

 

Workflow’unuzu milisaniye bazında bekletme işlemini yapan aktivitedir. Workflow’unuz çalıştırma işini yapmadan önce belirlediğiniz süre boyunca bekletilir. Delay Activity genelde workflow’unuz içerisindeki uzun sürebilecek olan akışlarda, dışarıdan çağrılan nesnelerin işlemlerini tamamlamasını beklediğimiz durumda kullanılır.

 

 

 

5.    EventDriven Activity:

 

 

EventDriven Activity beklide WWF’in en önemli aktivitelerinden biridir. Öncelikli görevi State Machine Workflow ile Sequence Workflow arasındaki geçişi sağlamaktır. Diğer yaptığı iş ise içerisinde barındırdığı alt aktiviteleri belirtilen olay gerçekleştiğinde çalıştırmaktır. Daha çok State Machine Workflow senaryolarında geçerlidir. Son olarak EventDriven Activity ile çalışırken, EventDriven Activity’e ekleyeceğimiz al aktivitelerin IEventActivty interface’ini implement etmiş olmasına dikkat etmeliyiz. Bizlere sunulan aktiviteler içerisinde HandleExternalEvent ve Delay aktiviteleri bu interface’i implement emiştir.

 

 

 

6.    Fault Handler Activity:

 

 

Fault Handler aktivitesi C# içerisindeki catch bloğu gibi çalışan bir aktivitedir. Temel olarak hataları, istisnai durumları ya da özel olarak belirttiğimiz nesneleri izler. Hata çıktığında içerisinde barındırdığı alt aktiviteleri çalıştırır. FaultHandler aktivitesinin hangi hatayı izlemesi gerektiğini Fault özelliğine değer atayarak belirleyebiliriz. Workflow’unuz içerisine FaultHandler aktivitesinden ekleyebilmeniz için, aktiviteniz üzerine sağ tuş ile tıklayıp View Fault Handlers menüsünü seçmeniz gerekmektedir.

 

 

 

7.    IfElse Activity:

 

 

Workflow içerisindeki koşuk aktivitesidir. Yaptığı şey belirli bir koşul altında bulunan koşul bölümlerinden birini çalıştırmak. Altında bulunan ilk bölüm mutlaka bir koşul bulundurmalıdır. Aslında ilk bölüm kodumuzun If bloğunu temsil eder. Altında bulunan son bölüm ise else bloğunu temsil eder. Burada koşuk tanımlamamız zorunlu değildir. IfElse aktivitesi içerisindeki alt bölümlerde farklı akışlar tanımlamak mümkündür.

 

 

 

8.    Invoke Web Service Activity:

 

 

Dışarıdaki bir web servisi çağırmak için kullanılan aktivitedir. Bu aktiviteyi kullanabilmeniz için projeniz içerisine bir adet web reference eklemeniz gerekmektedir. Web reference’ı ekledikten sonra InvokeWebServie aktivitesinin ProxyClass özelliğine değer atayın ve InvokeWebServie aktivitesinin MethodName özelliğine web servisin çağırmak istediğiniz metodun adını yazın. Bu şekilde workflow’unuz içerisinden herhangi bir web servisini çağırabilirsiniz.

 

 

 

9.    Listen Activity:

 

 

En az iki aktiviteden oluşması Listen Activity, içerisinde sadece EventDriven Activity tutabilir. Listen Activity barındırdığı EventDriven aktivitelerinin olaylarını yakalamalarını bekler. Altında bulunan EventDriven akitivelerinden biri kendi olayını yakaladığında diğer EventDriven bölümleri iptal edilir. Listen Activity bir akış akış aktivitesidir ve State Machine Workflow uygulamaları içerisinde kullanılmaz.

 

 

 

10.     Paralel Activity:

 

 

İçinde en az iki tane Sequence Activity bulunduran Paralel Activity, aynı anda birden fazla Sequence Activity’nin bağımsız olarak çalıştırılmasını sağlar. Paralel aktivite içinde bulunan Sequence aktivitelerinin hepsinin çalışması bittiğinde, Paralel Activity de görevini tamamlamış olur. Burada dikkat edilmesi gereken nokta birden fazla Sequence’in aynı veriye erişmeye çalışmasının problem oluşturabileceği.

 

 

 

11.     Policy Activity:

 

 

Workflow içerisinde kurallar tanımlayabildiğimiz aktivitedir. Policy aktivitesi bizlere kural tabanlı iş akışı tanımlama imkânı sunar. Genelde proje içerisinde koşul tabanlı bir durumla karşılaştığımızda IfElse aktivitesi ya da Policy aktivitesi kullanırız. İçerisinde akış geçen durumlarda IfElse aktivitesi kullanarak mevcut akışın farklı bir yöne doğru ilerlemesini sağlarız. Akış içerisinde küçük kontrol mekanizmaları kullanacaksak ve koşul sonunda akış içerisinde bir değişiklik olmayacaksa Policy aktivitesini kullanmamız doğru olur.

 

 

 

12.     Replicator Activity:

 

 

Replicator Activity C# içerisindeki foreach deyimine benzer. Tek bir alt aktiviteden birden fazla kopya oluşturur ve kopyaları çalıştırır. Bir veri koleksiyonu içerisindeki nesne tabanlı alt aktiviteden birden fazla örnek oluşturur ve bu örnekleri çalıştırır. Asıl kullanım yeri Data-Driven iş akışlarıdır. Replicator Activity işleri hem Sequential hem de Paralel olarak yapabilme özelliğine sahiptir.

 

 

 

13.     Sequence Activity:

 

 

İçerisinde bulundurduğu aktiviteleri belirlediğimiz sıra ile çalıştırmaya yarayan aktivite türüdür. Yalnız tek bir alt bölüm bulundurabilir yani IfElse aktivitesi gibi istediğimiz kadar alt bölüm ekleyemeyiz.

 

 

 

14.     SetState Activity:

 

 

State Machine Workflow içerisinde kullanılan SetState Activity, daha önceden tanımladığımız State aktiviteleri arasındaki geçişi sağlayan aktivitedir. SetState aktivitesinin TargetStateName özelliğine geçiş yapılacak State aktivitesinin değerini vererek, SetState aktivitesini yönlendirmiş oluruz.

 

 

 

15.     State Activity:

 

 

State Activity, State Machine Workflow yapısının en önemli parçasıdır. Biz State Machine Workflow yapılarını State akitivileri ile kurarız. Kendi içinde de State Activity barındırabilme özelliğne sahiptir. StateInitialization, StateFinalization ve State olmak üzere 3 ayrı duruma sahiptir. StateInitialization başlangıç durumunu ifade eder. StateFinalization bitiş durumunu ifade eder. State ise ara durumları ifade eder. State aktiviteleri arasındaki gezinimi StateInitialization aktivitesi, StateFinalizatin aktivitesi ve EventDriven aktivitesi ile yaparız.

 

 

 

16.     StateInitialization Activity:

 

 

State başladığında herhangi bir EventDriven aktivitesi çalışmadan iş akışımız içerisinde bazı işler yapmak istersek burada StateInitialization aktivitesini kullanırız. StateInitialization aktivitesi tam olarak State aktivitesine ilk girildiğinde çalışmaktadır. Bu aktiviteyi State aktivitesi içerisinde sadece bir kere kullanabilirisiniz.

 

 

 

17.     Suspend Activity:

 

 

Çalışan iş akışı içersinde hata çıktığında, iş akışını beklemeye alabiliriz. Bu sırada iş akışına gelen mesajlar sıraya alınır. İş akışının sunulduğu istemci tarafında WorkflowRuntime nesnesinin WorkflowSuspended olayı fırlatılır. Böylelikle bir iş akışının ne zaman beklemeye alındığını görebilir ve hatanın çıkma nedenini anlayabiliriz. İş akışının çalışmaya devam etmesi için de iş akışını yeniden başlatmamız gerekmektedir. Bu işi WorkflowInstance sınıfının Resume metodunu çalıştırarak yaparız.

 

 

 

18.     Terminate Activity:

 

 

Bir akış aktivitesi olan Terminate Activity, uygulama içerisinde hata çıktığında iş akışını durdurur. Suspend Activity ile karıştırmamak gerekir. Çünkü Suspend aktivitesi iş akışı içerisinde ciddi bir hata ile karşılaşıldığında iş akışını bekletir. Terminate Activity ise iş akışını durdurur yani sonlandırır. Aynı zamanda bu aktivite çıkan hatayı loglar. Çalışan iş akışının sonlandığını WorkflowRuntime nesnesinin WorkflowTerminated olayı ile yakalamak mümkündür.

 

 

 

19.     Throw Activity:

 

 

Hata yakalama aktiviteleri grubunda olan Throw Activity, iş akışı içerisinde çıkan hatayı başka bir aktiviteye bildirmek için kullanılır. Throw aktivitesini catch bloğu içerisinde hata fırlatmak için kullandığımız throw anahtar kelimesine benzetebiliriz. Throw aktivitesini herhangi bir aktivitenin View Fault Handler bölümü içerisinde kullanmak doğru olacaktır.

 

 

 

20.     Transaction Scope Activity:

 

 

Akış aktiviteleri grubunda olan Transaction Scope Activity, içerisindeki aktiviteleri aynı transaction kapsamı altında çalıştırarak, bu aktivitelerin tek bir iş gibi çalışmasını sağlar. Çalışma esnasında Transaction Scope kapsamındaki aktivitelerin herhangi birinde bir problem ile karşılaşılırsa gerçekleştirilen işlemler geri alınır ve kapsam içerisindeki aktiviteler işe başlamadan hangi durumda iseler o duruma getirilirler.

 

 

 

21.     While Activity:

 

 

C#’tan da bildiğimiz While deyimi, Windows Workflow Foundation içerisinde While Activity olarak karşımıza çıktı. While aktivitesinin koşulu true olduğu sürece, içerisine yerleştirdiğimiz aktiviteleri çok hızlı bir şekilde çalıştırmak için tasarlanmış bir aktivitedir. While aktivitesinin çalışma koşulu Policy aktivitesi ile ya da Code aktivitesi ile sağlanabilir.

 

 

 

Aktivitelerin Gruplandırılması

 

Yukarıda açıladığım aktiviteleri gruplandıracak olursak aşağıdaki gibi bir çıktı elde ederiz:

 

·        Olay yakalama

o       EventDriven Activity

o       Listen Activity

·        Akış kontrolü

o       ConditionalActivityGroup

o       IfElse Activity

o       IfElseBranch Activty

o       Paralel Activity

o       Replicator Activity

o       Sequence Activity

o       Suspend Activity

o       Terminate Activity

o       While Activity

·        Hata yajalamak

o       Fault Handler Activity

o       Throw Activity

·        Özel iş akşışı mantığı

o       Code Activity

·        Web servisleri

o       InvokeWebService Activity

·        Kurallar

o       Policy Activity

·        Durum yönetimi

o       SetState Activity

o       State Activity

o       StateInitialization Activity

o       StateFinalizationActivity

·        Yerel servis iletişimi

o       HandleExternalEvent Activity

·        Transaction

o       CompensateActivity

o       TransactionScope Activity

 

 

Özet:

 

Benim düşüncem Windows Workflow Foundation ile ilgili uygulama geliştirmeye başlamadan önce bilinmesi gereken en önemli şey aktiviteleri tanımaktır. Bu yazı içerisinde aktiviteler ile uygulama geliştirecek seviyeye gelmeyeceksiniz. Bir sonraki yazımda kendinizi tamimiyle Windows Workflow Foundation içerisinde bulacağınız “Sequential Workflow Uygulamaları” için gerekli alt yapıyı sağlamak için bu makaleyi yazdım. Şimdiden Out-Of-The-Box aktivitelerini karıştırsanız iyi olur.