|
Workflow Foundation - Temel İşlemler - 2 |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bir önceki makalemizi umarım okumuş ve uygulamıştırsınız.
Okumayanlar için
Workflow Foundation - Temel İşlemler adresinden bir önceki
makalemizi inceleyebilirsiniz. Bu sefer iş akışları içerisinde
If/Else aktivitelerine, dönüşümlü koşullamalara ve
özel aktivitelere değineceğiz. Makalemiz içerisinde her zaman
ki gibi Workflow kelimesine İş Akışı diyeceği. XAML’ın
(Genişletilebilir Uygulama İşaretleme Dili) temeline sahip XOML yapısı
ile nesnelerimizi oluşturup C# dili ile kodlarımızı yazacağız.
Bu sefer konumuz Gider Raporlaması (Expense Reporting) programı olacak.
Programımız girilen değerler arasında gider harcamasının,
belirtilen bir rakamın – ki biz $1000 olarak gireceğiz – altında
ise otomatik olarak izin verecek. Eğer belirttiğimiz gider miktarının
üzerinde bir miktar girilirse onu otomatik olarak izinsiz kılacaktır.
Bu örnek içerisinde; iş akışlarında izinler, özel
tanımlanmış Gider Raporlaması tanımlamaları, Workflow
Host (iş akışı sahipliği) ve tanımlanmış
akışlar için basit bir Windows uygulamasına değineceğiz.
Proje içerisinde kullanacağımız Gider Raporlaması aktivitelerinin
önceden tanımlanmış olduğunu ve projemiz içerisinde
yaratmayacağımızı hatırlatmak istiyorum. Projemize başlamadan
önce buradan referans
dosyalarını indiriniz. Proje bitiminde belirtmiş olduğum kaynak
dosyaların içerisinde olan, “Kaynak”
klasöründe bu aktivitelerin dosyalarına erişebilirsiniz. Projemize
adım adım başlayalım isterseniz.
Yeni iş akışı
projesi yaratalım
- Visual Studio 2008 ya da Visual Studio 2005’imizi açalım
ve File > New > Project yolunu izleyerek yeni proje diyalog ekranını
çıkartalım.
- Sol tarafta bulunan ağaç menüden C# > Workflow
kısmına gelip “ExpenseWorkflows” adına sahip bir
Empty Workflow Project (boş iş akışı
projesi) yaratalım.
Not: İş akışımızın ismi
“ExpenseWorkflows” olmalıdır! Çünkü, proje içerisinde
dışarıdan çağıracağımız önceden
hazırlanmış kaynaklarımız bu isimdeki bir projeye göre
ayarlanmış bulunmakta. Başka bir proje ismi girerseniz programımız
düzgün çalışmaya bilir. Unutmayalım bu makaledeki
anlatılanlar konu başında da belirttiğimiz gibi sadece işleyiş
mantığını kavramamamız içindir. Kendi özgün
projelerinizde bu tip bir zorunluluk gerekmemektedir.
- Yarattığımız projemize Solution Explorer ile sağ
tıklayalım ve Add > Sequential Workflow (with code seperation)
şemasını seçip Workflow1.xoml adlı
bir dosya ekleyelim.
- Projemize iki yeni dosya eklendi. Bunlardan Bunlardan Workflow1.xoml
adındaki dosyamızın XML formatındaki objeleri içeren
hali, Workflow1.xoml.cs adındaki diğer dosyamız ise C# kod
yapısını içeren dosyamızdır.
Gider Raporlaması ara yüzünü
projemize ekleyelim
- Projemiz içerisinde HandleExternalEvent (harici izleyici
olayı) ve CallExternalMethod (harici çağırma metodu)
aktivitelerini gider raporlaması arayüzünde kullanacağız.
Bunun için bu aktiviteleri dışarıdan referans alarak projemize
eklememiz gerekmektedir. Bunun için Solution Explorer içerisinde
projemizin ismine sağ tıklayarak, Add Referance
menüsünü seçelim ve bize referans ekleme paneli açılsın.
- Referans ekleme paneli içerisinden Browse tab seçeneğine
tıklayarak dışarıdan referans ekleme paneline girelim ve önceden
indirmiş olduğumuz kaynak dosyası içerisinden Kaynak\ExpenseReporting\bin
klasörleri altından ExpenseLocalServices.dll
kaynak dosyasını projemize ekleyelim.
Gider Raporlaması ara yüzünü projemize ekleyelim
- Projemiz içerisinde HandleExternalEvent (harici izleyici
olayı) ve CallExternalMethod (harici çağırma metodu)
aktivitelerini gider raporlaması arayüzünde kullanacağız.
Bunun için bu aktiviteleri dışarıdan referans alarak projemize
eklememiz gerekmektedir. Bunun için Solution Explorer içerisinde
projemizin ismine sağ tıklayarak, Add Referance
menüsünü seçelim ve bize referans ekleme paneli açılsın.
- Referans ekleme paneli içerisinden Browse tab seçeneğine
tıklayarak dışarıdan referans ekleme paneline girelim ve önceden
indirmiş olduğumuz kaynak dosyası içerisinden Kaynak\ExpenseReporting\bin
klasörleri altından ExpenseLocalServices.dll
kaynak dosyasını projemize ekleyelim.
ExpenseReportSubmitted (Gider Raporu
Eklendi) aktivitesini ekleyelimi ekleyelim
- Kod yapımız içinde iki ana veriye ihtiyaç duyacağız
bunlardan biri raporlama dokümanı olacak (reportArgs) ve ReportSubmitted
(rapor eklendi) olayının verilerini içerecek. İkinci verimiz
ise gider değerini veren bir veri olacak (amount). Bunları aşağıdaki
kodları Solution Explorer ile Workflow1.xoml.cs
dosyasını açıp, içine kopyalayabiliriz.
public partial
class Workflow1 : SequentialWorkflowActivity
{
public ExpenseLocalServices.ExpenseReportSubmittedEventArgs reportArgs = default(ExpenseLocalServices.ExpenseReportSubmittedEventArgs);
public
int amount = default(System.Int32);
}
|
- Workflow1.xoml dosyasına tıklayarak tasarım ekranını
açalım.
- Toolbox (Araç kutusu) ekranını açarak
oradan HandleExternalEvent aktivitesini seçip
iş aşkımızın dizayn görünümüne sürükleyelim.
- Ardından Properties (özellikler) ekranına -
F4'e basarak - girerek bu aktivitemizin ismini expenseReportSubmitted1
- Aktivitemizin hemen sağ üst köşesinde olan ünlem uyarısına
tıklayalım ve Property ‘InterfaceType’ is not
set (arayüz tipi özelliği ayarlanmamış) uyarısına
tıklayalım.
- Karşımıza özellikler penceresinden
InterfaceType seçili olarak gelecek oradan […]
kısmına tıklayarak .NET Tip penceresini görelim. Oradan referanslarımız
arasından (ağaç menü) ExpenseLocalServices.IExpenseService
seçeneğini seçelim – ya da Type(tip) kısmına
seçeneğin ismini yapıştıralım.
- Aktivitemizin özellikler ekranındayken EventName(olay
ismi) özelliği kısmından ExpenseReportSubmitted
(gider raporu eklendi) seçeneğini seçelim.
- Aynı şekilde özellikler ekranından çıkmadan
“e” seçeneğinin […] ekleme kısmına
gelirsek hangi verinin ekleneceğini ayarlayabiliriz. O kısıma tıkladığımızda
karşımıza çıkan pencereden reportArgs değişkenimizi
seçip ok'e basalım.
- Sonuç olarak bize “e” değeri için
Workflow1 aktivitesinden reportArgs değişkeni için atama yapıldığını
gösterecektir.
- Özellikler ekranında son olarak yapacağımız değişiklik
ise Involked kısmında ReportSubmitted_Invoked
değerini girip Enter'a basmak olacaktır. Sonrasında karşımıza
bir kod tanımlı fonksiyon çıkmış olacak.
- ReportSubmitted_Invoked fonksiyonu içerisfonksiyonu
içerisine şu kodları yapıştıralım:
ConsoleF;">Console.WriteLine("ReportSubmitted_Invoked");
// reportArtgs verisinden miktarı alalım
amount =
this.reportArgs.Report.Amount;
|
Önceden hazırlanmış
otomatik onaylama aktivitesini ekleyelim.
Sistemimiz içerisinde önceden tanımlanmış bir aktivite
ekleyeceğiz bu aktivite bize gelen miktarın değerine göre onaylanıp
onaylanmayacağını gösterecek. Bunun için bu önceden
tanımlanmış aktiviteyi Toolbox(araç kutusu) kısmına
eklemiz gerekiyor.
- Workflow1.xoml dosyası açıkken Toolbox içerisinde
boş bir yere sağ tıklayıp Choose Items (itemleri seç)
seçeneğine tıklıyoruz. Gelen ekran üzerinden Browse
butonuna tıklayıp önceden indirmiş olduğumuz kaynak dosyalarımız
içerisinden şu klasörler altındaki dosyayı seçelim;
Kaynak\ExpenseReporting\bin içerisinden ExpenseActivities.dll
dosyası.
- Toolbox içerisine iki yeni aktivitemiz geldi bunlar;
AutoApprove(otomatik onayla) ve GetManager(yetkili
getir) aktiviteleri. Bunlardan AutoApprove aktivitesini önceki
sürüklediğimiz aktivitemizin hemen altına sürükleyelim.
- tenin özellikler kısmına gelelim ve Amount(miktar) özelliği
kısmında bulunan […] ikonuna tıklayarak veri yüklenmesi
için açılan ekranı getirtelim. Ekran üzerinden Workflow1
altındaki amount verimizi seçip OK butonuna basalım.
İş akışımıza
bir kural koşulu ekleyelim. ekleyelim.
Kural koşulları bir diyalog sırasında verileri alır ve
iş akışımızda XML formatında saklar. If/Else, While
gibi durumlarda kural koşullarını yaygın biçimde kullanacağız.
- Workflow1.xoml dosyasını dizayn görünümünde
açalım. Toolbox panelimizden bir IfElse aktivitesi alalım
ve onu hemen autoApprove aktivitemizden sonraya sürükleyelim.
- ifElse aktivitesi seçiliyken onun F4’e basarak
özellikler paneline girelim ve oradan (name) – isim – özelliğini
EvaluateExpenseReport (gider raporu değerlendirmesi)
olarak değiştirelim.
- ifElse aktivitemizin sol tarafındaki
ifElseBranchActivity1 kısmını seçip yine
F4’e basalım ve özellikler ekranına gelelim bunun ismini
ise IfAutoApproveReport olarak değiştirdikten
sonra Condition (koşul) kısmındaki menüden
Declaritive Rule Condition (tanımlamalı kural koşulu)
seçeneğini seçelim. Sonrasında yanında çıkan
[+]’ya tıklayarak koşul özelliklerine girelim. Condition
Name (koşul ismi) özelliğine AutoApproveCondition
(otomatik izin verme koşulu) ismini verip Expression (tanımlama)
kısmındaki […] ikonuna tıklayalım. Çıkan
pencereye this.autoApprove1.Approved yazalım.
- Bu yaptığımız işlem bizim gider değerimizin
ifElse aktivitesinden geçerken izin verilen miktarda olup olmadığını
test etmemizi sağlar. Eğer verilen miktar izin verilen miktara eşitse
izin verilir.
- Şimdi ifElse aktivitesi içerisindeki
ifElseBranchActivity2 kısmına tıklayıp
özellikler paneline girelim ve oradan ismini ElseRejected
olarak değiştirelim. Fark ettiğiniz üzere eğer izin verilen koşulda değilse gider
değeri kabul edilmeyecek ve sistem bize onaylanmadı mesajı verecektir.
Gider miktarının kabul
edilme ya da kabul edilmeme durumu
- CallExternalMethod aktivitesini seçip
ifElse aktivitemizdeki IfAutoApproveReport
kısmına sürükleyelim sonrasında yeni aktivitemizin ismini
approveExpenseReport1 olarak değiştirelim.
- Sonrasında daha önceden yaptığımız gibi
InterfaceType özelliğinin […] kısmına
tıklayarak gelen pencereden ExpenseLocalService.IExpenseService
seçeneğini seçelim.
- MethodName özelliğine gelelim ve oradan
ApproveExpenseReport (gider raporunu onayla) seçeneğini
seçelim. Seçimi yaptıktan sonra özellikler kısmına
report adında bir özellik gelecektir. Onun da […] kısmına
tıklarsak gelen pencereden değişkenimiz olan reportArgs ın
altındaki Report özelliğini seçebiliriz.
- Bir tane daha CallExternalMethod seçelim
ve onu da ElseRejected kısmına yerleştirelim.
Onun özelliklerini yukarda belirttiğimiz gibi şu verilerle değiştirelim.
İsmini rejectExpenseReport1 yapalım.
InterfaceType özelliğini ExpenseLocalService.IExpenseService
seçelim. MethodName
özelliği RejectExpenseReport (gider
raporunu onaylama) seçelim ve onun report özelliği kısmına
bir üstteki madde gibi reportArgs değişkenimizin Report
özelliğini seçelim.
Projemizi çalıştırmak
için gerekli olan tanımlayıcı programları ayarlayalım
- Şimdi önceden indirmiş olduğumuz kaynak dosyasını
açalım ve şu klasöre girelim Kaynak\ExpenseReporting\bin
altında ExpenseHost.exe ve ExpenseHost.exe.config
dosyalarını bulalım kopyalayalım. Projemizin klasörlerine
gidelim ve bin\Debug klasörü altına yapıştıralım. Bu dosya
bizim iş akışımızı çalıştırmamızda
yardımcı olacak arayüz programıdır.
- Şimdi Visual Studio yu açıp Solution Explorer
ile projemizin ismine sağ tıklayalım Properties menüsüne
girelim.
- Bu ekran bizim projemizin ayarlarını yaptığımız
bir arayüz. Burası içerisinde Debug sekmesine girelim ve
oradan Start external program butonuna tıklayalım […] kısmından
bizim az önce kopyalamış olduğumuz ExpenseHost.exe
programını seçelim.
- Ctrl + S ile kaydedelim ve o ekrandan çıkalım.
- Dizayn ekranından Workflow1.xoml dosyamıza gelelim ve
oradan expenseReportSubmitted1 aktivitemize sağ
tıklayıp Breakpoint > Insert Breakpoint yolu ile bir breakpoint
ekleyelim. Bu projemiz çalışırken o noktaya geldiğimizde
projemizi durduracak ve bizden onay alınca devam ettirecektir.
Projemizi test edelim
- F5’e basarak projemizi çalıştıralım.
- Bizim Host programımız hemen çalışacaktır
ve Windows bu programı engelleyip engellemeyeceğiniz soracaktır.
“Engellemeyi kaldır” seçeneğine tıklayarak
engellemesini istemediğimizi belirterek devam edelim.
- Şu an projemiz çalışır durumda beklemektedir. Biz bir gider verisi ekleyince
o arka planda çalıştıracak ve kontrol edecektir.
- Şimdi kaynak dosyamıza gidip Kaynak\ExpenseReporting\bin altından
ExpenseApplication.exe programını çalıştıralım.
- Submit Report butonuna basıp verilerimizi girdiğimizde
bizim breakpointimiz devreye girecek ve bizden devam bekleyecektir F11 tuşuna
basarak devam diyelim.
- ReportSubmitted_Invoked fonksiyonuna giriş yaptık
şimdi F11 diyerek devam edelim.
- rejectExpenseReport1 aktivitemize gelene kadar
F11 demeye devam edelim. gördüğünüz gibi değerimiz büyük olduğundan kabul etmedi.
- Devam edelim ve F5’e basıp iş akışımızın
breakpoint döngüsünü bitirip kendi çalışmasına
geri dönmesini sağlayalım. Sonradan ExpenseApplication.exe
programımıza yeniden gelelim ve Reflesh Reports butonuna basalım.
Göreceğiniz gibi Status (durum) kısmında Rejected
(onaylanmadı) yazdı. Yani girdiğimiz değer $1000 miktarından
yüksek olduğu için gider raporumuzu onaylamadı.
- Şimdi $500 değeri girelim ve F5’e basalım. ExpenseApplication.exe
programımıza gelelim ve oradan Reflesh Reports butonuna bastığımızda
durum kısmında göreceğimiz gibi Approved yazmaktadır.
Yani gider raporumuz onaylanmıştır.
- Son olarak Visual Studio içinden Debug > Stop Debugging
yolu ile projemizin çalışmasını bitirelim.
Evet arkadaşlar bu makalemiz biraz ayrıntısal oldu biliyorum fakat
canlı bir örnek üzerinde daha iyi anlaşılacağını
düşündüğümden bu tip bir yol seçtim. Bir sonraki
makalemizde aynı örneğimizi daha farklı boyutlara geçireceğiz.
Makale içerisinde verilen ve dışarıda yüklenen her kontrolün
kaynak dosyası önceden belirtilmiş olunan Kayak dosyası içinde
bulunmaktadır. Projenin son halini indirmek için lütfen çin lütfen
tıklayınız.
İyi çalışmalar
Ali Hıdımoğlu
[email protected]
Kaynak: http://wf.netfx3.com/
Makale:
Workflow Foundation - Temel İşlemler - 2 .NET 3.0 ve .NET 3.5 Özel Bölümü Ali Hıdımoğlu
|
|
|
-
-
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
|
|