Transcript Document

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
Zgłoszenie
zapotrzebowania
Dostępne zasoby
Brak wolnych zasobów
Zamówienie
zasobów
Rezerwacja
zasobów
Pobranie
zasobów



Model vs. instancja
Aktywność
Środowisko uruchomieniowe
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:
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.
 Punkty
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:



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



graficzny edytor umożliwiający modelowanie PB
możliwość przeprowadzenia symulacji stworzonego PB i jego
analizy za pomocą stworzonych wskaźników biznesowych.
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
sekwencyjny
 Proces 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 sekwencyjny
Przykł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 uruchomieniowe
Aplikacja
Instancja procesu
Środowisko uruchomieniowe
Usługi
WF4.0 Wszystko jest aktywnością
CodeActivity

Workflow jest również
aktywnością
AsyncCodeActivity
Activity
NativeActivity
DynamicActivity
Dynamiczne aktywności WF4.0
Foo.dll
<Activity x:Class=“Foo" >
<x:Members>
<x:Property Name="argument1“
Type="InArgument(x:String)" />
<x:Property Name="argument2”
Type="InArgument(x:String)" />
</x:Members>
C# (DynamicActivity)
Activity x =
ActivityXamlServices.Load(xamlFile);
WorkflowInvoker.Invoke(x, new Dictionary … );
WorkflowInvoker WF4.0
Foo
WorkflowInvoker.Invoke(new foo)
WorkflowApplication WF 4.0
Foo
Foo
Foo
var wa = new
WorkflowApplication(new Foo)
wa.Unload()
wa.Run()
Otoczenie procesu
WF4.0
Foo
Foo
Foo
WF Persistence
WF 4.0
Workflow Events
Workflow Runtime
Tooling
Tracking Provider
add
Tracking Profile
notify
Tracking Participant
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)
runtime jest „sędzią” pilnuje reguł
 CacheMetadata sposób auto-opisu aktywności
 WF


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
Work items are executed
one at a time within a
single workflow instance
while !EmptyList
Execute(next WorkItem)
DoBookkeeping()
Some work items
are added to the
front of the list,
others to the back
PARALLEL
SEQUENCE
1
SEQUENCE
2
■
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



Nie mozna wykorzystać TLS dla WF



System.Threading.SynchronizationContext
Można wykorzystać dla utworzenia własnych mechanizmów zarzadzania
wątkami
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
Parallel + asynchroniczne a. = równoległość
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
“Please deliver
[data] to instance
[id] at bookmark
[name]”
Persystencja

Persystencja pozwala wstrzymywać instancję WF,
zapisać ją „gdzieś” i wznowić później



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”


Zachowana instancja nie jest związana z konkretnym WF hostem,
komputerem, CLR, wątkiem czy procesem
Zalety skalowalność, odporność na upadki
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
private int index
private int index
string s
DateTime d
int n
■
[ Przykład: zserializowana instancja WF ]
PARALLEL
private int index
3
string s
“hello”
private int index
DateTime d
int n
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ć

Parallel
Activity 1
B
C
Activity 3
Activity 1
Activity 2
Activity 3
Activity 4
PickBranch
PickBranch
PickBranch
Approve
Reject
Delay
(TimeOut)
Action A
Action B
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

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
Activity
AsyncCode
Activity
Code
Activity
AsyncCode
Activity
<TResult>
Activity
<TResult>
Code
Activity
<TResult>
Native
Activity
Native
Activity
<Tresult>
Aktywność WF
public class SayHelloInCode : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
Console.WriteLine("Hello Workflow 4 in code");
}
}

Należy przeciążyć Execute
Asynchroniczna Aktywność WF
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);
}
}

Należy przeciążyć BeginExecute i EndExecute
Zakładki WF
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);
}
}

Bookmark wskazuje na f. aktywności
Aktywacja zakładki
WorkflowApplication app = new
WorkflowApplication(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 point
WorkflowControlEndpoint 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
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;
Wymuszanie utrwalania workflow-u
wf.PersistableIdle = (waie) => PersistableIdleAction.Persist
WF Tracking
Po zakończeniu WF jest likwidowany –
oczywiscie można zareagować na
odpowiednie zdarzenie ...
 Tracking:

(standardowo dostępny
EtwTrackingParticipant ETW = Enterprise
Trace for Windows ))
 TrackingProfile
 TrackingParticipant
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: Zmienne
Sequence 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ów
IDictionary<string, object> results = WorkflowInvoker.Invoke(wf,
new Dictionary<string,object> {
{"name", "Bill" } }
);
string outValue = results["fullGreeting"].ToString();
WF: Przekazywanie parametrów
IDictionary<string, object> results = WorkflowInvoker.Invoke(wf,
new Dictionary<string,object> {
{"name", "Bill" } }
);
string outValue = results["fullGreeting"].ToString();
//{…
// public InArgument<string> Name {get; set;}
//