Bilgehan Yıldıza Değerli bilgileri için teşekkür ederiz,
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
Kod:
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.
Kod:
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.
Kod:
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.