Merhaba Arkadaşlar;
Aktivitelere devam.... ;)
Replicator Activity
İterasyon diye adlandırılan işlemleri, workflow içerisinde yürütülmesini sağlar. Foreach ve ya For döngüsünün iş akışı içerisindeki halidir. Özellikleri ve olayları aşağıdaki tabloda gösterilmiştir.
Replicator Activity Properties
CurrentIndex: Replicator Activity’nin, koleksiyon yapısı içindeki elemanlardan hangisini işlem için devreye girdiğini ya da gireceğini belirtir.
CurrentChildData: Replikator aktivitesi çalışırken, o anda devrede olan ya da devreye irecek objeyi bu özellik içerisinde tutar. Replicator aktivitesi, kendi içindeki alt aktiviteyi devreye sokmadan önce onu kopyalar ve yapılası gereken değişiklikler varsa bu kopya üzerinden yapar. Bunun bize faydası, işlemden önce ve sonra nerede durumda olduğumuzu ve son olarak ne yaptığımız gibi bilgilere erişme imkanı sunar.
InitialChildData: Replicator aktivitesinin hangi yapısını iterasyon’a sokacağını bildirdiğimiz özelliğidir. Burada belirteceğimiz yapı IList olmak zorundadır. Replicator aktivitesi, kuralları doğrultusunda iterasyona sokacağı objenin IList olması gerektiğini belirtir. Bu aktivite çalışmaya başladığı anda InitialChildData özelliği sayesinde IList koleksiyonu içerisinde dönmeye başlar.
ExecutionType: Replicator Aktivitesinin, nasıl çalışacağını belirlediğimiz özelliğidir. Bu aktivite iki şekilde çalışmaktadır, Sequence ve Paralel.
Replicator Activity Events
ChildCompleted: Bu event çalıştığında hangi metodun çalışacağını belirtiriz
Completed: Bu event çalıştığında, hangi metodun çalıştırılacağını belirtiriz.
Initialized: Bu event çalıştığında, hangi metodun devreye girmesini istiyorsak onu belirtiriz.
ChildInitialized: Bu event çalıştığında, hangi metodun çalıştırılacağını belirtiriz.
FaultHandlerActivity
Şimdiye kadar incelediğimiz aktivitelerin hepsinin sorunsuz çalıştığını varsayarak örneklerimizi gerçekleştirdik. Ya da bir durumdan çıkmak için ne yapmak gerektiğinden, kullanılması gereken metot, özellik ya da aktiviteden bahsettik. Şimdi ise FaultHandlerActivity ile bir hata yaratıp, daha sonra bu hatayı yakalayacağız. Daha önce bahsettiğim gibi, sürekli olarak programımızın akışını kontrol ederken kullandığımız Try-Catch bloğuna benzer bir yapıyı, aktivite olarak inceleyeceğiz. Bunun için yeni bir Sequential Workflow Console Application projesi yaratalım ve Sequential Workflow bölümüne bir CodeActivity sürükleyerek bırakalım.
Daha sonra CodeActivity1’i seçip sağ tıklayarak Generate Handler’ı seçelim. Bu işlemi yaptıktan sonra aşağıdaki kod bloğu otomatik olarak yaratılacaktır.

namespace ParalelAktivite
{
public sealed partial class Workflow1 : SequentialWorkflowActivity
{
//public string Bilgi { get { return "Beklemeye alındı !"; } }
public Workflow1()
{
InitializeComponent();
}
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
throw new ApplicationException("Hata !");
}
}
}
Hata olarak yarattığımız Exception’nı çalışma zamanında yakalayabilmek için, BreakPoints ile işaretlememiz yeterli olacaktır.

En yalın hali ile bir Exception yarattık ve bunu çalışma zamanında yakaladık. Windows Workflow Foundation’da iki adet Exception tipi mevcuttur. FaultHandlerException ve CancelHandler.
İşlemin sonuçlanmadığı durumlarda View Fault Handler kullanılmaktadır. View Fault Handler’ı seçtikten sonra, faultHandlerActivity1 adındaki aktivite, Sequential Workflow’un içerisine eklenmiş olur.

Ancak yeterli olmaz. Toolbox’ımız dan FaultHandlerActivity’i sürükleyip Workflow Exceptions’ın içerisine bırakmak gerekir.

Daha sonra Drop Activities yazan bölüme bir Code Activity ekleyerek, istediğiniz bilgilendirmeyi, ekran çıktısı olarak gösterebilirsiniz.

public sealed partial class Workflow1 : SequentialWorkflowActivity
{
//public string Bilgi { get { return "Beklemeye alındı !"; } }
public Workflow1()
{
InitializeComponent();
}
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
throw new ApplicationException("Hata !");
}
private void Hatavar(object sender, EventArgs e)
{
Console.WriteLine("Hata Yakalandı !");
}
}
;)

Eğer isterseniz, FaultHandler aktivitesinin üzerinde sağ tıklayarak, karşımıza çıkan Properties penceresindeki Fault özelliğine, değer ataması yapabilirsiniz. Eğer istersek, ApplicationAxception sınıfına ait bir property tanımlaması yapıp kullanabilirsiniz.
