Aplikacja kliencka – Windows Workflow Foundation

W jednym z ostatnich postów pokazałem jak stworzyć aplikację WWF na przykładzie prostego Sequential Workflow. Dzisiaj zajmiemy się wykorzystaniem stworzonej biblioteki w aplikacji klienckiej. Warto najpierw ściągnąć kompletny kod źródłowy ponieważ nastąpiła jedna drobna zmiana w implementacji workflow.

Pierwszym etapem jest oczywiście stworzenie aplikacji np. WPF lub Connsole. Następnie należy dodać referencje do skompilowanej biblioteki zawierającej WWF. Ponadto jest jeszcze potrzebna biblioteka System.Workflow.Runtime, System.Workflow.ComponentModel oraz System.Workflow.Activities.

W celu odpalenia workflow trzeba najpierw stworzyć tzw. środowisko uruchomieniowe:

System.Workflow.Runtime.WorkflowRuntime runtime = new System.Workflow.Runtime.WorkflowRuntime();
runtime.StartRuntime();

W poprzednim poście został zdefiniowany specjalny interfejs dla usługi:

[ExternalDataExchange]
public interface IService
{
   void NotifyUser(string message);
   void Approve();        
}

Przykładowa implementacja usługi może wyglądać następująco:

class Service:SimpleWorkflowLibrary.IService
{
   private Guid m_InstanceId;

   public Service(Guid instanceId)
   {
       m_InstanceId = instanceId;
   }                 

   #region IService Members

   void SimpleWorkflowLibrary.IService.NotifyUser(string message)
   {
       Console.WriteLine(message);
   }

   void SimpleWorkflowLibrary.IService.Approve()
   {
       // tutaj powinien znajdować się kod walidacyjny
   }

   #endregion
}

 

Usługa służy do komunikacji między workflow a aplikacją kliencką. Przykładowo stworzony workflow wywołuje metodę NotifyUser (powiadomienie użytkownika) oraz Approve (przeprowadzenie walidacji).

Kolejnym krokiem jest inicjalizacja workflow, przekazanie niezbędnych parametrów oraz dodanie stworzonej usługi:

Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("Number", number);

System.Workflow.Runtime.WorkflowInstance instance= runtime.CreateWorkflow(typeof(SimpleWorkflowLibrary.Workflow1),parameters);
System.Workflow.Activities.ExternalDataExchangeService externalService = new System.Workflow.Activities.ExternalDataExchangeService();            
runtime.AddService(externalService);
Service service = new Service(instance.InstanceId);

externalService.AddService(service);
instance.Start();            

Parametry workflow przekazuje się w metodzie CreateWorkflow za pomocą słownika. Następnie należy dodać usługę Service, zaimplementowaną w poprzednim kroku. Po wywołaniu Start, workflow jest przetwarzany.

Jeśli coś jest niezrozumiałe to najlepiej przejrzeć kod, który znajduje się tutaj lub zapytać (za pomocą komentarza na blogu):).

Leave a Reply

Your email address will not be published.