procesy biznesowe
DESCRIPTION
Procesy biznesowe. Windows Workflow Foundation. Proces Biznesowy. PB jest zbiorem jednej lub wielu powiązanych ze sobą procedur lub aktywności, których wykonanie prowadzi do osiągnięcia celu biznesowego. PB jest inicjowany przez pewne zdarzenie biznesowe. - PowerPoint PPT PresentationTRANSCRIPT
Procesy biznesowe
Windows Workflow Foundation
Proces Biznesowy PB jest zbiorem jednej lub wielu powiązanych ze sobą
procedur lub aktywności, których wykonanie prowadzi do osiągnięcia celu biznesowego.
PB jest inicjowany przez pewne zdarzenie biznesowe. W czasie wykonywania PB wykorzystywane są zasoby
organizacji oraz dostarczane są produkty (wyniki biznesowe) do wszystkich zainteresowanych stron (pracownicy, klienci, dostawcy, właściciele organizacji, itd.).
PB posiada mierniki efektywności, dzięki czemu proces można oceniać, porównywać z innymi procesami i w dalszej konsekwencji ulepszać.
Pojęcia
Model vs. instancja Aktywność Środowisko uruchomieniowe
Dostępne zasoby Brak wolnych zasobów
Zgłoszenie zapotrzebowania
Rezerwacja zasobów
Zamówienie zasobów
Pobranie zasobów
Business Process Execution Language for Web Services Język opisu opracowany przez BEA Systems,
IBM, Microsoft, SAP AG, Siebel Syst Wspiera wykorzystywanie usług sieciowych
kontrolując ich wywoływanie i koordynację Jest interpretowany i wykonywany przez silnik
(ang. Workflow Engine) Wspiera wykonywanie długich transakcji (dni,
tygodnie, miesiące) Zapewnia obsługę wyjątków pojawiających się w
takcie wykonywania procesu
Business Process Execution Language for Web Services Język BPEL4WS jest oparty na XML Do korzystania z BPEL4WS stworzono
narzędzia graficzne. Podstawowe elementy, które wykorzystuje się
podczas modelowania to: Punkty graniczne procesu (inaczej porty) – miejsca, w
których proces biznesowy styka się z systemami za pośrednictwem wywoływanych usług sieciowych
Wiadomości – informacje przesyłane pomiędzy poszczególnymi portami
Aktywności – elementy, które mają wpływ na sposób przepływu wiadomości pomiędzy portami.
Business Process Modelling Notation Standard stworzony przez Business Process
Management Initiative - BPMI, obecnie rozwijany przez Object Managament Group
Notacja, która byłaby zrozumiała dla wszystkich użytkowników: od analityków biznesowych, poprzez programistów, aż po osoby odpowiedzialne za monitorowanie procesów
Prezentacja modelu (np. BPEL4WS) użytkownikom biznesowym.
Etap pośredni pomiędzy modelowaniem i implementacją. Graficzne narzędzia dostępne wraz z WF przedstawiają
procesy biznesowe w odmienny sposób, zapewniając większą ilość szczegółowych informacji dla programisty.
Microsoft BizTalk Server integracja aplikacji w ramach organizacji – EAI (ang.
Enterprise Application Integration) integracja aplikacji między różnymi organizacjami – B2B
(ang. Business to Business)
Wykorzystanie specjalizowanego serwera uruchamieniowego dla procesów biznesowych pozwala tworzyć skalowalne i odporne na awarie rozwiązania.
Wszystkie moduły wchodzące w skład produktu mogą być uruchamiane na wielu fizycznych maszynach realizujących ten sam, logiczny proces biznesowy.
Microsoft BizTalk Server
Orchestration Designer BizTalk Schema Editor BizTalk Mapper Adapter Framework oraz zestaw gotowych
adapterów Środowisko uruchomieniowe
Orchestration Designer Graficzne modelowanie PB Dostępny jako plugin do MSVisio lub
uruchamianiy z VS Stała grupa aktywności m.in.:
przygotowanie komunikatu (construct message) przypisanie komunikatu (message assignment) transformacja komunikatu (transform).
Model procesu może obejmować również elementy odpowiedzialne za monitorowanie zdarzeń ważnych z punktu widzenia biznesu
Orchestration Designer
BizTalk Schema Editor
Tworzenie schematów XML (XSD) definiujących komunikaty przetwarzane przez orkiestrację
Na tej podstawie komunikat może być stworzony np. poprzez aktywność przypisania komunikatu.
BizTalk Schema Editor
BizTalk Mapper
definiowania mapowania wykorzystywanego przez aktywność transformacji
Aktywność transformacji zmienia komunikat na inny (dokument XML -> dokument XML)
Na tej podstawie komunikat może być stworzony np. poprzez aktywność przypisania komunikatu.
BizTalk Mapper
Integracja Biztalka Komunikacja pomiędzy różnymi systemami za
odbywa się za pomocą różnych protokołów komunikacyjnych
Porty używane w orkiestracjach wykorzystują elementy zwane adapterami
Adaptery: predefiniowane (m.in. Adapter Web Services, Adapter
plików, Adapter HTTP/SMTP/POP3, Adapter SQL ) dedykowane do konkretnych aplikacji (m.in. Adapter
WebSphere MQ lub Adapter Windows SharePoint Services)
dostarczone przez fimy zewnętrzne stworzone z wykorzystaniem Adapter Framework
Środowisko uruchomieniowe Elementy wchodzące w skład orkiestracji są
kompilowane do postaci bibliotek DLL. Procesy przed uruchomieniem należy umieścić
(ang. deploy) na serwerze BizTalk Server oraz połączyć z odpowiednimi portami.
Porty są tworzone na serwerze (np. np. BizTalk Administration Console) jako oddzielne elementy - niezależność procesu biznesowego od zewnętrznych systemów.
Business Rules Engine Definiowanie i obliczanie reguł logicznych
wykorzystywanych do odpowiedniego przetwarzania procesów biznesowych.
Przydatny zwłaszcza, gdy podczas implementowania procesu należy brać pod uwagę dużą ilość parametrów mających wpływ na przebieg procesu.
Możliwość modyfikacji reguł bez konieczności zmieniania orkiestracji, (tj. bez zmiany modelu, rekompilacji oraz wdrażania).
Do modyfikacji reguł można używać narzędzia Business Rule Composer.
BizTalk Administration Console Podstawowe narzędzie służące do zarządzania
silnikiem BizTalk Server. Informacje przydatne do monitorowania działania
wszystkich składników serwera. Konfiguracja i wdrażanie wszystkich elementów (tj.
m.in. procesy biznesowe, porty, powiązania pomiędzy portami i orkiestracjami oraz wymagane biblioteki DLL), np.: ustawianie adresu URL dla portu wykorzystującego adapter HTTP - Logika działania procesu jest niezależna od środowiska wykonywania.
Business Activity Monitoring Śledzenie informacji ważnych z punktu widzenia
użytkowników biznesowych. Orkiestracje muszą udostępniać odpowiednie dane i
zdarzenia (musi to być uwzględnione na etapie implementacji procesu).
Odpowiednio przygotowana orkiestracja w trakcie wykonywania, zapisuje dane w bazie danych (ang. tracking database),
Businnes Activity Monitoring może być wykorzystany do monitorowania zdarzeń nie tylko orkiestracji ale także dowolnych aplikacji stworzonych w oparciu o platformę .NET.
IBM WebSphere WebSphere Business Modeler:
graficzny edytor umożliwiający modelowanie PB możliwość przeprowadzenia symulacji stworzonego PB i jego
analizy za pomocą stworzonych wskaźników biznesowych. WebSphere Integration Developer
implementacja modelu PB. wykorzystanie wizualnych elementów, odpowiadających
elementom znanym z języka BPEL możliwość zaimplementowania maszyny stanów (ang. state
machine). WebSphere Process Server
serwer aplikacji oraz silnik odpowiedzialny za uruchamianie procesów biznesowych oparty o Enterprise Service Bus
wspiera dynamiczne modyfikowanie reguł biznesowych wykorzystywanych przez procesy.
WebSphere Business Monitor
Inne rozwiazania Jboss i Flux Oracle:
workflow package, WF_Engine wraz z Java API
Dziedziny zastosowań Szybka zmiennosc wymagań (np. plany taryfowe
oeratorów t. Komórkowych) Duże zindywidualizowanie wymagań – planowanie obsługi
klientów, sposobów przetwarzania danych itd. Powtarzalność definicji
.NET Framework 3.x
Workflow Foundation – pierwsze wydanie
.NET Framework 4.x Workflow Foundation – zupełnie
zmieniona implementacja
Windows Workflow Foundation Rodzaje przepływów
Proces sekwencyjnyProces stanowy
Aktywności Środowisko uruchomieniowe
Proces sekwencyjny Proces sekwencyjny składa się z punktu wejscia, punktu
wyjścia oraz kolejnych aktywności wykonywanych jedna po drugiej.
Klasa definiująca ten typ procesu dziedziczy po klasie SequentialWorkflowActivity.
Na przebieg wykonania procesu mają wpływ aktywności zmieniające przepływ procesu.
Przebieg procesu może zostać zmieniony w wyniku wystąpienia wyjątków, które mogą być przechwytywane na poziomie pojedynczej aktywności lub całego procesu.
Proces sekwencyjnyPrzykład
Aktywności kontrolujące przepływ
IfElseActivity IfElseBranchActivity
Aktywności kontrolujące przepływ
WhileActivity
Aktywności kontrolujące przepływ
SequenceActivity ParallelActivity
Proces stanowy Zaniechany w WF 4.0/ ponownie udostepniony w WF 4.5 Proces stanowy jest procesem, który można porównać
do skończonej maszyny stanowej. Składa się z specjalnych aktywności typu StateActivity, które reprezentują
stan procesu połączeń określających możliwe przejścia między stanami.
Spośród aktywności odpowiadających stanom można wyróżnić aktywność początkową oraz opcjonalną aktywność, która symbolizuje zakończenie procesu.
Proces stanowy jest realizowany jako klasa dziedzicząca po StateMachineWorkflowActivity.
Proces stanowy. Przykład
Środowisko uruchomienioweAplikacja
Środowisko uruchomieniowe
Usługi
Instancja procesu
WF4.0 Wszystko jest aktywnością
Workflow jest również aktywnością
Activity
CodeActivity
AsyncCodeActivity
NativeActivity
DynamicActivity
Dynamiczne aktywności WF4.0
<Activity x:Class=“Foo" > <x:Members> <x:Property Name="argument1“ Type="InArgument(x:String)" /> <x:Property Name="argument2” Type="InArgument(x:String)" /> </x:Members>
Foo.dll
C# (DynamicActivity)
Activity x = ActivityXamlServices.Load(xamlFile);WorkflowInvoker.Invoke(x, new Dictionary … );
Compile via XAML Build Task
Execute withDynamicActivity
Foo
WorkflowInvoker WF4.0
WorkflowInvoker.Invoke(new foo)
WorkflowApplication WF 4.0
var wa = new WorkflowApplication(new Foo)
FooFoo
Foo
wa.Run()wa.Persist()wa.Cancel()wa.ResumeBookmark()wa.Unload()
Otoczenie procesu WF4.0WorkflowServiceHost
FooFoo
Foo
HostWorkflowApplication
WF Persistence WF 4.0
Idle
wa.Persist()
Tracking Participant
Workflow EventsWorkflow Runtime
Scheduler
raises events
Tracking Provider
Application Host
Tracking Profileadd
notify
Tooling
Monitoring Data
Tworzenie WF WF jest aktywnością
może być napisany w postaci kodu lub zdefiniowany w XAML – lub dowolnym innym formacie (np w jęz. dynamicznym)
Aktywność może zawierać inne aktywności Aktywność może mieć argumenty we i wy (jak również zmienne) Aktywności zwracajace warość mają oddzielne klasy bazowe
n.p. CodeActivity<TResult>, NativeActivity<TResult> WF jest definicją, wg której można utworzyć wiele
instancji Każda instancja ma indywidualne środowisko (zmienne,
argumenty) InArgument
Wykonanie WF runtime „widzi” aktywności, aktywności,
aktywności (nie Sequence, Parallel, Recurrence) WF runtime jest „sędzią” pilnuje reguł CacheMetadata sposób auto-opisu aktywności
WF runtime „wie” o zakończeniu aktywności Aktywność może zlecić wykonanie aktywności
potomnej (i. ew. poczekać na jej zakończenie) Mozliwych jest wiele różnych działań (“pulses of work”)
dla jednej aktywności Możliwe jest wyrażenie dowolnych, złożonych
rodzajów przepływów (control flow) Możliwe jest wiele scieżek wykonania…
Scheduler
WorkItem 1WorkItem 2WorkItem 3WorkItem 4
WF Runtime
External Code
Activity Code
while !EmptyList Execute(next WorkItem)
Work items are executed one at a time within a
single workflow instance
POPSome work items are added to the front of the list,
others to the back
ADD
PUSH
ENQUEUE
while !EmptyList Execute(next WorkItem) DoBookkeeping()
while !EmptyList Execute(next WorkItem) DoBookkeeping()
PARALLEL
■
“1”
“2”
“3”
“4”
Parallel.Execute
SEQUENCE1
SEQUENCE2
Sequence1.ExecuteWrite(“1”).ExecuteSequence1.ContinueWrite(“2”).ExecuteSequence1.ContinueParallel.Continue
Sequence2.Execute
Sequence2.ExecuteWrite(“3”).ExecuteSequence2.ContinueWrite(“4”).ExecuteSequence2.ContinueParallel.Continue
[ scheduler example ]
Workflow Instance Complete!
Scheduler Jedna instancja Scheduler-a na proces Zarządza uporządkowana listą zadań
jednostkowych Zadania mogą być dodwane przez aktywności ale
również przez hosta lub zewnętrzny kod Niektóre zdania sa dodawane na poczatek inne na
koniec kolejki Wykonywane jest jedno zadnie na raz
Zadania nie sa przerywane Pomiędzy zadaniami mogą być realizowane różne
operacje np. tracking, persistence
Threading Model Dla pojedynczej instancji programu jest wykorzystywany
jeden wątek na raz Upraszcza model programowania aktywności Do poszczegolnych zadań mogą zostać przypisane rózne wątki
(jeden na raz)w ramach tej samej instancji WF runtime korzysta z dostarczonego przez hosta
SynchronizationContext System.Threading.SynchronizationContext Można wykorzystać dla utworzenia własnych mechanizmów zarzadzania
wątkami Nie mozna wykorzystać TLS dla WF
WF Execution Properties – nazwane własciwośc i widoczne dla poddrzewa WF
WF runetime odpowiada za dołączanie / odłaczanie środowiska brzed/po wykonaniu zadania
Aktywności nie powinny blokować wątku WF programs coordinate work
Asynchroniczne Aktywności
WF Runtime
AsyncActivity I/O code
BeginExecute BeginWrite
EndExecute EndWrite
AsyncWorkCompletionCallback
WorkItem
WorkItem
WorkItemWorkItemWorkItem
Parallel + asynchroniczne a. = równoległość
Parallel p = new Parallel{ Branches = { new WriteToFile { FileName = "a", Bytes = … }, new WriteToFile { FileName = "b", Bytes = … } }};WorkflowInvoker.Invoke(p);
Bookmarks Co się dzieje gdy program musi czekać (i czekac
i czekać) na wejście? Być może czeka również 1000 innych instancji
Potrzebny nieobciążajacy systemu WaitForInput() Zakładka!
Nazwany punkt wznowienia w WF Wznowienie wskazuje metodę zwrotną aktywności WF runtime zarządza wznowieniem – instancja nie
musi być w pamięci Gotowa do użycia aktywność WCF Receive
Bookmark Resumption
“pizza”
“Please deliver [data] to instance [id] at bookmark
[name]”
WF Runtime
External Code
Activity Code RESUME
CREATE
Work item 1Work item 2Work item 3Work item 4
ENQUEUE
Persystencja Persystencja pozwala wstrzymywać instancję WF,
zapisać ją „gdzieś” i wznowić później Zachowana instancja nie jest związana z konkretnym WF hostem,
komputerem, CLR, wątkiem czy procesem Zalety skalowalność, odporność na upadki
Instancje WF są serializowalne Stos CLR nie jest serializowalny, ale instancja WF ma stos tylko w
trakcie wykonania pojedynczego zadania Czasem nie chcemy możliwości persystencji - “no persist
zone” Automatyczne założenie podczas asynchronicznych aktywności
Szczegóły implementacji persystencji są niezależne od silnika WF
Co jest w utrwalonej instancji Zserializowana instancja zawiera:
Listę zadań (pustą jeśli instyancja jest wolna) Bookmark-i Dane (argumenty and zmienne)
Środowisko dla wszystkich aktualnie wykonywanych aktywności
Informacje o instancji (callbacks, execution props) Dodatkowe dane od uczestników procesu persystencji
Nie zawiera definicji WF Milion instancji może współdzielic tą samą definicję Zarządzanie definicjami leży w gestii hosta
[ Przykład: zserializowana instancja WF ]
PARALLEL
■
DateTime dint n
string s
private int index private int index
[ Przykład: zserializowana instancja WF ]
PARALLEL
■
INPUT
DateTime dint n
string s
private int index private int index
“hello”
3
Bookmark:“x”
Aktywności kontrolujące przepływ Definiują sposób wykonania dla złożonych
aktywności Dowolna aktywność może być rdzeniem Aktywności można zagłębiać
Activity 1
Activity 2
Activity 3
A
B
C
D
Parallel
Activity 4
Activity 1
Activity 2
Activity 3
Delay (TimeOut)Approve
Action A
Reject
Action B
PickBranch PickBranch PickBranch
Action C
Przegląd aktywności
Assign Compensate Persist ReceiveMessage SendMessage
Throw TryCatch
Flowchart
DoWhile While ForEach
If Pick Switch
Sequence Parallel
Przepływ sekwencyjn
Przepływ typu Workflow
Rrozszerzanie WF Tworzy mechanizm pozwalający
wstrzykiwać zewnętrzną logike w predefiniowane miejsca głównego WF
WF są rozszerzane w naturalny sposób przez kolejne WF
Process Order
Receive Order
Reserve Inventory
Ship Order
Approval Payment
Tworzenie i uruchamianie WF
Tworzenie WF:new MyVeryImportantWorkflow()ActivityXamlServices.Load(“MyVeryImportant
Workflow.xaml") Uruchamianie WF:
WorkflowInvoker.Invoke(wf);WorkflowApplication app =
new WorkflowApplication(a); app.Run();
Hierarchia aktywności WF
AsyncCodeActivity
Activity
CodeActivity
Activity<TResult>
NativeActivity
NativeActivity
<Tresult>
CodeActivity
<TResult>
AsyncCodeActivity
<TResult>
Aktywność WF
Należy przeciążyć Execute
public class SayHelloInCode : CodeActivity { protected override void Execute(CodeActivityContext context) { Console.WriteLine("Hello Workflow 4 in code"); } }
Asynchroniczna Aktywność WF
Należy przeciążyć BeginExecute i EndExecute
public class SayHelloInAsyncWay : AsyncCodeActivity { protected override IAsyncResult BeginExecute(
AsyncCodeActivityContext context, AsyncCallback callback, object state)
{ ... return stream.BeginWrite(bytes,0,bytes.Length,callback,state); } protected override void EndExecute(AsyncCodeActivityContext context,
IAsyncResult result) { ... FileStream stream = (FileStream)context.UserState; stream.EndWrite(result); }}
Zakładki WF
Bookmark wskazuje na f. aktywności
public class ReadLine : NativeActivity<string>{ protected override void Execute(NativeActivityContext context) { context.CreateBookmark("ReadLine",
new BookmarkCallback(BookmarkResumed)); } private void BookmarkResumed(NativeActivityContext context, Bookmark bk, object state) { Result.Set(context, state); }}
Aktywacja zakładki
WorkflowApplication app = newWorkflowApplication(MyWorkflow);
app.Run();app.ResumeBookmark(" ReadLine", "... something ...");
Hostowanie WF
Dedykowany proces Workflow services Windows Application Server (codename
„Dublin”) + IIS
WorkflowService
Windows Application Service
ASP.NET vs WorkflowService
ASP.NET vs WorkflowServices / Dublin
WF Service – data kontrakt
[DataContract]public class ExpenseReport{ [DataMember] public DateTime FirstDateOfTravel { get; set; } [DataMember] public double TotalAmount { get; set; } [DataMember] public string EmployeeName { get; set; }}
WF Service - Konfiguracja aktyw.
WF Service - podgląd serwisu
WF Service - host
WorkflowServiceHost host = new WorkflowServiceHost(XamlServices.Load("ExpenseReportService.xamlx"),new Uri("http://localhost:9897/Services/Expense") );
host.AddDefaultEndpoints();host.Description.Behaviors.Add(
new ServiceMetadataBehavior { HttpGetEnabled = true });
//dodatkowy end pointWorkflowControlEndpoint wce = new WorkflowControlEndpoint(
new NetNamedPipeBinding(),new EndpointAddress("net.pipe://localhost/Expense/WCE"));
host.Open();Console.WriteLine("Host is open");Console.ReadLine();
Persystencja - baza
Przygotowanie bazy 1. %windir%\Microsoft.NET\Framework\
v4.0.21006\sql\<language> 2. SqlWorkflowInstanceStoreSchema.sql 3. SqlWorkflowInstanceStoreLogic.sql
Persystencja – konfiguracja providera
WorkflowApplication application = new WorkflowApplication(activity);InstanceStore instanceStore = new SqlWorkflowInstanceStore( @"Data Source=.\SQLEXPRESS;Integrated Security=True");InstanceView view = instanceStore.Execute( instanceStore.CreateInstanceHandle(),
new CreateWorkflowOwnerCommand(),TimeSpan.FromSeconds(30));
instanceStore.DefaultInstanceOwner = view.InstanceOwner;application.InstanceStore = instanceStore;
Persystencja
WorkflowApplication application = new WorkflowApplication(activity);InstanceStore instanceStore = new SqlWorkflowInstanceStore( @"Data Source=.\SQLEXPRESS;Integrated Security=True");InstanceView view = instanceStore.Execute( instanceStore.CreateInstanceHandle(),
new CreateWorkflowOwnerCommand(),TimeSpan.FromSeconds(30));
instanceStore.DefaultInstanceOwner = view.InstanceOwner;application.InstanceStore = instanceStore;
wf.PersistableIdle = (waie) => PersistableIdleAction.Persist
Konfiguracja providera
Wymuszanie utrwalania workflow-u
WF Tracking
Po zakończeniu WF jest likwidowany – oczywiscie można zareagować na odpowiednie zdarzenie ...
Tracking:TrackingParticipant (standardowo dostępny
EtwTrackingParticipant ETW = Enterprise Trace for Windows ))
TrackingProfile
Tracking profile ActivityStateQuery WorkflowInstanceQuery CustomTrackingQuery TrackingProfile profile = new TrackingProfile
{ Name = "SimpleProfile", Queries = { new WorkflowInstanceQuery { States = { "*" } }, new ActivityStateQuery { ActivityName = "WriteLine", States={ "*" }, Variables = {"Text" } } }};
Activity Designer Kontrolki WPF:
ActivityDesigner WorkflowItemPresenter WorkflowItemsPresenter ExpressionTextBox
WF: Model programowy
Activity wf = new Sequence { Activities = {
new WriteLine { Text = "Hello" }, new WriteLine { Text = "World." }
} }; WorkflowInvoker.Invoke(wf);
WF: ZmienneSequence wf = new Sequence {
Variables = {new Variable<string>{ Default = "Hello", Name =
"greeting"},new Variable<string> { Default = "Bill", Name = "name" }
},Activities = { new WriteLine {
Text = new VisualBasicValue<string>("greeting“) }, new WriteLine {
Text = new VisualBasicValue<string>("name + \"Gates\"")} }}
};WorkflowInvoker.Invoke(wf);
WF: Przekazywanie parametrówIDictionary<string, object> results = WorkflowInvoker.Invoke(wf,
new Dictionary<string,object> { {"name", "Bill" } }
);
string outValue = results["fullGreeting"].ToString();
WF: Przekazywanie parametrówIDictionary<string, object> results = WorkflowInvoker.Invoke(wf,
new Dictionary<string,object> { {"name", "Bill" } }
);
string outValue = results["fullGreeting"].ToString();
//{…// public InArgument<string> Name {get; set;}
//