Comprendere Workflow Foundation In Windows e in 2007 Microsoft Office system Paolo Pialorsi [email protected] DevLeap http://www.devleap.com/ Roberto Brunetti [email protected] DevLeap http://www.devleap.com/ Agenda Perché workflow, perché WF Architettura di WF Runtime Engine Activity Base Activity Library Hosting Engine Persistence e State Management Tipologie di workflow Sequential Workflow State Machine Workflow Designer Q&A WinFx (pardon .NET 3.0) Piattaforma per lo sviluppo di applicazioni di prossima generazione Windows Communication Foundation Windows Workflow Foundation Windows Presentation Foundation Windows CardSpace (InfoCard) .NET 3.0 ad oggi è in Beta Quello che vediamo potrebbe cambiare da qui al rilascio Nelle slide e demo ci riferiamo a: Beta2 CTP May 2006 – GoLive! Workflow in generale Perché Workflow? Per descrivere in modo “umano” i processi di business Per sganciare i processi dalla loro particolare implementazione Per dare procedure e regole operative Perché ognuno faccia il suo lavoro Programmatori: codice (attività) Esperti di dominio: design dei flussi Utenti: operatività System Workflow Processi di business tra sistemi/macchine Unattended e tipicamente brevi nel tempo come durata del singolo flow Regole certe, ma modificabili nel tempo, anche da figure “non dev” Esempi: Gestione notifiche via email Invio fax notturni Ecc. Human Workflow Richiedono l’interazione con l’utente/operatore Di solito sono Long Running Se richiedono transazioni saranno Long Running Quindi eventuale Compensation State Management: devono essere Stateful Coinvolgono diversi ambiti applicativi: Task, Office, Email, ecc. Esempi: Processi di approvazione documentale (firma singola, firma multipla) Order processing Perché WF? Framework di gestione dei Workflow a 360° Design, hosting, monitoring, extension Pervasivo in tutte le tecnologie Microsoft Windows Office Sharepoint BizTalk Visual Studio 2005 (ISV custom apps) Ecc. Set di funzionalità di base Programmabile e estendibile con codice .NET Windows Workflow Foundation Windows Workflow Foundation Visual Designer Per WF un Workflow è: insieme di Activity eseguite in un Workflow disegnato con un Visual Designer ospitato da un’applicazione di Hosting che esegue il Runtime Engine appoggiandosi ai Runtime Services A Workflow An Activity Custom Activity Library Windows Workflow Foundation Base Activity Library Runtime Engine Runtime Services Host Process Un semplice Workflow Workflow XOML <SequentialWorkflowActivity x:Class="WorkflowConsoleApplication1.MyWorkflow" C# public sealed partial class MyWorkflow: SequentialWorkflowActivity x:Name="MyWorkflow" { xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" public MyWorkflow() xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow" { > InitializeComponent(); <CodeActivity x:Name="customCodeActivity" } ExecuteCode="customCodeActivity_ExecuteCode" /> private void customCodeActivity_ExecuteCode(object sender, EventArgs e) </SequentialWorkflowActivity> { Console.WriteLine("Hello World!"); } } Workflow Un workflow è una classe .NET Deriva da classi base della Runtime Library (System.Workflow.Activities) SequentialWorkflowActivity StateMachineWorkflowActivity Può essere definito come: Flow (graficamente) Codice .NET Codice XOML => Compilato con WFC.EXE Stesso schema di XAML Un workflow in pratica Activity Unità di esecuzione Sono anch’esse classi .NET Derivate da System.Workflow.ComponentModel.Activity Ne esistono N già definite da WF Possiamo definire le nostre Activity custom 2007 Microsoft Office system ne prevede diverse custom Possono essere Basic Activity: singoli step di un workflow Composite Activity: gruppi di activity (sequence) Base Activity Library Code Delay IfElse InvokeWebService InvokeWorkflow Sequence Parallel Replicator While CallExternalMethod ecc. Base Activity Activity Development Due possibilità Usare il designer per comporre Activity Aggregandone altre Derivare e personalizzare Activity di base Implementare una classe ex-novo Derivando da: System.Workflow.ComponentModel.Activity Possiamo creare class library di Activity Office Sharepoint Server 2007 2007 Microsoft Office system I Workflow sono Activity SequentialWorkflowActivity StateMachineWorkflowActivity Visual Designers SharePoint Designer (Web Designer) Visual Studio (Pro-Dev) Development Model Wizard-based workflow designer Development Model Visual workflow designer Activity Riutilizzare OOB/deployed Activity Riutilizzare OOB/deployed Creazione di nuove Activity Form Auto-generated Form -ASPX Form Designed Form -InfoPath -ASPX Deployment I Workflow vivono sul server Runtime compilation Deployment Generazione di package Console Administrator installabile Tipi di Workflow Sequential Workflow Sequenze di eventi noti Temporalmente consequenziali Il processo guida il flusso Tipicamente non richiedono “human interaction” Sono i workflow più semplici A1 A3 A2 A4 Sequential Workflow State Machine Workflow Guidati da eventi Interni Esterni S1 S2 S3 La sequenza di eventi non è nota a priori I percorsi di esecuzione sono variabili Può assumere un solo stato per volta Può saltare “dinamicamente” nel flusso Ogni evento scatena una sequenza assimilabile ad un sequential workflow S4 Quando usarli Quando i processi di business sono Molto variabili Molto complessi Difficilmente schematizzabili in sequenze Se le “human interaction” sono frequenti Quando dobbiamo gestire eventi esterni Comunicazioni dall’utente Comunicazioni da applicazioni esterne State Machine Workflow Workflow Hosting Workflow Hosting Un workflow deve essere ospitato da un processo Windows Application ASP.NET Application SharePoint Office Servizi Windows L’host si appoggia a WorkflowRuntime Il workflow “parla” con l’host tramite eventi e interfacce WorkflowRuntime using(WorkflowRuntime workflowRuntime = new WorkflowRuntime()) { AutoResetEvent waitHandle = new AutoResetEvent(false); workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();}; workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WorkflowConsoleApplication1.MyWorkflow)); instance.Start(); waitHandle.WaitOne(); } C# Ma non c’era già BizTalk?! Sì ma BizTalk è più orientato ai “Business Processes” BizTalk è orientato alla gestione dei messaggi/file Molto XML/Service Oriented BizTalk prevede connettori verso ERP vari (JDE, PeopleSoft, SAP, ecc.) Database servers MSMQ Ecc. La prossima versione di BizTalk dovrebbe utilizzare WF per la parte di design Ma non c’era già SSIS?! Si ma SSIS è più orientato al trasferimento di Dati Da una sorgente a una destinazione Con eventuale trasformazione Gira “fuori” dal contesto di una applicazione .NET WF gira “dentro” applicazione SSIS richiede SQL Server WF gestisce i workflow (punto) Ulteriori approfondimenti… http://www.microsoft.com/italy/msdn/ http://msdn.microsoft.com/office/future/ http://www.netfx3.com/ http://wf.netfx3.com/ http://www.devleap.it/ Corso DevLeap su .NET 3.0 (WinFx) Personalizzato Grazie! Domande? Compilate il form di valutazione… © 2006 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.