Makale Özeti

Bu yazımızda WF uygulamalarına giriş yapmış oluyoruz ve kod yardımı ile bir iş akışı aktivitesi nasıl oluşturup sonrasında bunu nasıl tetikleyebileceğimizi incelemiş oluyoruz.

Makale

Microsoft 'un yaklaşık 4 yıl önce yapmış olduğu vizyon değişikliği ile .Net 3.0 Framework sürümü ortaya çıktı. Bu sürümde çok fazla yenilik geliyordu. Özellikle yapılan geliştirmeler windows formların iyileştirilmesi ve görselleştirilmesi anlamında Windows Presentation Foundation (WPF), web servislerinin ve SOA mimarisinin daha etkili kullanılabilmesi için Windows Communication Foundation (WCF), web sayfalarında ve kimlik kontrolleri gerektiren formlarda daha güvenli bir şekilde kayıt işlemleri ve üye girişlerinin yapılabilmesi için Cardspace ve iş akışlarının yönetilebilmesi ve rahatlıkla kullanılabilmesi için Windows Workflow Foundation (WF) olarak gözümüze çarpmaktadır. Zaman ilerledikçe bu teknolojiler üzerinde yapılan gelişmeler ile çok daha stabil ve kullanılabilirliğini arttırarak tercih sebebi olmuşlardır. Özellikle .Net Framework 4.0 ile gelen yenilikler geliştiricileri oldukça memnun etmiştir.

Bu yazımızda ve bundan sonraki takip eden yazılarımızda Windows Workflow Foundation (WF) teknolojisini nasıl daha etkili bir biçimde kullanabilirizi inceliyor olacağız. İnternet üzerinde ve alınan kitaplardan incelendiği kadarıyla genellikle WF teknolojinin yetilerini ve neler yapılabileceği anlatılmaktadır. Bizim ana amacımız ise WF teknolojisini örnekler yardımı ile nasıl kullanabileceğimizi açıklamak olacaktır.

WF 'un kısaca hangi ortamlarda kullanılabileceğine değinmek gerekirse;
• Asp.Net ile hazırlanmış olan web uygulamalarında herhangi bir işlemin iş akışı yardımıyla tetiklenmesi ve o akışa bağlı olarak hareket edebilmesi esnasında,
• Windows From ile hazırlanmış olan uygulamalarda herhangi bir işlemin iş akışı yardımıyla tetiklenmesi ve o akışa bağlı olarak hareket edebilmesi esnasında,
• Biztalk Server ile hazırlanmış olan uygulamalarda,
• Microsoft Sharepoint Portal üzerinde hazırlanmış olan formlar üzerinde yapılan işlemler sonrasında tetiklenecek olan işlemler esnasında,
• Microsof CRM ve Dynamics üzerinde hazırlanmış olan formlar üzerinde yapılan işlemler sonrasında tetiklenecek olan işlemler esnasında
kullanıldığını gözlemleyebiliriz.

.Net Framework 4.0 'a doğru giderken, WF yapısında çok fazla değişiklik olduğunu gözlemleriz. Hem kullanımı kolaylaştıran hem de geliştiricilerin daha rahat geliştirme yapabilecekleri başarılı bir teknoloji durumunu almıştır. Ancak biz bu yazılarımızda .Net Framework 3.0 ve 3.5 ile kullanım yöntemlerinin anlatıyor olacağız. Çünkü Sharepoint ve CRM gibi teknolojilerin yeni sürümlerinden WF4.0 kullanılmayacaktır. Ülkemizde Sharepoint uygulama geliştiriciliğinin ve projelerininde arttığını ön planda tuttuğumuzda böyle bir karara varmış oluyoruz.

Daha önceki yazılarımızda WF ile ilgili mimari ve teknik bilgilere erişebilirsiniz. Biz yazımızda direk örnek yardımıyla başlıyor olacağız. Örneklerimizi geliştirirken Visual Studio 2010 IDE 'sinden yararlanırken framework olarak .Net 3.0 'ı seçiyor olacağız.

İnceleyeceğimiz ilk örnek bütün programcılık tekniklerinde en temel örnek olan "Merhaba Dünya" olacaktır.

Uygulamamızı WF mimarisi kullanıldığında nasıl yapı içerisinde kullanıldığını daha iyi anlayabilmek için konsol uygulaması üzerinde gerekli *.dll 'leri projeye referans ederek kullanıyor olacağız.



İş akışı uygulamalarını kullanırken bu eklemiş olduğumuz üç isim alanını muhakkak olması gerekmektedir.

Sequential(sıralı) Workflow, iş akışı tipinin özelliği içerisinde bulundurduğu aktiviteleri(activity) sıralı(adım adım) olarak çalıştırmasıdır. Sequential Workflow’lar bir tetikleyici ile başlayan ve bir daha önceden tanımlanmış bir adımdan diğer bir adıma geçerek ilerleyen iş sırası olarak da tanımlanabilir. Bu iş içerisinde kontrol ya da karar yapısı içerebilir. If bloğu ya da while döngüsü gibi…

Sequential Workflow işlemlerini Visuak Studio ortamında yer alan proje şablonları ile de yapılabilmektedir. Biz bu projemizde kendimiz sequential workflow yapısını oluşturacağız. Bunun için oluşturduğumuz konsol uygulamasında ki program.cs dosyasının içerisine aşğıdaki kodları ekliyoruz.

program.cs
class MyWorkflow : SequentialWorkflowActivity
{
    public MyWorkflow()
    {
        CodeActivity code = new CodeActivity();
        code.ExecuteCode += delegate
        {
             Console.WriteLine("Merhaba Dünya");
        };
        this.Activities.Add(code);
    }
}

CodeActivity ile kod üzerinden bir aktivite başlatılacağı belirtilir. Bu sınıf arayüz üzerinden geliştirilmesinden yardımcı bileşenlerden CodeActivity 'dir.

Bu sınıf bize codeactivity tetiklendiğinde ekrana Merhaba dünya yazmasını sağlayacaktır.

Sonrasında kod uygulama çalıştığından iş akışını da aktifleştirebilmek için aşağıdaki kod parçasını projeye ekliyoruz.

program.cs
class Program
{
    static void Main(string[] args)
    {
        WorkflowRuntime runtime = new WorkflowRuntime();
           runtime.StartRuntime();
        WorkflowInstance instance = runtime.CreateWorkflow(typeof(MyWorkflow));

        instance.Start();
        Console.WriteLine("Bir tuşa basmadığın sürece akış sonlanmayacaktır...");
        runtime.StopRuntime();
        Console.ReadLine();
    }
}

WorkflowRuntime sınıfını kullanarak çalışma anında iş akışının tetiklenebilmesi için ilk olarak oluşturulması sonrasında da başlatılması gerekmektedir. Sonrasında ise tetiklenecek olan sınıfı WorkflowInstance içerisinde tanımlarız. Instance 'i başlattığımızda artık iş akışı başlamış ve istediğimizi karşılamış durumdadır. Sonrasında ise açılmış olan iş akışı sürecisini durdurmak gerekmektedir. Bunun için ise WorkflowRuntime sınıfının StopRuntime() sınıfını kullanmak yeterli olacaktır.

Bu işlemler sonrasında projemizi çalıştırdığımızda aşağıdaki gibi bir sonuç elde ederiz.




İstediğimiz sonuca başarı ile ulaşmış bulunuyoruz.

Sonuç olarak bu yazımızda WF uygulamalarına giriş yapmış oluyoruz ve kod yardımı ile bir iş akışı aktivitesi nasıl oluşturup sonrasında bunu nasıl tetikleyebileceğimizi incelemiş oluyoruz.

Umarım yararlı olabilmiştir.
Turhal Temizer

info@turhaltemizer.com/a>
http://turhal.blogspot.com