Tag Archives: flowdecision

Workflow Foundation ile FlowSwitch ve Parallel Aktivitesi Kullanımı

FlowSwitch aktivitesi tıpkı FlowDecision aktivitesine benzer şekilde çalışır fakat farklı olarak FlowDecision aktivitesinde True ya da False şeklinde 2 adet dal tanımlanmasına karşın, bu yapıda sınırsız sayıda dal tanımlayabilirsiniz. C#’ta ve bir çok programlama dilinde kullandığımız switch yapısına benzer.

Bu yazıda WF ile FlowChart Aktivitesi Oluşturmak makalemizde kullandığımız projemiz üzerinden devam edeceğiz. Projemizin alt tarafına bir FlowSwitch aktivitesi sürükleyip bırakalım. Toolbox kısmında FlowSwitch<T> şeklinde görünmektedir bu aktivite. Sürüklediğinizde sizden içereceği daha tipini gerektiren bir mesaj kutusu görünür. Burada default olarak Int32 görünür ki bizim de bu projemizde kullancağımız data tipi budur. Ardından daha önceden projemize eklediğimiz “Sabah”, “Öğleden Sonra” ve “Akşam” isimli Writeline aktivitelerini FlowSwitch aktivitemize bağlayalım.

WF-FlowSwitch

FlowSwitch aktivitesinin bir adet Expression adından bir özelliği vardır. Burada yazılan koşul, bu aktivitenin birden fazla dalındaki değerleri çözmek için kullanılır. (Tıpkı programlama’da olduğu gibi) Şimdi bu FlowSwitch aktivitemizin Expression özelliğine koşulumuzu yazalım;


CInt(((DateTime.Now.Month Mod 12) + 1) / 4)

NOT: Burada yazdığımız ifade sizi biraz şaşırtabilir. WF 4.0’da yazılan tüm ifadeler Visual Basic syntax’ı ile yazılırlar. Bu ifadeler derlenmezler, sadece workflow aktiviteleri tarafından hesaplanırlar. Böylece bu ifadelerin syntax’ı, uygulamalarda kullandığınız programlama dilinden bağımsızdır. İfade yazacağınız kutunun üzerine geldiğinizde “Enter a VB expression” yazısını görürüz.

Yukarıda yazdığımız ifade, yaklaşık olarak şu andaki zamanın mevsim değerini ifade eder. Aralık, Ocak ve Şubat ayları için 0 değerini üretir, Mart, Nisan, Mayıs için 1 değerini üretir. Şimdi bu aktivitemizde her bir mevsim için bir adet dal (branch) üretiriz.

FlowSwitch aktivitemizin her bir dalına FlowStep adı verilir. Tabi Toolbox’ta FlowStep aktivitesi bulunmaz. Bu dalları açıkça workflow’a eklemezsiniz. Bu dallar FlowSwitch aktivitesinden bağlantılar çizdiğinizde oluşturulurlar.

Şimdi FlowSwitch aktivitemizin etrafına 5 adet Writeline aktivitesi sürükleyip bırakalım. Bunlardan dördünü mevsimler için birini de default değer için kullanacağız. FlowSwitch aktivitesi ile bu 5 Writeline aktivitesini birbirlerine bağlayalım. Daha sonra da bu bağlantı dallarının üzerlerine tıklayıp Properties penceresinden Case özelliğine, ifade sonucunun hangi bağlantıyı seçeceğine dair Int32 değerlerimizi girelim. Default Writeline aktivitesini boş bırakalım ve bu bağlantının IsDefaultCase özelliğini tikleyelim.

WF-FlowStep

Tabi bu diagramımızda Default aktivitesi hiçbir zaman çalıştırılmaz çünkü olası her değer için bir Writeline aktivitesi tanımlamış durumdayız. Projemizi F5 ile çalıştırdığımızda aşağıdakine benzer sonuç elde ederiz;

Merhaba Dünya
İyi Öğle Sonraları
Selam Yaz
ENTER to exit

 

Parallel Aktivitesini Tanıyalım

Parallel aktivitesi, birçok aktivitenin paralel olarak çalıştırılmasına imkan veren bir aktivitedir. Bu projemizde her bir branch belirli bilgiler gösterirler. Gösterdikleri bilgilerin sıraları önemli değildir, bu yüzden bunları bir Parallel aktivite içerisine koyarız.

Şimdi bir Parallel aktivitesini Toolbox’tan workflow’umuzun altına sürükleyip bırakalım. Daha önce eklediğimiz 5 Writeline aktivitesini bu Parallel aktivitesine bağlayalım.

WF-Parallel

Ardından Parallel aktivitemize çift tıklayıp içerisine 3 adet Writeline aktivitesi ekleyelim. Bu aktiviteleri sırayla zamanı, tarihi ve günü göstermek için kullanacağız. Bu yüzden bu aktivitelerin Text özelliklerine sırasıyla;


"Zaman: " + DateTime.Now.TimeOfDay.ToString()

"Tarih: " + DateTime.Now.Date.ToShortDateString()

"Bugün: " + DateTime.Now.ToString("dddd")

ifadelerini yazalım.

WF-Parallel2

NOT: Parallel aktivitesi kendisine bağlanan her bir branch için basit bir adet aktivite destekler. Bizim projemiz için şu anda herhangi bir sorun yok. Fakat, her dal için birden fazla aktiviteye ihtiyacınız varsa,  Sequence aktivitesi kullanmanız gerekecektir. Sonra da içine herhangi bir sayıda aktivite ekleyebilirsiniz.

Şimdi de projemizi F5 ile çalıştıralım. Aşağıdakine benzer bir sonuç almalıyız;

Merhaba Dünya
İyi Öğle Sonraları
Selam Yaz
Zaman: 17:18:07.3144532
Tarih: 05.08.2012
Bugün: Pazar
ENTER to exit

Bir sonraki yazımızda görüşmek üzere..

Workflow Foundation ile Flowchart Aktivitesi Oluşturmak

Bu yazımızda Flowchart aktivitesi içeren workflow’ların nasıl oluşturulduğunu göreceğiz. Adından da anlaşılacağı gibi bir Flowchart aktivitesi aynı bir flowchart gibi çalışır. Aktiviteler birbirlerine karar yapıları ile bağlıdırlar (decision trees). Daha önceki yazılarımızda gördüğümüz gibi Sequence aktivitesi içerisinde aktiviteler sıralı olarak yukarıdan aşağıya çalışırlar. Fakat bir Flowchart aktivitesi içerisinde aktiviteler karar dallanmasına bağlı olarak herhangi bir sırada çalışabilirler.

Hemen bununla ilgili bir proje oluşturalım. Visual Studio 2010 –> File –> New –> Project –> Visual C# –> Workflow –> Workflow Console Application adımlarını takip edelim.

Oluşturduğumuz aktiviteye bir Flowchart aktivitesi sürükleyip bırakalım.

WF-Flowchart-Activity

Ortadaki yeşil daire flowchart aktivitemizin başlangıç düğümünü gösterir. Aşağıdaki boşluk alan da flowchart’ımızı oluşturmak için ekleyeceğimiz aktiviteleri içerme görevini üstlenir.

Bir Flowchart aktivitesi ile Sequence aktivitesi arasındaki temel fark alt aktivitelerin birbirlerine nasıl bağlandıklarıdır. Önceki yazılarımıza baktığımızda Sequence aktivitelerinin içindeki aktiviteler daima yukarıdan aşağıya doğru çalışırlar. Aktivitelerin çalışma sıralarını yerlerini değiştirerek kontrol edebiliriz. Flowchart aktivitesinde ise aktiviteleri diagram içerisinde istediğiniz yere koyabilirsiniz. Daha da önemlisi, bu aktivitelerin aralarına oklar çizmek zorundayız. Tabi Flowchart aktivitesi içerisinde, bir önceki aktiviteye de bağlantı kurabilirsiniz.

Hemen Flowchart aktivitemizin içerisine yeşil dairenin alt tarafına bir adet Writeline aktivitesi ekleyelim. DisplayName özelliği “Merhaba”, Text özelliği de “Merhaba Dünya” olsun.

Başlangıç düğümümüzün üzerine fare ile geldiğimizde dört kenarında gri kutucuklar belirecektir. Bu kutucuklardan birini tıklayıp Merhaba adındaki Writeline aktivitemizin kenarlarına bağlantı görününceye kadar sürükleyip bırakalım.

WF-Start-Node

Bu bize iki aktivitenin nasıl birbirlerine bağlandığı konusunda fikir verir.

Şimdi de diagramımızdaki Writeline aktivitemizin altına bir FlowDecision aktivitesi sürükleyip bırakalım. Bu aktivite sarı bir elmas şeklindedir tıpkı normal bir flowchart diagramındaki karar yapıları gibi. Bu aktivitenin üzerine tıklayıp Properties penceresinden Condition kısmına DateTime.Now.Hour > 12 ifadesini yerleştirelim. Bu ifadeyi yazdıktan sonra FlowDecision aktivitesinin üzerine gelip bu koşul ifadesini görebiliriz.

WF-FlowDecision

Ayrıca yukarıdaki sarı elmas şeklinin sağ üst köşesindeki sarı ok ile koşul ifadesini diagrama sabitleyebiliriz. Burada gördüğümüz gibi aktivitenin sol tarafında True sağ tarafında ise False dalları bulunur. Properties penceresinden TrueLabel özelliğine “Öğleden Sonra”, FalseLabel özelliğine de “Sabah” yazalım. Bu aktivitenin üzerine geldiğimizde bu özelliklerin isimlerini sağ ve sol tarafta görebiliriz.

Bu aşamalardan sonra Merhaba Writeline aktivitemizi FlowDecision aktivitemize bağlayalım. Sonra da FlowDecision aktivitesinin sağ tarafına yeni bir Writeline aktivitesi sürükleyip bırakalım. DisplayName özelliğini “Sabah”, Text özelliğini de “İyi Sabahlar” olarak ayarlayalım. Ardından FlowDecision aktivitemizin Sabah bağlantısını yeni eklediğimiz Sabah adındaki Writeline aktivitemize bağlayalım.

WF-Connection

NOT: Göreceğiniz gibi FlowDecision aktivitesinde DisplayName özelliği bulunmuyor.

Başka bir FlowDecision aktivitesini ilk eklediğimiz olanın soluna sürükleyip bırakalım. Bu aktivitenin Condition kısmına DateTime.Now.Hour >= 18 ifadesini yazalım. İlk FlowDecision aktivitemizin “Öğleden Sonra” dalını bu yeni eklediğimiz aktiviteye bağlayalım. Yeni aktivitemizin FalseLabel özelliğini “Öğleden Sonra”, TrueLabel özelliğini de “Akşam” olarak ayarlayalım. Ardından 2 adet Writeline aktivitesi ekleyelim. Sırayısla DisplayName özelliklerine “Akşam”, “Öğleden Sonra”, Text özelliklerine de “İyi Akşamlar” ve “İyi Öğle Sonraları” yazalım. Daha sonra ikinci eklediğimiz FlowDecision aktivitesini bu Writeline aktivitelerine bağlayalım.

WF-FlowDecision2

Herşey tamam. Şimdi projemizi çalıştırmadan önce Program.cs dosyamızı açalım. WorkflowInvoker sınıfı içerisinden çağırdığımız Invoke() methodu ardından aşağıdaki kodları yazalım;


Console.WriteLine("ENTER to exit");
Console.ReadLine();

Projemizi F5 ile çalıştıralım. Günün hangi saatinde olduğunuza göre aşağıdakine benzer bir sonuç alacaksınız;

Merhaba Dünya
İyi Akşamlar
ENTER to exit

Bu yazımızda FlowDecision aktivitesinin nasıl kullanıldığına dair bilgiler vermeye çalıştım.