Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ali Hıdımoğlu
Ali Hıdımoğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
7 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: aktivitemizin bunlardan butonuna ekleme gelelim girelim ismini kaynak oradan projemiz projemize projemizin referans verilen workflow .NET 3.x Ali Hıdımoğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : .NET 3.x
Yayınlanma Tarihi : 6.11.2007
Okunma Sayısı : 22707
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 3.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 3.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 3.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 3.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Workflow Foundation - Temel İşlemler - 2
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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