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

  1. 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 Extensionsolarak adlandırın. Projeyi oluşturmak için Tamam'a tıklayın.

  2. System.Collections.Generic ad alanı için Program.cs dosyasına bir using yönerge ekleyin.

    using System.Collections.Generic;
    
  3. 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);
            }
        }
    }
    
  4. 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);
            }
    
        }
    }
    
  5. 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));
        }
    }