Makale Özeti

Ş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.

Makale

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-

Özellik

Değer

Name

codeActivityBaglantiAc

ExecuteCode

BaglantiAc

Hangi Aktivitenin İçerisinde

ifElseBranchActivityKisilerNullDegil

 

 

3-

Özellik

Değer

Name

codeActivityTransactionBaslat

ExecuteCode

TransactionBaslat

Hangi Aktivitenin İçerisinde

ifElseBranchActivityAcik

 

 

4-

Özellik

Değer

Name

codeActivityKisiKaydet

ExecuteCode

KisiKaydet

Hangi Aktivitenin İçerisinde

sequenceActivity1

 

 

5-

Özellik

Değer

Name

codeActivityKisiBIlgisiGoster

ExecuteCode

codeActivityKisiBılgisiGoster

Hangi Aktivitenin İçerisinde

ifElseBranchActivityEvet

 

 

6-

Özellik

Değer

Name

codeActivityTransactioniOnayla

ExecuteCode

TransactioniOnayla

Hangi Aktivitenin İçerisinde

ifElseBranchActivityAcik

 

 

7-

Özellik

Değer

Name

codeActivityBaglantiKapat

ExecuteCode

BaglantiKapat

Hangi Aktivitenin İçerisinde

ifElseBranchActivityAcik

 

 

 

Aktivite Türü: IfElseActivity

 

1-

Özellik

Değer

Name

ifElseActivityKisileriKontrolEt

Hangi Aktivitenin İçerisinde

En Dışta. Hiçbir aktivitenin içinde değil.

 

 

2-

Özellik

Değer

Name

ifElseActivityBaglantiAcikMi

Hangi Aktivitenin İçerisinde

ifElseBranchActivityKisilerNullDegil

 

 

3-

Özellik

Değer

Name

ifElseActivityKisiKaydedildiMi

Hangi Aktivitenin İçerisinde

sequenceActivity1

 

 

 

Aktivite Türü: IfElseBranchActivity

 

1-

Özellik

Değer

Name

ifElseBranchActivityKisilerNull

Condition

Declarative Rule Condition

ConditionName

Condition1

Expression

this.KisiList == null

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityKisileriKontrolEt

 

 

2-

Özellik

Değer

Name

ifElseBranchActivityKisilerNullDegil

Condition

None

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityKisileriKontrolEt

 

 

3-

Özellik

Değer

Name

ifElseBranchActivityAcik

Condition

Declarative Rule Condition

ConditionName

Condition2

Expression

this.cnn.State == System.Data.ConnectionState.Open

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityBaglantiAcikMi

 

 

4-

Özellik

Değer

Name

ifElseBranchActivityKapali

Condition

None

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityBaglantiAcikMi

 

 

5-

Özellik

Değer

Name

ifElseBranchActivityEvet

Condition

Declarative Rule Condition

ConditionName

Condition3

Expression

this.kisiKaydedildiMi == True

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityKisiKaydedildiMi

 

 

6-

Özellik

Değer

Name

ifElseBranchActivityHayir

Condition

None

Bağlı Olduğu IfElse Aktivitesi

ifElseActivityKisiKaydedildiMi

 

 

 

Aktivite Türü: TerminateActivity

 

Not: HAİ(Hangi Aktivitenin İçerisinde)

 

1-

Özellik

Değer

Name

terminateActivity1

Error

Activity=Workflow1, Path=BaglantiYokHata

Name

Workflow1

Path

BaglantiYokHata

HAİ

ifElseBranchActivityKapali

 

 

2-

Özellik

Değer

Name

terminateActivity2

Error

Activity=Workflow1, Path=KisiYokHata

Name

Workflow1

Path

KisiYokHata

HAİ

ifElseBranchActivityKisilerNull

 

 

3-

Özellik

Değer

Name

terminateActivity3

Error

Activity=Workflow1, Path=KisiKayitHata

Name

Workflow1

Path

KisiKayitHata

HAİ

ifElseBranchActivityHayir

 

 

 

Aktivite Türü: ReplicatorActivity

 

Not: HAİ(Hangi Aktivitenin İçerisinde)

 

1-

Özellik

Değer

Name

replicatorActivity1

Execution Type

Sequence

InitialChildData

Activity=Workflow1, Path=KisiList

Name

Workflow1

Path

KisiList

HAİ

ifElseBranchActivityAcik

 

 

 

Aktivite Türü: SequenceActivity

 

Not: HAİ(Hangi Aktivitenin İçerisinde)

 

1-

Özellik

Değer

Name

sequenceActivity1

HAİ

replicatorActivity1

 

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