Windows Workflow Foundation ' a Giriş

 

1. Giriş:
WWF, Microsoft’un .Net Framework 3.0 ve 3.5 ile kullanıma sunduğu işakışı uyumlu yazılımlar yapabilmeyi sağlayan yazılım altyapısıdır. .Net Framwork içerisinde bir namespace, bir işakışı motoru ve Visual Studio üzerinde tasarımı kolaylaştırmaya yönelik araçları içerir. Sunucu ve istemci taraflı kullanılabilir. WWF sistemleri ve insanları ilgilendiren işakışları ile ilgili farklı senaryoları destekleyecek bir yapıya sahiptir. WWF temel olarak 4 bölümden oluşur:

i. Etkinlik Modeli (Activity Model):
Aktiviteleri bir işin temel yapıtaşı olarak düşünebiliriz.

 

ii. İşakışı Tasarım Aracı :

Visual Studio içerisinde görsel olarak işakışlarının tasarlanabileceği bir araç bulunmaktadır. Bu araç sayesinde aktiviteler ve bunlar arasındaki ilişkiler görsel olarak tasarlanablmektedir. Bu aracı bir başka windows uygulaması içerisinden de kullanmak mümkündür. Bu konu ile ilgili detaylı bilgiye buradan ulaşabilirsiniz.

 

iii. İşakışı Çalışma Zamanı Motoru (Workflow Runtime):
Tanımlanmış işakışlarını çalıştıran bir çekirdek motor olarak düşünülebilir.
iv. Kural Motoru (Rules Engine) :
Kurala dayalı işakışlarının çalıştırılmasına olanak sağlayan bir motordur. Detaylı bilgiye
buradan ulaşabilirsiniz.



2. Hello World


Bir klasik olarak ‘Hello World’ uygulaması yapalım. Öncelikle bunun için yeni bir proje oluşturalım. Tanımlı proje şablonlarından Workflow altında bulunan ‘Sequential Workflow Console Application’ şablonunu seçiyoruz.

 

 

i. Aktivite sınıfının hazırlanması

Oluşan projede visual studio bizim için bir workflow component i ekliyor ama biz şimdilik bunu kullanmayacağız. Program.cs içerisinde WorkflowDemo isimli bir sınıf tanımlıyoruz.


class WorkflowDemo : SequentialWorkflowActivity
{
public WorkflowDemo()
{
CodeActivity code = new CodeActivity();
code.ExecuteCode += delegate
{
Console.WriteLine("Hello World");
};

this.CanModifyActivities = true;
this.Activities.Add(code);
this.CanModifyActivities = false;
}
}

 


Tanımladığımız sınıfın daha önceden bahsettiğimiz aktivite modeline uygun olarak bir aktivite sınıfından türemesi gerekiyor. Bunun için tanımlı olan sınıflardan SequentialWorkflowActivity sınıfını kullanıyoruz.
En temel aktivite sınıflarından CodeActivity sınıfından oluşturduğumuz bir nesne ile ekrana “Hello world” mesajımızı yazdırmak için bu nesnenin ExecuteCode eventi içerisine ilgili kodu ekliyoruz.
Burada dikkat edilmesi gereken 2 konu bulunmakta. Öncelikle bu oluşturduğumuz aktivite nesnesini WorkflowDemo sınıfının aktivite listesine eklememiz gerekiyor. Bu sayede WorkflowDemo sınıfından bir nesne oluşturulup kullanılırken bizim oluşturduğumuz kod parçası da çalıştırılabilir olacaktır. İkinci önemli konu ise bu işlemi yapabilmek için aktivite sınıfının özelliklerinden olan CanModifyActivities özelliğinin işlemden önce açılıp sonra da kapatılması gerektiğidir.

ii. Aktivite nesnesinin kullanımı

 


class Program
{
static void Main(string[] args)
{
using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
WorkflowInstance instance =
workflowRuntime.CreateWorkflow(typeof(WorkflowDemo));

instance.Start();

Console.ReadLine();
}
}
}


Oluşturduğumuz aktivite sınıfından bir WorkflowInstance , yani örnek oluşturup bunu WorkflowRuntime ile çalıştırıyoruz.

 

 

 

 


iii. İş akışı tasarım aracı kullanarak aynı işlemi yapalım
Önce projeye yeni bir SequentialWorkflow componenti ekliyoruz.




Oluşturduğumuz componente tasarım aracı yardımı ile bir CodeActivity ekliyoruz. Daha sonra bu aktiviteye çift tıklayarak çalıştırlması gereken kod parçasını ekliyoruz.


public sealed partial class WorkflowDemoWithDesigner: SequentialWorkflowActivity
{
public WorkflowDemoWithDesigner()
{
InitializeComponent();
}

private void codeActivity_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("Hello World");
}
}

 

class Program
{
static void Main(string[] args)
{
using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
WorkflowInstance instance =
workflowRuntime.CreateWorkflow(typeof(WorkflowDemoWithDesigner));

instance.Start();

Console.ReadLine();
}
}
}


Sonuç olarak bu örnekte WWF içerisinde kullanılabilecek en temel işlevlerin nasıl kullanıldığını görmüş olduk.