Workflow Foundation Základy a architektura Michael Juřek Software Architect Microsoft s.r.o.
Agenda Proč Workflow Foundation? Základní pojmy Hostování workflow Vlastní workflow aktivity Různé
Není kód jako kód... Každý blok kódu má jinou pravděpodobnost změny Faktoriál vs. výpočet daně z příjmu Transformace od definice procesu ke kódu je jednosměrná, nevratná, neopakovatelná Jak „pochopit“ proces z kódu? Jak snadno upravit kód, když se změní proces? Jak držet definici procesu i kód v souladu?
Proč workflow? Produktivita vývojáře Řešení technologických problémů: Workflow 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í
Proč Workflow Foundation? Jednotná workflow technologie Dostupná všem zákazníkům jako součást platformy 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č Workflow Foundation? Základní pojmy Hostování workflow Vlastní workflow aktivity Různé
Workflow Foundation Základní koncepce: Komponenty: Workflow Activity Visual Designer Základní koncepce: Workflow je soubor aktivit Workflow Workflow běží uvnitř nějakého hostitele (aplikace nebo služby) Vývojáři mohou vytvářet vlastní knihovny aktivit Activity Custom Activity Library Komponenty: Workflow Foundation Base Activity Library: Základní aktivity, základ pro tvorbu vlastních Base Activity Library Runtime Engine: Provádění workflow Runtime Engine Runtime Services: Hostování, infrastruktura, komunikace Runtime Services Visual Designer: Vytváření workflow grafickým modelováním a/nebo v kódu Host Process
ZkontrolujDostupnost Co je to workflow? Soubor aktivit koordinujících lidské nebo softwarové účastníky Například: InformujNadrizeneho ZkontrolujDostupnost … v nějaké formě určující tok provádění ... jako vývojový diagram ... jako stavový diagram
Co je to workflow? Workflow může být zapsáno v C# / VB.NET... using System.Workflow.Activities; public class MyWorkflow : SequentialWorkflow { … } ... a/nebo jako XML (formát XAML) <SequentialWorkflowActivity x:Class="WorkflowConsoleApplication1.Workflow2" x:Name="Workflow2„ xmlns:x=„http://schemas.microsoft.com/winfx/2006/xaml“ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> <CodeActivity x:Name="codeActivity1" /> </SequentialWorkflowActivity>
Způsoby vytváření workflow Pouze deklarativně XML definuje strukturu logiky workflow a tok dat XAML Deklarativně + kód XML definuje workflow, kód (Code-beside) určuje dodatečnou logiku XAML C#/VB Pouze kód Workflow vytváří svou strukturu (strom aktivit) v konstruktoru C#/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 Kompilátor C#/VB
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
Base Activity Library WF obsahuje sadu základních aktivit: Kontrola toku: IfElse, Delay, While, ... Komunikace InvokeWebService, CallExternalMethod, ... Vytvořeny stejným postupem a proti stejným API, jaká používají vývojáři pro vývoj svých aktivit
Hello world Moje první workflow aplikace
Agenda Proč Workflow Foundation? Základní pojmy Hostování workflow Vlastní workflow aktivity Různé
Hostování WF v aplikaci 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(); }
Infrastrukturní služby Host Application App Domain PersistenceService (0-1) slouží k uložení stavu workflow Runtime K dispozici jsou implementace pro MS SQL Server Services TrackingService (0-n) sbírá informace o průběhu a spravuje profily určující co se ukládá PersistenceService TrackingService SchedulerService (1) „dodává“ workflow vlákna k provádění a stará se o časovače SchedulerService CommitWorkBatchService CommitWorkBatchService (1) „dodává“ workflow transakce
Nabízené implementace Podtržené služby jsou standardně zapnuty DefaultWorkflowSchedulerService Asynchronní provádění, používá se vlákno získané ze thread pool zásoby ManualWorkflowSchedulerService Synchronní provádění, používá se vlákno, ze kterého byla instance workflow spuštěna DefaultWorkflow-CommitWorkBatchService Používá .NET transakce (potenciálně povýšené na distribuované transakce MSDTC) SharedConnectionWorkflow-CommitWorkBatchService Používá lokální transakce nad spojením do MS SQL serveru SqlWorkflowPersistenceService Stav běžících instancí včetně časovačů se ukládá v MS SQL serveru SqlTrackingService Informace o sledovaném průběhu workflow se ukládají v MS SQL serveru
Příklad přidání služby Přidání persistence do databáze SQL Vytvořit instanci služby Nastavit potřebné parametry Zavolat WorkflowRuntime.AddService() Alternativně: Vytvořit sekci v konfiguračním souboru Předat jméno konfigurace při vytváření WF runtime private void StartMyWorkflow () { WorkflowRuntime wr = new WorkflowRuntime(); string connectionstring = "Initial Catalog=Persistence;DataSource=localhost;Integrated Security=SSPI;"; wr.AddService(new SqlWorkflowPersistenceService(connectionstring)); WorkflowInstance instance = wr.CreateWorkflow(typeof(MyWorkflow)); instance.Start(); }
SchedulerService „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é
CommitWorkBatchService 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é
PersistenceService 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.)
TrackingService 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
Tracking – objektový model Spuštění instance workflow Get Tracking Profile Runtime Tracking Service Tracking Profile Reporty Tracking Channel Dotaz Úložiště Hostitel
Tracking – události workflow Created Suspended Changed Resumed Started Idle Persisted Unloaded Loaded Completed Terminated Aborted Exception
Tracking – události aktivity Executing Closed Canceling Faulting Compensating
Tracking - možnosti Profil – XML předpis nebo strom objektů určující jaké události posílat do kanálu: Změna vlastnosti aktivity nebo workflow Změna stavu aktivity nebo workflow Profil lze měnit i za běhu – pokud služba implementuje IProfileNotification WorkflowRuntime (nikoliv sama instance workflow!) nabízí události pro změnu stavu workflow instancí WorkflowID předáno jako parametr Váš kód může generovat události voláním Activity.TrackData(string,object)
Infrastrukturní služby SqlWorkflowPersistenceService SqlTrackingService
Agenda Proč Workflow Foundation? Základní pojmy Hostování workflow Vlastní workflow aktivity Různé
Aktivity - základy Aktivity jsou stavební kameny workflow Jednotka provádění, znovuvyužitelnosti kódu a kompozice Základní aktivity jsou elementární kroky v provádění Kompozitní aktivity jsou kontejnery s jinými aktivitami Workflow je samo rovněž kompozitní aktivita Aktivity jsou .NET 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í
Stavový diagram aktivity Faulting Chybou Canceling (-- poslední přechod) Initialized Executing Closed Compensating Přechod vyvolán Zásahem WF runtime Aktivitou
Aktivity – metadata Doprovodné třídy: Chování: [SupportsTransaction] [Designer(typeof(MyDesigner))] [Validator(typeof(MyValidator))] [CodeGenerator(typeof(MyCodeGen))] [Serializer(typeof(MySerializer))] [ToolboxItem(typeof(MyToolboxItem))] Designer Validator Serializer Code Generator ToolboxItem Chování: [SupportsTransaction] [SupportsExceptionHandlers] Transactions public class MyActivity: Activity { ... }
Kompozitní aktivity Aktivity, jež 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é již naplněné kompozitní aktivity lze vidět, ale nelze jej měnit Výjimkou jsou vlastnosti přístupné přes DependencyProperty
Speciální rysy vlastností DependencyProperty Podporuje deklarativní vazbu na data s notifikací o změně vlastnosti Navenek zabalena do klasické .NET vlastnosti pro pohodlný programový přístup Fyzicky uloženy v Dictionary třídě, která je použita pro serializaci a správu stavu Property Promotion Umožňuje 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 So in order to do some of these scenarios what we do is we have a concept of property promotion. So imagine now that I have my composite activity, I have children in it, and the children's behavior is going to depend on some properties that have been set on the parent. Well, how do I influence, or how do I set those properties. You can do that using a feature called property promotion, where you essentially promote the properties of that child to the parent. And when you set them on the parent they get passed through to the child. And that's supported through the custom activity designer. Let me show you a demo of how that works. <NEXT SLIDE>
Vlastní aktivity Jednoduchá aktivita (dědičnost) Kompozitní aktivita DependencyProperty / Promotion
Agenda Proč Workflow Foundation? Základní pojmy Hostování workflow Vlastní workflow aktivity Různé
Dostupnost Jedna z nových částí .NET Frameworku 3.0 B1 B2 V1 RTM Q1 2005 Q2 Q3 Q4 Q1 2006 Q2 Q3 Q4 Jedna z nových částí .NET Frameworku 3.0 Součást Windows Vista a Windows Server „Longhorn“ Bezplatně ke stažení pro Windows XP SP2 a Windows Server 2003 SP1 RTM koncem roku 2006
Visual Studio Designer WF vs. BizTalk Server Messaging Design Tools Business Activity Monitor And Admin 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 ** Re-emphasize point that same engine as SharePoint. BizTalk Server is a business process and integration server; It delivers value added services such as Application to Application integration Business to Business integration with complex mapping and communication tools Business Process Automation that integrates applications, trading partners, and touches employees Deployment, management and monitoring tools for the IT Professional Real time business process visibility
WF a další MS produkty Office System 2007: Podnikové aplikace Dynamics Workflow pro masy koncových uživatelů Hostované ve WSS 3.0 Spouštěné z kancelářských aplikací Office 2007 Notifikace uživatelům v Outlooku Navržené v SharePoint Designeru 2007 (ex-FrontPage) Podnikové aplikace Dynamics Speech Server 2007 Identity Integration Server (cca 2007) System Center Service Desk (cca 2007-8) Biztalk Server v.Next (cca 2008)
WF – další produktové úvahy Projekt „Silver“ Add-on do Visual Studia pro generování WF aktivit z popisu WCF endpointů a zpřístupnění WF jako WCF endpointy Pravděpodobně jako CTP a poté ve Visual Studiu „Orcas“ „Page workflow“ Řízení toku ASP.NET stránek pomocí WF Nástupce UIP aplikačního bloku Buď v ASP.NET „Orcas“ anebo jako samostatně stažitelný doplněk
Vybraná pokročilá témata Budou zpracována formou webcastu Slidy připojeny za touto prezentací Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Další zdroje k WF MSDN® Workflow centrum Komunity Ke stažení: .NET Framework 3.0 RC Extenze do Visual Studia 10 praktických cvičení http://msdn.microsoft.com /workflow Komunity Vzorový kód, nástroje, komponenty http://wf.netfx3.com
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.
Workflow Foundation Vybraná pokročilá témata Michael Juřek Software Architect Microsoft s.r.o.
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Způsob 1 - parametry Workflow lze při startu jednorázově předat vstupní parametry: Vytvořte Dictionary<string, object> Naplňte pojmenovanými parametry Předejte v CreateWorkflow() Workflow musí mít definované vlastnosti: Stejného jména jako je klíč Kompatibilního typu S accessorem set s přístupností public Uvnitř workflow se pracuje s těmito vlastnostmi obvyklým způsobem
Způsob 2 – volání metod Workflow může volat metody hostitele, opačně nelze Definujte rozhraní s atributem [ExternalDataExchange] a metodami Implementujte jej v některé své třídě Vytvořte ExternalDataExchangeService a přidejte do něj svou třídu pomocí AddService() Přidejte jej do WorkflowRuntime přes AddService() Metodu zavolejte z workflow pomocí aktivity CallExternalMethod s nastavenými parametry
Způsob 3 – události Hostitel vyvolává události, na které workflow může čekat Definujte třídu odvozenou z ExternalDataEventArgs Vytvořte rozhraní jako ve způsobu 2 Do rozhraní přidejte událost EventHandler<VaseEventArgs> Implementujte rozhraní, přidejte do WorkflowRuntime jako ve způsobu 2 Na událost čekejte ve workflow pomocí aktivity HandleExternalEvent, argumenty navažte na privátní pole kompatibilního typu ve vašem workflow
Komunikace s hostitelem Parametry Volání metody Čekání na událost
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Možnosti komunikace Z kódu ve workflow třídě můžete používat v zásadě libovolný přístupný způsob komunikace s okolím Nadstandardní komfort pro: Volání webové služby z workflow Zpřístupnění workflow jako ASMX webová služba Do budoucna: ještě komfortnější vazba na Windows Communications Foundation (Visual Studio „Orcas“)
Volání WS z workflow Vygenerujte proxy třídu pro volání WS Klasické Add Web Reference Přidejte aktivitu InvokeWebService Nastavte jméno proxy třídy a metody Vstupní/výstupní parametry navažte na privátní pole kompatibilního typu ve vašem workflow
Zpřístupnění workflow jako WS Definujte rozhraní, které bude navenek přístupné Přidejte aktivity WebServiceInput / Output / (volitelně Fault) do workflow Nastavte rozhraní a metodu na Input aktivitě Nastavte odpovídající Input aktivitu na Output aktivitě (volitelně též na Fault aktivitě) Vstupní/výstupní/chybové parametry navažte na privátní pole kompatibilního typu ve vašem workflow Zvolte z nabídky Publish as Web Service Vygeneruje web site včetně config souboru
Workflow a WS Volání WS z workflow Zpřístupnění workflow jako WS
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Korelace Čeká-li instance workflow na tutéž událost vícekrát, je nutné je rozlišit K rozhraní s atributem [ExternalDataExchange] přidejte [CorrelationParameter(name)] K první volané metodě přidejte [CorrelationInitializer] K dalším použitým metodám a událostem přidejte [CorrelationAlias] U aktivit CallExternalMethod a HandleExternalEvent nastavte vlastnost CorrelationToken
Korelace Rozlišení dvou různých volání
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
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
Kompenzace transakcí 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.) Aktivita TransactionScope může mít tzv. CompensationHandler, který je volán v případě neošetřené chyby vzniklé po dokončení transakce Je-li více TransactionScope, jejich kompenzace jsou volány v opačném pořadí než byly prováděny Při ošetření chyby nebo ošetření zrušení aktivy lze použít aktivitu Compensate pro modifikaci výchozího chování
Ošetření chyb Rollback ACID transakce při chybě Kompenzace dokončené transakce
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
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 <JmenoWorkflow>.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 http://wf.netfx3.com
Terminologie Podmínka (Condition) Pravidlo (Rule) Výraz, který se vyhodnotí jako True/False Pravidlo (Rule) Modelováno jako: IF<podmínka> THEN<akce> ELSE<akce> Soubor pravidel (RuleSet) Soubor pravidel spolu s nastavením parametrů provádění Politika (Policy) – aktivita spouštějící soubor pravidel <NEXT SLIDE> 8 Okay. So let's jump into workflow foundation and rules capabilities. We'll start first with just a little bit of terminology, to kind of get us on the same page. So first a condition, simply a Boolean expression that operates over my workflow data state. A rule then takes a condition and based on the result of that condition will execute either a set of then actions or a set of else actions. And then a rule set is a collection of these rules with a set of execution semantics over the top of that collection.
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
Forward Chaining - příklad Sada Pravidel Pořadí provádění Pravidlo 1 (P0) If Total > $50 & < $100 Then Discount = 10% Pravidlo 2 (P0) If Total >= $100 Then Discount = 15% Pravidlo 3 (P0) If Amount > $0 Then Total = Total + Amount Pravidlo 1 Pravidlo 3 Pravidlo 2 Amount = $25 Total = $80 Discount <NEXT SLIDE> 21 But first, I want to talk a little bit more just around execution semantics of a rule set. So, I mentioned forward chaining before. Those of you familiar with rules technology are very familiar with what this means, but a lot of people have heard a bit about rules and aren't really quite sure what some of these things mean. So, a simple example around forward chaining and some of the power that it provides. So, I have an example here where I have three rules defined. My first rule, and by the way I haven't added any priorities onto these, rules so, I, as a developer, have not made any explicit declaration of how to execute these rules. These are really just atomic statements. The first one says, if the total property on my activity is between $50 and $100, give the customer a 10 percent discount. The second one says, well, if that total is greater than $100, I want to up that discount up to 15 percent. And the third one is a rule that says, well if the amount field on the property on the order is greater than zero, then I need to add that into this total, this might be an order line amount, et cetera. So, let's just step through this in order and see what the execution will look like. <NEXT TRANSITION> So, if I had an activity that came in with an amount of $25 and a total $80, I would evaluate rule1, rule1 evaluates to true, and so I will set my discount equal to 10 percent. <NEXT TRANSITION> I would evaluate rule2, which is false at this point, and then I would evaluate rule3, which would evaluate true, and I would increase my total amount. Now, clearly, I'm in sort of an inconsistent state at this point from a logic standpoint, right? This was not my business intent in terms of my end outcome. So, what happens is via forward chaining that the engine can identify that changes have been made to the data state, more specifically to the activity properties, that the actions of one rule have touched activity properties that are used in the conditions of other rules. So, we'll actually come back in and reevaluate the impacted rules, and we'll look again at rule1, which uses that total field, it evaluates to false this time. <NEXT TRANSITION> Rule2, this time, evaluates to true, and so I will change my discount amount from 10 percent to 15 percent, which again is really the intent that I had when I modeled these rules, but you can see I, as a rule modeler, didn't make any kind of statement in terms of what are the dependencies among these rules, and that's just a simple example of how forward chaining can really kind of put some richer semantics on top of a rule set. $105 = 10% 15%
Vyhodnocení pravidel Použití Policy pro výpočet slevy
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Kdy použít State Machine? Ve většině případů budete používat Sequential Workflow Přesto se State Machine Workflow může hodit když: V procesu jsou interakce s člověkem Workflow je řízeno externími událostmi Velké množství cest toku procesu Těžko předvídatelné ad hoc přechody v procesu 70
Základní koncepce 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
Příklad kompozice stavů Order Changed On Order Changed On Order Completed Waiting to Create Order On Order Created Order Created On Order Processed Order Processed On Order Completed On Order Shipped On Order Shipped Order Shipped Order Completed On Order Completed 72
Hlavní používané aktivity State – reprezentuje stav procesu, obsahuje: Max. jednu StateInitialization sekvence Max. jednu StateFinalization sekvence Libovolný počet EventDriven sekvencí reagujících na události Libovolný počet vnořených stavů (podstavů) EventDriven Sekvence spouštěná událostí (typicky Delay anebo HandleExternalEvent) SetState Přechod do jiného stavu
Ilustrace struktury workflow State Event Driven Event Driven State State Event Driven Set State Event Driven Set State Set State Event Driven Set State State Event Driven Set State 74
State Machine Workflow Zpracování objednávek
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Proč měnit WF za běhu? Instance workflow již běží, ale je potřeba ji změnit – bez rekompilace anebo nového nasazení Přidat dodatečnou úroveň schválení v závažné situaci Odstranit některý krok v urgentních případech Vyvolat speciální pravidla v určité situaci Zvýšit povolenou dobu pro určitý krok z důvodu nepřítomnosti účastníka Reakce na nepředvídanou vnější událost Účastník workflow potřebuje mít možnost rozhodnout, jaký bude následný krok
Změny – pravidla, omezení Navrhované změny musí být validovány dotčenými aktivitami Změny se provádí jenom na konkrétní instanci, neovlivní třídu workflow Provádí-li se změny zvenčí (z hostitele), je potřeba provést Suspend() instance Lze změnit pouze věci zapsatelné v XAML notaci bez ohledu na to jak je workflow vytvořeno, například: Přidat / odebrat aktivity Změnit deklarativní podmínky a soubory pravidel
Změna WF instance Změna prováděná zevnitř instance Změna prováděná z hostitele
Agenda Komunikace WF s hostitelem Komunikace WF s okolím Korelace Ošetření chyb Používání oddělených pravidel State Machine Workflow Modifikace WF za běhu Vložení WF designeru do aplikace
Hostování WF designeru Vložení WF designeru do vaší desktopové aplikace je licenčně i technicky možné Nicméně není zcela snadné, vyžaduje nemalé množství kódu a implementaci řady rozhraní Doporučení: vyjděte z příkladů dostupných na Internetu
Hostování WF designeru Designer jako prvek WinForms
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.