WORKFLOW FOUNDATION VE CODE ACTIVITY

CodeActivity abstract bir class olup, Custom Activityler oluşturabilmek için kullanırız

Projeye Workflow — >AddNew Item– >Worklow — >CodeActivity seçerek bize şablon bir class üretir veya projemize bir class ekledikten sonra  FirstCustomWorkflow : CodeActivity oluşturduğumuz sınıfımızı CodeActivity sınıfından türeterek de bu işlemi yapabiliriz.

Bu şekilde seçilince classımız otomatik olarak aşağıdaki şablondaki gibi yaratılır

public sealed class FirstCustomWorkflow : CodeActivity

{

// Define an activity input argument of type string

public InArgument<string> Text { get; set; }

// If your activity returns a value, derive from CodeActivity<TResult>

// and return the value from the Execute method.

protected override void Execute(CodeActivityContext context)

{

// Obtain the runtime value of the Text input argument

string text = context.GetValue(this.Text);

}

}

Senaryomuz şöyle olsun İki Sayıyı toplayarak hem sonucu bir Output parametresine ,hemde ayrıca execute edilirken dönecek sonucuda ayrı bir output parametresine yazacak bir Code Activity yazalım.Bunun için aşağıdaki 4 tane argumanı projemize ekliyoruz

Eğer Custom Activity execute metodundan bir değer dönecekse classtan türetme yaparken geri dönüş tipimizi belirtmemiz gerekiyor FirstCustomWorkflow : CodeActivity<string> gibi Gelen Input Parametrelerinin değerini okuyabilmek için context.GetValue,benzer şekilde Parametrelere değer atayabilmek için context.SetValue kodlarını kullanıyoruz.

public sealed class FirstCustomWorkflow : CodeActivity<string>

{

// Input Argumentlar tanımlamak için

public InArgument<int> Number1 { get; set; }

public InArgument<int> Number2 { get; set; }

// If your activity returns a value, derive from CodeActivity<TResult>

// and return the value from the Execute method.

protected override string Execute(CodeActivityContext context)

{

// Obtain the runtime value of the Text input argument

int Sayi1 = context.GetValue(this.Number1);//context.GetValue<int>(this.Number1);

int Sayi2=context.GetValue<int>(this.Number2);

int total = Sayi1 + Sayi2;

context.SetValue(MyResult,”Sonuc:” + total.ToString());

return “Execute Sonucu dönecek Mesaj Değerimiz”;

}

//Output Argumentlar tanımlamak için

public OutArgument<string> MyResult { get; set; }

Bu şekilde classımızı build ettikten sonra artık hazırladığımız Custom Flow Toolboxtan kullanmamıza hazır hale geliyor

Daha sonra Activity Designerımızın içinde Sequence kontrolü atıyoruz ve içine bu Custom flowumuzu sürükle bırak yapıyoruz.Bu flow çalıştığında ekrana custom workflowdan çıkış argümanını ve execute edildiği andaki return değerini ekrana yazdırıyor olacağız.

Custom workflowumuzu tıklayarak bu flowdaki argumanlarımızı activityimizin genelindeki parametrelerle eşleştirmemiz gerekmektedir.

class Program

{

static void Main(string[] args)

{

int Number1 = 5;

int Number2 = 10;

Dictionary<string, object> argumentlist = new Dictionary<string, object>();

argumentlist.Add(“Number1″, Number1);

argumentlist.Add(“Number2″, Number2);

WorkflowInvoker.Invoke(new Calculator(), argumentlist);

Console.ReadLine();

}

}

Yukarıdaki Program csdede çalışacak oluşan activity ve input argumentların değerlerini belirterek örneğimizi tamamlıyoruz.Ekrandada görüldüğümü gibi Sonuc:15 Output Argumentin değeri Execute sonucu dönecek Mesaj Değerimiz yazan satır ise Custom workflowun return value dur.

Bu yazı .NET kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>