Ana içeriğe atla

WF - Parametre Kullanımı

Windows Workflow (WF) teknolojisini şu ana kadar temel uygulama tipleri ve istisnai durumlar (Exceptions) konularını inceledik. WF ile uygulama geliştirirken hangi adımlara dikkat etmemiz gerektiği ve kafamıza takılan geliştirme işlemlerini nasıl yapabileceğimizi detaylı bir şekilde inceleyerek yazılarımıza devam ediyor olacağız. Bu sefer ise WF 'da parametre kullanılmasını inceliyor olacağız.

Son kullanıcının kullanımına açılacak uygulamalar çok büyük oranda istek cevap mantığına göre çalışmaktadır. Bu istekleri taşıyabilmek için ise uygulamalarda parametrelerden yararlanılmaktadır. Bu parametreler hem uygulama içerisinden herhangi bir değerden gelirken dış veri giriş ya da istek controlleri yardımı ile de kullanılabilmektedir. Özellikle portal sistemlerinde iş akışı kullanımı çok yoğundur ve gönderilen parametreler doğrultusunda izin talepleri, araç istekleri, döküman paylaşımları ve akla gelmeyen diğer iş akışlarının hazırlanmasında parametre kullanımı çok ama çok fazladır. Bu sebepten ötüdür ki bu konu WF teknolojisi ile uygulama geliştiren geliştiriciler de çok önceliklidir.

Şimdi biz bu işlemleri WF teknolojisi üzerinde nasıl kullanabilceeğimizi incelemeye başlayalım. Visual Studio 2010 (VS2008 ya da WF eklentileri yüklenmiş VS2005 'te olabilir. Aynı özellikler her ikisinde de geçerlidir.) üzerinde Workflow seçeneği seçili iken .Net Framework 3.0 sürümü altında yer alan Sequential Workflow Console Application proje şablonunu seçiyor ve ismini ParameterParsing vererek  projeyi oluşturuyoruz. Sonrasında karşımıza alışık olduğumuz WF tasarım ekranı ve bileşenlerimiz gelecektir.

Tasarım ekranı üzerine Code Activity bileşenini sürüklüyor ve ExecuteCode olayınına parametre alabilmesi için gerekli işlemleri uygulamaya başlıyoruz.


Sonrasında kod tarafına basit bir string özellik oluşturup codeActivity bileşeninin içerisinde kullanılmak üzere ekliyoruz.

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
    Console.WriteLine("Bulunan string değer: [{0}]",StringToPrint);
}

private string _stringToPrint;

public string StringToPrint
{
    get { return _stringToPrint; }
    set { _stringToPrint = value; }
}

Eklemiş olunan CodeActivity bileşeni üzerinde parametre kullanılması için gerekli hazırlıklar tamamlandı. Peki, parametreler nereden gelecek? Bu örneğimiz için Program.cs içerisinde yer alan WorkflowRuntime.CreateWorkflow metodunun içerisine Dictionary<> olarak bir parametre daha vereceğiz. Bu parametre bizim hazırlamış olduğumuz Workflow tasarım ekranını hazırlarken belirlemiş olduğumuz özelliklerin isimlerini ve alacakları değerleri vermemiz durumunda onlar global olarak değişkenleri kabul edecek ve gerekli değerleri tanımlayacaktır.

Yukarıda belirttiğimiz şekilde Program.cs dosyasının içerisini düzenledikten sonraki son görünüm aşağıdaki gibi olacaktır.

using System;
using System.Collections.Generic;

using System.Threading;
using System.Workflow.Runtime;

namespace ParameterParsing
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
               {
                   Console.WriteLine(e.Exception.Message);
                   waitHandle.Set();
               };
               Dictionary<string, object> parameters = new Dictionary<string, object>();
                    parameters.Add("StringToPrint", "Parametreleri kullanarak sonuçları elde ettik...");
               WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(ParameterParsing.Workflow1),parameters);
               instance.Start();

               waitHandle.WaitOne();
            }
        }
    }
}

Workflow1.cs dosyasına eklemiş olduğumuz StringToPrint özelliğini program.cs dosyasında bir koleksiyonun içerisinde tanımladıktan sonra iş akışı başladığında çağırılacak parametrelerin arasında olması için intance 'ın parametreleri arasına ekledikten sonra işlemimizi tamamlamış oluyoruz.

Yapmış olduğumuz işlemler sonrasında uygulamamızı çalıştırdığımızda karşımıza aşağıdaki gibi bir ekran çıktısı çıkacaktır.



Daha önce de bahsettiğimiz gibi WorkflowInstance 'a atayacağımız değeleri CreateWorkflow metodunun sonucunda dönecek olanlardan elde ediyorduk. Bu metotta birden fazla aşırı yüklemeden oluşmaktadır. Bunlardan biri de kolleksiyonla birlikte işlem yapandır. Biz de bu metottan yararlanarak oluşturmuş olduğumuz Dictionary koleksiyonunu ekleyerek işlemimizi yaptık.

Şimdi örneğimizi biraz daha karmaşıklaştırarak parametre kullanımını incelemeye devam edelim. Bu sefer bir kullanıcı sınıfı oluşturalım. Sonrasında bu sınıfın içerisine Adı ve Soyadı diye iki adet eleman tanımlayalım. Sonrasında ise oluşturmuş olduğumuz bu sınıfın içerisinde yer alan elemanları Workflow tasarım ekranı üzerinde eklemiş olduğumuz CodeActivity bileşeninin çalışma esnasında görüntülenecek şekilde hazırlayalım.

Eklemiş olduğumuz işlem sonrasında Workflow1.cs 'nin içeriği aşağıdaki gibi olacaktır.

using System;
using System.Workflow.Activities;
using System.Collections.Generic;

namespace ParameterParsing
{
    public class Kullanici
    {
        public Kullanici(string ad, string soyAd)
        {
            this.adi = ad;
            this.soyAdi = soyAd;
        }

        private string adi;

        public string Adi
        {
            get { return adi; }
            set { adi = value; }
        }
        private string soyAdi;

        public string SoyAdi
        {
            get { return soyAdi; }
            set { soyAdi = value; }
        }
    }

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

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            foreach (Kullanici k in Insan)
            {
                Console.WriteLine("İsminiz [{0},{1}] 'dir.", k.Adi, k.SoyAdi);
            }
        }

        private List<Kullanici> insan;

        public List<Kullanici> Insan
        {
            get { return insan; }
            set { insan = value; }
        }
    }
}

Kod parçasını yukarıdaki şekilde oluşturduk ve iş akışının çalışması esnasında oluşacak işlemleri de hazırladık. Şimdi program.cs üzerinden gerekli parametreleri oluşturabiliriz.

using System;
using System.Collections.Generic;

using System.Threading;
using System.Workflow.Runtime;

namespace ParameterParsing
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
               {
                   Console.WriteLine(e.Exception.Message);
                   waitHandle.Set();
               };
               Dictionary<string, object> parameters = new Dictionary<string, object>();
                    List<Kullanici> insan = new List<Kullanici>();
                    insan.Add(new Kullanici("Tur", "Tem"));
                    insan.Add(new Kullanici("Ser", "Tur"));

                    parameters.Add("Insan", insan);
               WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(ParameterParsing.Workflow1),parameters);
               instance.Start();

               waitHandle.WaitOne();
            }
        }
    }
}


Oluşturulan sınıfa ait varlıklara değerleri atadık ve sonrasında uygulamayı çalıştırdığımızda bu değerleri sorunsuzca göreceğiz.



Bir önceki örneğimizde string bir değeri tutan bir parametreyi akış bileşenin nasıl kullanacağımızı gördük. Bu örneğimizde de Oluşturduğumuz bir sınıfı (Veri tabanı tablosu gibi de düşünebilirsiniz) içerisinde yer alan varlıklardan yararlanarak buna değerler atadık ve yine codeactivity bileşenin içerisinde sorunsuzca gösterebildik.

Sonuç olarak Workflow Foundation ile geliştirilen uygulamlarda parametreleri el ile atayıp kullanabileceğimiz gibi bir veri topluluğu içerisinde de çekip kullanabiliriz. Ayrıca bu parametreleri kullanabilmemiz için program.cs sınıfının içerisinde CreateWorkflow metoduna parametre olarak  generic tipten bir parametre ekleyerek parametrelerin kullanılmasına olanak tanıyabiliriz.

Bir sonraki yazımızda Workflow Foundation ' da Paralel Aktiviteleri inceliyor olacağız.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com
turhal.temizer@csharpnedir.com

Yorumlar

Bu blogdaki popüler yayınlar

SharePoint 2010 - Content Query for Blog Posts

I hope this post will help many of you feel comfortable with using the Content Query Web Part. In this post I will walk you through the process of creating a content query web part and configuring it to show custom field types. I will also give details on how to use XSLT to stylize and format the data being pulled. I will be using the following scenario as an example. Say that you had a site collection with a top level publishing site. This publishing site would display a the most recent blog posts from all blog sites within its own site collection. To solve this problem we will use a Content Query Web Part and a customized ItemStyle.xsl using XSLT. Please note that the “SharePoint Server Publishing Infrastructure” needs to be enabled at the site collection to display the content query web part. Step 1: Add a Content Query Web Part to Page Navigate to the site that you want the blog posts to show up and click on edit page. Under Editing Tools in the Ribb

Olasılıksız - Kitap Yorum

Olasılıksız hayatımda okuduğum en iyi kitaptı. Tek çırpıda hiç sıkılmadan, eğlenerek okudum bu kitabı, tavsiyem sizinde okumanız. Kitabın kapağı ve içeriği ile ilgili kısa bilgi aşağıdadır. Olasılık, tahmin, düşünceler, nöbetler, karışıklıklar, ileriyi görebilme zannı, dejavu ve tabii ki olasılıksız şeyler. Bu kelimelerle içli dışlı olabileceğiniz, bütün bu kelimelerin yaşamdaki yerini kavrayabileceğiniz müthiş bir uyarlama. Adam Fawer' ın ortaya çıkardığı bu uyarlama romanın müthiş bir çalışmanın ve araştırmanın sonucu ortaya çıktığının kitabın başından sonuna kadar farkındasınız. Bu uyarlamasını, derin araştırmalarıyla birleştirip romanı tekdüzelikten çıkarıp müthiş bir yere koyduğu için de Fawer' a müteşekkir oluveriyorsunuz. Sıkıcı diye nitelendirebileceğiniz teorik bilgileri bile bir çırpıda okuyuveriyorsunuz. Teorik bilgiler dahi olaylarla sonuna kadar bağlantılı aktarılmış. Tekdüzelikten çıkmış bir roman; olasılıksız. Her an olayın kurgusunun değişmesi olasılık dahilind

.Net 3.5 SP1 – Full Install Packages (Tam Kurulum)

.Net Framework 3.5 SP1 ‘i bilgisayarınıza kurmak istediğinizde normal şartlar altında Microsoft ‘un sitesinde 2.7 mb ‘lik bir dosya indirir ve kurulum işlemlerinizi bu dosya üzerinden yaparsınız. Ancak bu indirmiş oluğunuz dosya yaklaşık 220 mb ‘lik veriyi internetten indirerek kurulum yapmaktadır. İnternet çıkışına izin verilmeyen kurumlar ve kuruluşlar için bu durum bir sıkıntı oluşturmaktadır. Bu sebepten ötürü aşağıdaki link yardımı ile tam yükleme paketini indirdikten sonra hiç internet ihtiyacınız olmadan .Net 3.5 SP1 ‘i kurabilmeniz mümkün olacaktır. Link