|
Workflow Foundation - Temel İşlemler |
|
Gönderiliyor lütfen bekleyin... |
|
|
Windows Workflow Foundation teknolojisi çalışmalarımıza tanımlama, çalıştırma ve
kontrol gibi özellikler getiren bir alt yapı, Windows temelinde yer alan dağıtılmış
iş koordinasyonu sistemine benzer bir yapıya sahip olan bir teknolojidir.
Aralarındaki fark ise; her program dağıtılımış iş koordinasyonunu kullanmayabilir, fakat her programda bir iş akış yapısı olmalıdır - neredeyse tüm programlarda.
İş akışlarına değinmek gerekirse genelde adım adım ilerlenen bir yapıya sahip. Her adımın içerisinde kendi kuralları ve açıklamaları vardır. Bunu şöyle düşünelim bir lokantaya gittiniz ve sipariş verdiniz, garsonun gelmesi ve size olan tavrı o adımın bir koşuludur. Aynı şekilde siparişin aşçıya iletilmesi ve hazırlanması da kendi içerisinde koşullar ve tanımlamalar gerektirir. Bu bir iş akışını basit şekilde kafanızda canlandırmışsa sistemin kendi projelerimizde, görsel temalarla birleşerek oluşturulduğunu, hangi adımda ne gibi hatalarla karışlaştığınızı, hangi sorunları nerede nasıl çözebileceğinizi gösteren bir sistem istiyorsanız işte bu konumuz olan Windows Workflow Foundation’dır.
Bu makaleler dizisinde açıklayıcı anlatım yerine, örnek temelli anlatıma değinmeyi planlıyorum. Basit örneklerden yola çıkarak projelerimizi daha karmaşık hale getireceğiz ve bu sırada WF’nin getirmiş olduğu yeniliklere sıkça değineceğiz. Makale içerisinde “Workflow” kelimesini “iş akışı” olarak gündeme getireceğim ki anlatım daha basit olsun.
Projelerimiz içerisinde genel olarak C# kodu ile programlarımızı yazacağız. Fakat dosyaların temel yapısında yine .net 3.0 ile birlikte gelen XAML(Genişletilebilir Uygulama İşaretleme Dili) yapısını kullanacağız.
Bu yapı temelinde XML (Genişletilebilir İşaretleme Dili) yapısının daha da
gelişmiş bir versiyonu.
Bilgisayarımızda
Olması Gerekenler:
- Windows Vista ya da XP SP2 kurulu bir PC
- Visual Studio 2005 (C# ve SQL Express içermeli) ya da Visual Studio 2008
Beta 2
- Windows Workflow Foundation SDK
Malzemelerin bir kaçını buradan bulabilirsiniz. VS 2005 için Eklenti paketleri
ve Vista SDK bulunmakta
http://msdn2.microsoft.com/en-us/netframework/bb264589.aspx İlerleyen
örneklerde örneklere özel malzemeleri size bildireceğim. Örneklerimizde bazı
konularda ek dosyalar bulunmakta bunu makalemiz içerisinde yüklenebilir halde
bulabilirsiniz.
Bu örnekte bulacaklarımız:
- “Merhaba Dünya!” Programına giriş yapacağız
- Parametreler ile Workflow (iş akışımız)’umuza veri çağıracağız.
Amaçlarımız:
- VS2005 ile sıralı iş akışlarına WF ile değinmiş olmak,
- VS2005 hata ayıklama ile iş akışlarımızı incelemek,
- İş akışımıza veri çağırmak,
- Aktif bir iş akışına bir olay çağırmak,
Alıştırma 1 – “Merhaba Dünya!” iş akışı
yaratalım :
Daha önce anlatılmış bir konu olabilir. Fakat diğer konuları bu örnek üzerinden
geliştirip inceleyeceğimiz için bu kısmı hızlı ve fazla ayrıntıya girmeden
değineceğim. Bu projemizde basit olarka bir uyarı mesajı verip Windows
Formlarını projemizde nasıl kullanacağımıza da değinmiş olacağız.
Yeni bir proje açalım:
- Visual Studio 2005 ya da elimizde varsa Visual Studio 2008 Beta 2’yi açalım
- File > New > Project yolunu izleyerek yeni proje yaratma ekranına
gelelim ve oradan Visual C# > Workflow yolunu izleyelim.
- Önümüze gelen ekrandan Sequential Workflow Console Application seçelim
ve projemize “MerhabaDunyaAkisi” adını verip Masaüstümüze projemizi
yaratalım.
- Projemizi yarattıktan sonra Workflow1.cs dosyasını göreceğiz. Bu dosya
şimdilik bir işimize yaramayacağından dosyamızı silelim.
- Solution Explorer kısmından projemize ("MerhabaDunyaAkisi") sağ
tıklayarak, Add > New Item yolunu izleyelim ve projemize Sequential
Workflow (with code separation) dosyasını ekleyelim. İsmi Workflow1.xoml
olan bir dosya projemize eklendi.
- Bu dosya Workflow1.xoml ve Workflow1.xoml.cs adı altında iki
dosya bulundurmakta bunlardan ilki XML yapıyı taşımakta, ikincisi ise C# kod
tabanını barındırmaktadır.
Kod aktivitesi yaratalım:
- Solution Exlorer dan yarattığımız Workflow1.xoml dosyasına çift
tıklayarak dizayn kısmında açalım.
- Toolbox (araçkutusu) paneline giriş yapıp oradan kullanabileceğimiz
aktivitelere bir göz atalım. Ve oradan Code(Kod) aktivitesini tutup
projemizin Drop Here(Buraya sürükleyin) kısmına atalım.
- Code aktivitesinin hemen üstündeki uyarıya tıkladığımızda bize o uyarının
sebebiniz verecektir oradan uyarımıza – ExecuteCode - tıklarsak
Property(özellikler) ekranı açılacaktır.
- ExecuteCode kısmına codeActivity1_CodeHandler yazıp Enter tuşuna
basıyoruz ve hemen Code aktivitesinin handler(işleyici) sini açmış
oluyoruz. Direk kod tabanlı açılan yapıda fonksiyonumuzun içine aşağıdaki komutu
yazalım. Farkettiğiniz üzere bu fonksiyon kod tabanlı yapıda yapılan
aktiviteleri yakalayıp fonksiyonumuzu çalıştırıyor.
Console.WriteLine("Merhaba Dünya!"); |
- Ctrl + Shift+ B ya da Build > Build Solution seçeneği ile
projemizi derleyelim.
Yeni iş akışımızı hata ayıklama sistemi ile
çalıştıralım:
- Ekranımızın üst kısmından Workflow1.xoml sayfasına geçip Code
aktivitesine sağ tıklayıp Breakpoint > Insert Breakpoint diyelim ve
aktivitemizin yanında kırmızı bir daire görelim.
- F5 Tuşuna basıp projemizi çalıştıralım.
- İş akışı ara yüzünde ConsoleTestHost çalışacak ve Code aktivitesinin
sarı bir kutucukta bulunduğunu göreceğiz. Bu bizim programımızın derleyicisinin
Code aktivitesinde durduğunu gösteriyor.
- F11 ya da Debug > Step Into seçeneği ile Handler
fonksiyonumuzu çalıştıralım.
- Gördüğümüz gibi fonksiyonumuza giriş yapıyor yine F11’e basarak bir adım daha
ilerleyelim ve göreceğimiz gibi programımız “Merhaba Dünya!” yazıp iş akışını
bitirecektir.
Alıştırma 2 - Parametreler ile Workflowumuza
veri çağırmak
Bu alıştırmamızda “MerhabaDunyaAkisi” dosyamızı kullanıp veri
göndereceğiz fakat bunu yaparken Windows Forms kullanıp verilerimizi
Windows Forms dosyalarından çekeceğiz. Aslında yaptıklarımız çok zor olmayacak
fakat veri alışverişlerini algılamamızı sağlayacağına inanıyorum. Workflow
sisteminde iki temel veri akışı mantığı var bunlardan biri Parameters(parametreler)
ve Events(olaylar) yöntemleri bu alıştırmada parametre kavramından
değineceğiz ilerde geleceğimiz olaylar yöntemi ile veri aktarımına şimdilik bu
alıştırmada değinmiyoruz.
İş akışımıza parametrelerimizi tanıtalım
- Şimdi önceden yapmış olduğumuz - ya da ekte sunmuş olduğum “MerhabaDunyaAkisi”
buradan indirip – projesini
açalım ve oradan Workflow1.xoml.cs dosyasına girelim.
- Workflow1 sınıfımız içerisine yeni bir property ekleyelim bunun için pro yazıp Tab duşuna ardı ardına iki defa basalım. (bknz: snippet
kullanımı) Projemize “ad” ve “soyad” adı altında iki tane string özelliği
ekleyelim.
private string ad;
public string Ad
{
get { return ad; }
set { ad = value; }
}
private string soyad;
public string Soyad
{
get { return soyad; }
set { soyad = value; }
} |
Code aktivitesini düzenleyelim
- Projemiz içerisinde Windows Formlarından yararlanacağımız için Forms
referansını eklememiz gerek. Bunun için Solution Explorer’ımızda projemizin
ismine sağ tıklayarak Add Referance sekmesine tıklayalım.
- Buradan .net kısmından System.Windows.Forms referansını projemize
ekleyelim. (v.2.0)
- Şimdi kod ekranımıza tekrardan gelip codeActivity1_CodeHandler
fonksiyonumuza şu kodu yazalım.
private void codeActivity1_CodeHandler(object sender, EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Merhaba: " + ad + " " + soyad);
} |
Yarattığımız iş akışını çalıştıralım
- Projemize yarattığımız iş akışını test etmek amacı ile basit bir Windows Forms
uygulaması ekleyelim bunun için File > Add > New Project yolunu izleyerek
Visual C# seklemsinden WinFormTestHost adında bir Windows
Application ekleyelim. ( VS 2008 Orcas Beta 2 kullanan arkadaşlar için projemizi
ilk yaratırken 3.5 Framework kullandık fakat bazı hatalar var sanırım sisteminde
Windows Application açarken 3.0 Framework seçersek hatasız sistemi
çalıştırabiliriz.)
- Projemizi ekledikten sonra proje içersindeki Program.cs ve Form1.cs
dosyalarını silelim. Solution Explorer içerisinden Windows programımıza sağ
tıklayarak Add > Existing Item yolunu izleyelim ve çıkan ekrandan bu
linkte vermiş
olduğum WinFormTestHost projesindeki Program.cs ,
Form1.designer.cs, Form1.resx, Form2.cs dosyalarını
yükleyelim. Bunu yapıyoruz çünkü o dosyalarda konumuzun dışında birkaç nokta
bulunmakta bunlara girerek konunun bütünlüğünden sapmak istemiyorum.
- Bu dosyalar dan Form1.cs içerisine bakarsak
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Workflow.ComponentModel;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
namespace WinFormTestHost
{
public partial class Form1 : Form
{
// yeni bir iş akışı çalışması ekliyoruz
private WorkflowRuntime wr;
private string workflowAssembly = "";
private string workflowTypeName = "";
public Form1()
{
InitializeComponent();
// yarattığımız iş akışını tanıtıyoruz
workflowAssembly = "MerhabaDunyaAkisi";
workflowTypeName = "MerhabaDunyaAkisi.Workflow1";
}
private void btnAkisBaslat_Click(object sender, EventArgs e)
{
//iş akışı tanımlayıcısının çalışıp çalışmadığına bakıyoruz
if (wr == null)
{
wr = new WorkflowRuntime();
wr.StartRuntime();
}
//yeni bir sözlük elementi ile parametreleri ayıklıyoruz
Dictionary parameters = new Dictionary();
parameters.Add("Ad", txtAd.Text);
parameters.Add("Soyad", txtSoyad.Text);
//iş akışı tanımlayıcısına iş akışımızı başlatıyoruz
WorkflowInstance instance = wr.CreateWorkflow(typeof(MerhabaDunyaAkisi.Workflow1, parameters);
instance.Start();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//projemiz kapanırken iş akışı tanımlayıcımızı da sonlandırıyoruz.
if (wr != null)
{
if (wr.IsStarted)
{
wr.StopRuntime();
}
}
}
}
} |
- Projemizin çalışması için dosyaları ekledikten sonra yine Solution Explorer
üzerinden Windows programımıza sağ tıklayıp Add Referance kısmına
tıklıyoruz. Gelen pencereden Projects sekmesine tıklarsak
MerhabaDunyaAkisi projemizi programımıza tanıtabiliriz.
- Bu işlemden sonra Workflow mantığını da projemize aktarmamız gerek bunu yapmak
için yine bir üstteki maddenin yolu işe referans ekleme sayfasına gelip .NET
sekmesinde System.Workflow.Activities, System.Workflow.ComponentModel,
System.Workflow.Runtime referanslarını da programımıza tanıtıyoruz.
- Son olarak da Windows programımıza sağ tıklayıp Set as Startup Project
sekmesine tıklarsak başlangıçta Windows projemiz çalışır.
- F5’e basıp projemizi çalıştıralım. Verilerimizi girelim. Ve başarı ile
verilerimizi aldığımız görelim.
Mantık olarak programımızın yaptığı olay butona basıldığında iş akışını
yaratıyor, onu yakalayıp parametreleri buluyor, bu parametreleri bizim
projemizdeki parametrelere eşitliyor – textboxlar. İş akışının fonksiyonu
çalıştığında bizim projemiz içerisinden verilerimizi alıp ekrana gösteriyor.
Bu makalede bir Workflow (iş akışı) projesinden parametreler yardımı ile nasıl
veri alınır nasıl veri aktarılır ve basit manada İş Akışı Projeleri nasıl
yapılır bunlara değindik. Tamamlanmış halini
buradan indirebilirsiniz.
İyi Çalışmalar
Ali Hıdımoğlu
E-mail: [email protected]
Makale:
Workflow Foundation - Temel İşlemler .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
|
|