Etkinlik Uzantıları Kullanma
Etkinlikler, konağın iş akışında açıkça modellenmemiş ek işlevler sağlamasına olanak sağlayan iş akışı uygulama uzantılarıyla etkileşimde bulunabilir. Bu konuda, etkinliğin yürütülecek sayısını saymak için uzantı oluşturma ve kullanma işlemleri açıklanmaktadır.
Yürütmeleri saymak için etkinlik uzantısı kullanmak için
Visual Studio 2010'yu açın. Yeni, Proje'yi seçin. Visual C# düğümü altında İş Akışı'nı seçin. Şablon listesinden İş Akışı Konsol Uygulaması'nı seçin. Projeyi
Extensions
olarak adlandırın. Projeyi oluşturmak için Tamam'a tıklayın.System.Collections.Generic ad alanı için Program.cs dosyasına bir
using
yönerge ekleyin.using System.Collections.Generic;
Program.cs dosyasında ExecutionCountExtension adlı yeni bir sınıf oluşturun. Aşağıdaki kod, Register yöntemi çağrıldığında örnek kimliklerini izleyen bir iş akışı uzantısı oluşturur.
// This extension collects a list of workflow Ids public class ExecutionCountExtension { IList<Guid> instances = new List<Guid>(); public int ExecutionCount { get { return this.instances.Count; } } public IEnumerable<Guid> InstanceIds { get { return this.instances; } } public void Register(Guid activityInstanceId) { if (!this.instances.Contains<Guid>(activityInstanceId)) { instances.Add(activityInstanceId); } } }
ExecutionCountExtension kullanan bir etkinlik oluşturun. Aşağıdaki kod, çalışma zamanından ExecutionCountExtension nesnesini alan ve etkinlik yürütürken Register yöntemini çağıran bir etkinliği tanımlar.
// Activity that consumes an extension provided by the host. If the extension is available // in the context, it will invoke (in this case, registers the Id of the executing workflow) public class MyActivity: CodeActivity { protected override void Execute(CodeActivityContext context) { ExecutionCountExtension ext = context.GetExtension<ExecutionCountExtension>(); if (ext != null) { ext.Register(context.WorkflowInstanceId); } } }
etkinliği program.cs dosyasının Main yönteminde uygulayın. Aşağıdaki kod, iki farklı iş akışı oluşturma, her iş akışını birkaç kez yürütme ve uzantıda bulunan sonuçta elde edilen verileri görüntüleme yöntemlerini içerir.
class Program { // Creates a workflow that uses the activity that consumes the extension static Activity CreateWorkflow1() { return new Sequence { Activities = { new MyActivity() } }; } // Creates a workflow that uses two instances of the activity that consumes the extension static Activity CreateWorkflow2() { return new Sequence { Activities = { new MyActivity(), new MyActivity() } }; } static void Main(string[] args) { // create the extension ExecutionCountExtension executionCountExt = new ExecutionCountExtension(); // configure the first invoker and execute 3 times WorkflowInvoker invoker = new WorkflowInvoker(CreateWorkflow1()); invoker.Extensions.Add(executionCountExt); invoker.Invoke(); invoker.Invoke(); invoker.Invoke(); // configure the second invoker and execute 2 times WorkflowInvoker invoker2 = new WorkflowInvoker(CreateWorkflow2()); invoker2.Extensions.Add(executionCountExt); invoker2.Invoke(); invoker2.Invoke(); // show the data in the extension Console.WriteLine("Executed {0} times", executionCountExt.ExecutionCount); executionCountExt.InstanceIds.ToList().ForEach(i => Console.WriteLine("...{0}", i)); } }