procesy biznesowe

Post on 25-Feb-2016

57 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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 Presentation

TRANSCRIPT

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;}

//

top related