Windows Workflow Foundation kullanarak toplu insert işlemi
Şu ana kadar yazdığım WWF makalelerini incelediğinizde Sequence iş akışları üzerine yoğunlaştığımı göreceksiniz. Bu yazımda sizlere WWF teknolojisini kullarak Sequence iş akışları ile toplu insert işlemini yapan bir uygulamayı adım adım anlatacağım.
Not: Bu uygulamayı yapabilmeniz için daha önceden yazmış olduğum WWF makalelerine göz atarsanız, yaptığım işlemleri daha rahat anlarsınız.
Uygulama içeriği:
Bu uygulama içerisinde bir kişi sınıfı tanımlayacağız. List<Kisi> tipinde bir koleksiyonu workflow’umuza parametre olarak yollayıp koleksiyon içerisindeki kişi tipindeki elemanları veri tabanına aynı transaction içerisinde kayıt edeceğiz. Toplu kayır işlemi yapılırken bir hata çıkarsa transaction’ı geri alacağız. Genel olarak uygulamanın içeriği budur.
Uygulama türü:
Sequential Workflow Console Application.
Veri Tabanını Tanımlayalım:
KisiDB adında bir veri tabanı oluşturun. Aşağıdaki yapıda KisiID kolonu identity olan Kisiler tablosu oluşturun.
Kisi Sınıfını Tanımlayalım:
İçerisinde KisiID, Ad, Soyad özelliklerinin bulunduğu bir Kisi sınıfı tanımlayın.
Kisi sınıfınını uygulamamız içerisindeki bölümlerde kullanacağız. Bu aşamadan sonra Workflow’umuzu tanımlamamız gerekiyor. Tanımlama işlemini yaparken zorlanmamanız için Workflow içerisinde kullanacağımız aktivitelerin özelliklerini aşağıda açıkladım.
Uygulama içerisinde kullanılan fieldlar:
Workflow1’in kod bölümüne geçin ve sınıf seviyesinde aşağıdaki kodları yazın.
Daha sonra uygulamanın dışarıdan parametre olarak alacağı KisiList DependencyProperty’sini tanımlayın.
Uygulama içerisinde kullanılan aktiviteler:
Aktivite Türü: CodeActivity
1-
Özellik
Değer
Name
codeActivityFieldlariYapilandir
ExecuteCode
Yapilandir
Hangi Aktivitenin İçerisinde
En Dışta. Hiçbir aktivitenin içinde değil.
2-
codeActivityBaglantiAc
BaglantiAc
ifElseBranchActivityKisilerNullDegil
3-
codeActivityTransactionBaslat
TransactionBaslat
ifElseBranchActivityAcik
4-
codeActivityKisiKaydet
KisiKaydet
sequenceActivity1
5-
codeActivityKisiBIlgisiGoster
codeActivityKisiBılgisiGoster
ifElseBranchActivityEvet
6-
codeActivityTransactioniOnayla
TransactioniOnayla
7-
codeActivityBaglantiKapat
BaglantiKapat
Aktivite Türü: IfElseActivity
ifElseActivityKisileriKontrolEt
ifElseActivityBaglantiAcikMi
ifElseActivityKisiKaydedildiMi
Aktivite Türü: IfElseBranchActivity
ifElseBranchActivityKisilerNull
Condition
Declarative Rule Condition
ConditionName
Condition1
Expression
this.KisiList == null
Bağlı Olduğu IfElse Aktivitesi
None
Condition2
this.cnn.State == System.Data.ConnectionState.Open
ifElseBranchActivityKapali
Condition3
this.kisiKaydedildiMi == True
ifElseBranchActivityHayir
Aktivite Türü: TerminateActivity
Not: HAİ(Hangi Aktivitenin İçerisinde)
terminateActivity1
Error
Activity=Workflow1, Path=BaglantiYokHata
Workflow1
Path
BaglantiYokHata
HAİ
terminateActivity2
Activity=Workflow1, Path=KisiYokHata
KisiYokHata
terminateActivity3
Activity=Workflow1, Path=KisiKayitHata
KisiKayitHata
Aktivite Türü: ReplicatorActivity
replicatorActivity1
Execution Type
Sequence
InitialChildData
Activity=Workflow1, Path=KisiList
KisiList
Aktivite Türü: SequenceActivity
Bu aşamada aşağıdaki ekran görüntüsüne bakarak iş akışı diyagramınızı oluşturun. Buradaki aktivitelerin hepsini yukarıdaki bölümde açıkladım. Bu diyagramı oluşturduktan sonra Code aktiviteleri için tanımladığımız metotları kodlayacağız.
Code Aktivitelerinin Metotları:
Uygulamamızı Test Edelim:
Program.cs Dosyasına Aşağıdaki Kodları yazın.
Ctrl+F5 tuşuna bastığınızda aşağıdaki çıktıyı alacaksınız.
Bu yazıda sizlere kapsam olarak geniş bir uygulama yapmaya çalıştım. Bundan dolayı bazı noktalarda takılabilirsiniz fakat geçmiş yazılarıma göz gezdirdiyseniz ve SqlTransaction sınıfını kullanmayı biliyorsanız takılmayacaksınızdır. Şu ana kadar karşınıza çıkmış en elle tutulur WWF uygulaması olduğu düşünüyorum.
Kolay gelsin J