Transparentní modelování a provádění procesů Michael Juřek Software Architect Microsoft s.r.o.
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
Proč modelovat procesy? Produktivita vývojáře Model je pohodlná abstrakce pro popis problémů reálného světa Řešení technologických problémů: Procesy běží často dlouho a musí si uchovávat stav Procesy vyžadují flexibilní kontrolu toku Procesy by měly být transparentní Definice procesu by měla být snadno rozšiřitelná
Uchování stavu Některé procesy běží zlomky sekund (výpočet slevy) jiné dny či týdny (zpracování objednávky) Uchování stavu na aplikační úrovni je neustále se opakující úlohou Uchování musí být robustní (restart aplikace, počítače,...) „Objednávka je potvrzena do 48 hodin a vyřízena do 30 dnů“
Flexibilita Některé procesní prvky mají přímočarou reprezentaci v klasických programovacích jazycích PodmínkaSmyčka Jiné se vytvářejí složitě nebo obtížně: Paralelní provedení Reakce na externí událost Neplánované zopakování akce Stavový stroj Nepředvídatelné pořadí akcí „Většina dodavatelů potvrdí objednávku, ale někteří zapomenou, a je třeba to řešit“ „Většina dodavatelů potvrdí objednávku, ale někteří zapomenou, a je třeba to řešit“
Transparentnost Kód není přirozeným způsobem zápisu pro definici procesu Transformace z kódu do procesu je jednosměrná, nevratná Kód a proces nejsou synchronizovány Intuitivně tíhneme k vizuální definici procesu (Visio, tabule, stavový diagram, vývojový diagram,...) „Jaký je stav objednávky a jaké jsou další kroky?“
Rozšiřitelnost Proces by mělo být možné skládat z libovolných bloků, např. Základní konstrukce pro řízení toku Vlastní elementární kroky Vertikálně nebo aplikačně specializované kroky (CRM,...) Opakovatelné a znovupoužitelné fragmenty procesů (podprocesy) „Zde ještě potřebujeme jedním krokem provést zápis do CRM systému“
Kdy použít workflow? ANO pokud: Kód má velkou pravděpodobnost změny Kód obsahuje komplexní logiku Kód je různý v různých instancích aplikace (opakovatelná řešení) NE pokud: Kód je přímočarý a snadno čitelný Výkonnostně kritická sekce Nižší úrovně aplikace (Data Access,...)
Proč Workflow Foundation? Jednotná workflow technologie Dostupná všem zákazníkům jako součást platformy, součást „hlavního proudu“ Vhodná pro všechny scénáře Používána dalšími Microsoft produkty, např. pro workflow v Office 2007 a WSS 3.0 Rozšiřitelný framework a API pro vytváření vlastních řešení Relativně snadný přechod pro vývojáře na.NET platformě
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
Co je to workflow? Soubor aktivit koordinujících lidské nebo softwarové účastníky InformujNadrizeneho Například: ZkontrolujDostupnost... jako vývojový diagram … v nějaké formě určující tok provádění... jako stavový diagram
If Amount > And _ User.IsInRole(“Manager”) Then … ElseIf Amount > 1000 And _ User.IsInRole(“AsstMgr”) Then … Else … End If Rule 1 Rule 2 Pravidla (podmínky)
If Amount > And _ User.IsInRole(“Manager”) Then … ElseIf Amount > 1000 And _ User.IsInRole(“AsstMgr”) Then … Else … End If Rule 1 Rule 2 Aktivity
If Amount > And _ User.IsInRole(“Manager”) Then … ElseIf Amount > 1000 And _ User.IsInRole(“AsstMgr”) Then … Else … End If Rule 1 Rule 2 Workflow
Workflow Foundation Základní koncepce: Host Process Workflow Foundation Runtime Engine Workflow Activity Runtime Services Base Activity Library Custom Activity Library Visual Designer Visual Designer: Vytváření workflow grafickým modelováním a/nebo v kódu Workflow je soubor aktivit Workflow běží uvnitř nějakého hostitele (aplikace nebo služby) Vývojáři mohou vytvářet vlastní knihovny aktivit Komponenty: Base Activity Library: Základní aktivity, základ pro tvorbu vlastních Runtime Engine: Provádění workflow Runtime Services: Hostování, infrastruktura, komunikace
Workflow může být zapsáno v C# / VB.NET a/nebo jako XML (formát XAML) using System.Workflow.Activities; public class MyWorkflow : SequentialWorkflow { … } <SequentialWorkflowActivity x:Class="WorkflowConsoleApplication1.Workflow2" x:Name="Workflow2„ xmlns:x=„ xmlns=" Co je to workflow?
Způsoby vytváření workflow Kompilátor C#/VB Pouze deklarativně XML definuje strukturu logiky workflow a tok dat XAML Pouze kód Workflow vytváří svou strukturu (strom aktivit) v konstruktoru C#/VB Deklarativně + kód XML definuje workflow, kód (Code-beside) určuje dodatečnou logiku XAMLC#/VB Generování v aplikaci XAML C#/VB Vytvoření stromu aktivit a serializace Kompilátor workflow wfc.exe Standardní.NET assembly Workflow Runtime Workflow Loader
Co je to aktivita? Aktivita je jeden krok v provádění workflow Má vlastnosti a události, ke kterým můžete přistupovat z kódu Má metody (např. Execute), které volá workflow runtime (vy byste je volat neměli) Analogie s Form / Control ve WinForms Activity / Control Workflow / Form Workflow dědí z Activity / Form dědí z Control Dvě základní kategorie Basic – „dělají skutečnou práci“ Composite – spravují sadu jiných aktivit
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
Krok 1: Vyberte vhodný model workflow Sekvenční (vývojový diagram) Sekvenční provádění kroků Očekávaná hlavní cesta průběhu Formální, preskriptivní Stavový stroj Reaktivní, řízený externími událostmi Častá interakce s lidskou obsluhou Mnoho variant cest průběhu Nečekaná ad-hoc zauzlení: Přeskočení, opakování kroku
Stavový stroj Stavový stroj se skládá z množiny stavů V každém stavu může být přijata sada událostí Na základě obdržené události je provedena akce V rámci akce může dojít k přechodu do jiného stavu S1 S2 S3 S4 S5
Krok 2: Seznamte se se všemi základními aktivitami Kontrola toku: IfElse, Delay, While, Parallel, Suspend,... Komunikace InvokeWebService, HandleExternalEvent, CallExternalMethod,... Obsluha chyb a transakcí Throw, Compensate,... Pokročilá práce s pravidly: ConditionedActivityGroup, Policy, Replicator
Krok 3: Navrhněte vlastní elementární aktivity Aktivity jsou standardní.NET třídy Lze je odvodit buď ze základní abstraktní třídy Activity anebo z existující konkrétní třídy Mají vlastnosti a události, které definuje autor aktivity, jsou přístupné v rámci běžícího workflow Autor aktivity přepisuje metody abstraktních předků – zejména Execute(), tyto jsou volány z workflow runtime (nelze z hostitele) Mohou být součástí workflow assembly anebo mohou fungovat jako knihovny aktivit pro opakované použití
Serializer Code Generator Designer ToolboxItem [Designer(typeof(MyDesigner))] [Validator(typeof(MyValidator))] [CodeGenerator(typeof(MyCodeGen))] [Serializer(typeof(MySerializer))] [ToolboxItem(typeof(MyToolboxItem))] Validator [ SupportsTransaction] [SupportsExceptionHandlers] public class MyActivity: Activity {... } Doprovodné třídy: Transactions Chování: Aktivity – metadata
DependencyProperty Veškeré stavové vlastnosti aktivity je vhodné uchovávat pomocí systému DependencyProperty: Slouží jako statický klíč pro získání hodnoty, které jsou pro každou instanci uloženy v interní HashTable třídě Navenek zabalena do klasické.NET vlastnosti pro pohodlný programový přístup Umožňuje efektivnější práci při návrhu a fungování za běhu Práce s designérem ve Visual Studiu Automatická notifikace o změně vlastnosti Serializace (zejména pro účely persistence) Data binding Validace
Krok 4: Identifikujte znovupoužitelné vzory Kompozitní aktivita = „podproces“ Aktivity, jež obsahují anebo mohou obsahovat vnořené aktivity Odvozené ze třídy CompositeActivity Workflow je samo též kompozitní aktivita Používá se „grey box“ model Obsah vložené kompozitní aktivity lze vidět, ale nelze jej měnit Výjimkou jsou vlastnosti přístupné přes Property Promotion
Property Promotion Důležitá pro kompozitní aktivity „Děti“ libovolně hluboko v kompozitní aktivitě mohou zpřístupnit své události a vlastnosti: Umožňují konzumentovi kompozitní aktivity ovlivňovat její chování, aniž by znal její vnitřní logiku Podpora i při návrhu ve Visual Studiu Využívá DependencyProperty
Krok 5: Sestavte workflow Můžete použít různé stavební kameny: Základní aktivity Vaše elementární aktivity Kompozitní aktivity Aktivity třetích stran Podpora pro data binding mezi aktivitami Dialog pro vytvoření v designéru Automatický přenos hodnot za běhu DependencyProperty
Obsluha výjimek Silná analogie s try/catch konceptem Vznik výjimky: Chybou v code-behind anebo volaném kódu Explicitním použitím aktivity Throw Ošetření výjimky: Kompozitní aktivity mohou mít jeden a více tzv. Fault Handlers Určují posloupnost aktivit prováděných při zachycení specifikované výjimky Výjimka probublává nahoru stromem aktivity a může být ošetřena výše Není-li výjimka ošetřena, WF runtime ukončí provádění instance a vyvolá příslušnou událost
Transakce a kompenzace Hranice ACID transakce určuje aktivita TransactionScope Jsou-li transakce nebo jiné operace již dokončeny a poté dojde k chybě, je možnost provést kompenzující akce (stornovat fakturu, zrušit objednávku apod.) Aktivity CompensatableTransactionScope/Sequence může mít tzv. CompensationHandler, který je volán v případě neošetřené chyby vzniklé po dokončení aktivity Je-li více kompenzovatelných akcí, jsou kompenzace volány v opačném pořadí než byly prováděny aktivity Při ošetření chyby nebo zrušení aktivy lze použít aktivitu Compensate pro jiné chování
Vytvoření workflow Vlastní elementární aktivita Kompozitní aktivita Sestavení workflow
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
Podmínky v aktivitách Řada aktivit vyžaduje pro své fungování vyhodnocení podmínky: IfElse, While, Replicator, CAG,... Dvě možnosti realizace podmínky: Code Condition – odkaz na delegáta: public void Podminka(object sender, ConditionalEventArgs e) { e.Result = (...doplň výraz vracející boolean...); } Declarative Rule Condition Odkaz na deklarativně vyjádřenou podmínku v XML souboru.rules
Proč oddělit pravidla? Pravidla = složitá rozhodovací logika Modelování místo kódování Transparentnost Velká pravděpodobnost změny v čase Snadnost změny Ideální je možnost změny pravidel bez rekompilace workflow: Základní WF implementace neobsahuje External Ruleset Toolkit – vzorový kód
Terminologie Podmínka (Condition) Výraz, který se vyhodnotí jako True/False Pravidlo (Rule) Modelováno jako: IF IF THEN THEN ELSE ELSE Soubor pravidel (RuleSet) Soubor pravidel spolu s nastavením parametrů provádění Politika (Policy) – aktivita spouštějící soubor pravidel
Algoritmus provádění Vybere se soubor pravidel, jejichž podmínky jsou splněny Začnou se provádět podle klesající nastavené priority Chaining – znovuzařazení pravidla: Implicitní - pokud pravidlo změní platnost podmínky jiného pravidla Explicitní - pokud pravidlo volá příkaz Update Kontrola: Příkaz Halt (zastaví další provádění) RuleSet Chaining Behavior Full (výchozí), Explicit Update only, None Rule Reevaluation Behavior Always (výchozí), Never
Amount = $25 Total = $80 Discount = 10% Pravidlo 1 (P0) If Total > $50 & $50 & < $100 Then Discount = 10% Pravidlo 2 (P0) If Total >= $100 Then Discount = 15% Pravidlo 3 (P0) If Amount > $0 Then Total = Total + Amount Forward Chaining - příklad Pravidlo 1 Pravidlo 3 Pravidlo 2 Pořadí provádění $105 Sada Pravidel 15%
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
3 snadné kroky Vytvořit instanci workflow runtime Vytvořit instanci workflow Spustit workflow private void StartMyWorkflow() { WorkflowRuntime wr = new WorkflowRuntime(); WorkflowInstance instance = wr.CreateWorkflow(typeof(MyWorkflow)); instance.Start(); } Hostování WF v aplikaci
Infrastrukturní služby Host Application App Domain K dispozici jsou implementace pro MS SQL Server SchedulerService (1) „dodává“ workflow vlákna k provádění a stará se o časovače PersistenceService (0-1) slouží k uložení stavu workflow TrackingService (0-n) sbírá informace o průběhu a spravuje profily určující co se ukládá Runtime Services PersistenceService TrackingService SchedulerService CommitWorkBatchService CommitWorkBatchService (1) „dodává“ workflow transakce
„Dodává“ workflow potřebná vlákna kódu a spravuje časovače Dvě implementace ve WF: Asynchronní (Default) WF běží na vláknu dodaném ze ThreadPool Vhodné pro stavové aplikace (WinForms, Win32 služba apod.) Synchronní (Manual) WF běží na vláknu, jež ho spustilo Vhodné pro bezstavové aplikace (ASP.NET) Vytváření vlastní implementace je silně nepravděpodobné SchedulerService
Podpora synchronizace zdrojů mezi hostitelem, workflow runtime a aktivitami pomocí ACID transakcí Dvě implementace ve WF: 2-fázové distribuované transakce (Default) – MS DTC 1-fázové databázové transakce (SharedConnection) O něco rychlejší, nevyžaduje MS DTC, ale může pracovat pouze s jedinou databázovou instancí Transakčnost se nastavuje atributem na úrovni aktivity, transakce je pak sdílena všemi aktivitami vnořenými do aktivity TransactionScope Workflow se nemůže připojit k transakci vytvořené hostitelem, naopak to možné je (hostitel implementuje IPendingWork) Vytváření vlastní implementace je silně nepravděpodobné CommitWorkBatchService
Zajišťuje průběžné ukládání stavu workflow do trvalého úložiště Umožňuje obnovení běhu po restartu Podmínka pro práci ve farmě serverů Implementace ve WF pro SQL 2000/2005 Skript pro vytvoření tabulek je v instalaci WF Vytvoření vlastní implementace je možné, chcete-li trvalé workflow bez závislosti na MS SQL (souborový systém, jiná databáze, apod.) PersistenceService
Dostává informace o průběhu workflow a provádění aktivit Scénáře: logování, monitorování, auditing,... Implementace ve WF pro SQL 2000/2005 Skript pro vytvoření tabulek je v instalaci WF API pro dotazování do dat Vytvoření vlastní implementace bude poměrně časté Odvoďte třídu z TrackingChannel Odvoďte třídu z TrackingService Volitelně implementujte IProfileNotification TrackingService
ExternalDataExchangeService Slouží ke komunikaci mezi workflow a hostitelem Lze k ní přidat libovolnou službu (třídu) implementující rozhraní s atributem [ExternalDataExchange] Workflow může nepřímo volat metody hostitele, opačně nelze Hostitel vyvolává události, na které workflow může čekat Aktivity CallExternalMethod a HandleExternalEvent
Infrastrukturní služby SqlWorkflowPersistenceServiceSqlTrackingService
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
Uživatelské rozhraní workflow WF samo o sobě nezná pojem uživatelského rozhraní, vše je na vás Microsoft nabízí přirozené řešení: Automatizace „lidských“ procesů připojením workflow a obchodní logiky k dokumentům nebo položkám seznamů Windows SharePoint Services 3.0 (WSS 3.0) s udržováním kontextu a historie Office aplikace (zejména Word, Excel, InfoPath) mohou sloužit jako klientské aplikace Office SharePoint Server 2007 nabízí některá hotová řešení
Windows Server 2003 Windows SharePoint Services Site 1Site 2… Web Browser Internet Information Services Site N Microsoft Office Knihovna dokumentů 1 List 1 Item A Item B Item C... List N Item A Item B Item C... Knihovna dokumentů N... SQL Server WSS 3.0
Windows Server 2003 Windows SharePoint Services Site 1Site 2…Site N SQL Server WF Runtime Engine Internet Information Services Instance workflow List Item A Item B Item C... Asociace Šablony workflow Knihovna dokumentů Workflow ve WSS 3.0
Windows SharePoint Services Site Šablona workflow Knihovna dokumentů Iniciátor workflow Task List Approve... 4) Přidání úlohy do seznamu 1) Vytvoření dokumentu a asociace s workflow Instance workflow 2) Vytvoření instance workflow 3) Úprava a spuštění instance workflow 5) Kontrola seznamu 6) Dokončení workflow Příklad workflow ve WSS 3.0
Práce s workflow ve WSS 3.0 Workflow hostované ve WSS vytváří úlohy v seznamu úloh pro uživatele Uživatel používá pro přístup k seznamu prohlížeč anebo Outlook 2007 WSS přidává sadu aktivit, např.: CreateTask : přidání nové úlohy OnTaskChanged : informuje workflow o změně ve stavu úlohy Návrh workflow: Vývojáři – Visual Studio s WF designérem Pokročilý uživatel – Office SharePoint Designer
VS Workflow Designer
Office SharePoint Designer
Agenda Proč modelovat procesy? Základní pojmy Modelování procesů pomocí WF Abstrakce obchodních pravidel Hostování WF Kde je uživatelské rozhraní? Různé, co dále,...
WF a BPEL BPEL Business Process Execution Language Standard pro přenos definice procesu, primárně ne provádění Dosud není vyzrálý, relativně omezená funkčnost WF má mnohem širší funkčnost Připravuje se soubor BPEL aktivit, který omezí funkčnost WF tak, aby byl možný export/import BPEL z/do WF
WF vs. BizTalk Server Messaging Desig n Tools BusinessActivityMonitorAndAdminTools Orchestration Transformation Adapters BizTalk Server Accelerators Plnohodnotný procesní server: Pro workflow mezi aplikacemi Scénáře BPM, B2B, EAI Konfigurace, administrace Robustnost, škálovatelnost Workflow Budoucí verze bude používat pro řízení procesu WF.NET Framework 3.0 Visual Studio Designer Windows Workflow Foundation Workflow Foundation Součást.NET framework 3.0 Framework k vytváření řešení Scénáře: workflow v rámci aplikace
Budoucí směřování WF Projekt „Silver“ Add-on do Visual Studia pro generování WF aktivit z popisu WCF endpointů a zpřístupnění WF jako WCF endpointy Modelování kompozice služeb pomocí WF Pravděpodobně jako CTP a poté ve Visual Studiu „Orcas“ „Page workflow“ Řízení toku ASP.NET stránek pomocí WF Podobná technologie i pro desktopové aplikace Nástupce UIP aplikačního bloku Buď v ASP.NET „Orcas“ anebo jako samostatně stažitelný doplněk
Další zdroje k WF MSDN® Workflow centrum Ke stažení:.NET Framework 3.0 Extenze do Visual Studia 10 praktických cvičení 2 webcasty v češtině Komunity Vzorový kód, nástroje, komponenty
Závěrem - proč WF? Zvyšuje produktivitu vývojáře Řeší technologické problémy Nabízí transparentní procesy Jednotná workflow technologie zdarma pro Windows XP a vyšší Vhodná pro široké spektrum scénářů Kompletně rozšiřitelné API pro vytváření vlastních řešení
© 2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.