1 / 31

Raffaele Rialdi

personalizzazione dell'ambiente. Raffaele Rialdi. Visual Developer Security MVP. malta@vevy.com. MVP Profile: http://snipurl.com/f0cv. Windows Workflow Foundation System.Workflow (3.0) System.Workflow.Activities (3.0) Rules System.Workflow.ComponentModel (3.0) Compiler Designer

yoko-lawson
Télécharger la présentation

Raffaele Rialdi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. personalizzazione dell'ambiente Raffaele Rialdi Visual Developer Security MVP malta@vevy.com MVP Profile: http://snipurl.com/f0cv

  2. Windows Workflow Foundation • System.Workflow(3.0)System.Workflow.Activities(3.0) • Rules • System.Workflow.ComponentModel(3.0) • Compiler • Designer • Serialization • System.Workflow.Runtime(3.0) • Hosting • Messaging MSMQ System.Messaging (2.0) (3.0) - New (2.0) - Substantially Improved - Windows Presentation Foundation (formerly codenamed “Avalon”) - Windows Communication Foundation (formerly codenamed “Indigo”) - Windows Workflow Foundation KEY PRESENTATION DATA COMMUNICATION • Windows Communications Foundation • System.ServiceModel(3.0) • Channels • Configuration • Diagnostics • Integration • QueueHelper • System.ServiceModel.Security(3.0) • Protocols • Tokens • Presentation Framework • System.Windows(3.0) • Annotations • Automation • Controls • Data • Documents • Ink • Interop • Navigation • Resources • Serialization • Shapes • Threading • System.Windows.Media (3.0) • 3D • Animation • Imagine • ASP.NET • System.Web(2.0) • Compilation • Configuration • Handlers • Hosting • Mail • Management • Security • UI (2.0) • Util Language Integrated Query System.Query(F) System.Data.DLinq(F) System.Xml.XLinq(F) System.Expressions(F) • ADO.NET • System.Data • Common • Odbc • OleDb • OracleClient • Sql • SqlClient • Windows File SystemSystem.Storage(F) • Core • Audio • Calendar • Contacts • Documents • Image • Media • Messages • Rules • Sync • Video • ASP.NET Data Management • System.Web • Caching • Profile • SessionState • Network Class Library • System.Net • Cache • Mail (2.0) • Network Information (2.0) • Security (2.0) • Sockets ASMX Web Services System.Web.Services Printing Subsystem System.Printing(3.0) Identity Management Microsoft.InfoCards(3.0) • GDI+System.Drawing • Design • Drawing2D • Printing • XML DataSystem.Xml • Schema • Serialization • XPath • Xsl • Windows FormsSystem.Windows.Forms (2.0) • Design • Layout • VisualStyles .NET Remoting System.Runtime.Remoting XPS Documents System.Windows.Xps(3.0) System.IO.Packaging(3.0) Directory Services System.DirectoryServices .NET Remoting System.Runtime.Remoting • Speech Integration • System.Speech(3.0) • Recognition • Synthesis FUNDAMENTALS BASE CLASS LIBRARIES • System.Text • AccessControl(2.0) • Cryptography (2.0) • Permissions • Policy • Principal (2.0) System.Text • System.Runtime • CompilerServices • ConstrainedExecution(2.0) • InteropServices • Hosting • Serialization • Versioning System • System.Text • Generic (2.0) • Managed Add-In Framework • System.Addins (F) • Contact System.CodeDom System.ServiceProcess • System.Reflection • Email System.Threading System.ComponentModel System.Timers System.Diagonostics Microsoft.Build (2.0) System.Configuration System.EnterpriseServices System.IO (2.0) System.Transactions (2.0) System.Resrouces “ClickOnce” Deployment System.Deployoment (2.0) WINDOWS VISTA

  3. Perché già in una beta 2 parlare di designer e customizzazione? A chi serve Workflow?

  4. Workflow e servizi • I servizi di WF sono pluggabili • questa architettura permette l'espandibilità futura dell'infrastruttura di Workflow • Alcuni esempi: • ExternalDataExchangeService (comunicazione tra host e workflow) • WorkflowSchedulerService • WorkflowTransactionService • WorkflowPersistenceService • TrackingService • Custom (derivato da WorkflowRuntimeService) • WorkflowCompilerOptionsService • ToolboxService • ......

  5. Due mondi: il workflow e l'host Thread 2 Thread 1 public class MyService : IMyService ExternalDataExchangeService ds = new ExternalDataExchangeService();_Runtime.AddService(ds);MyService svc = new MyService();// informiamo WF del nostro serviziods.AddService(svc);

  6. Comunicazione • Definire una Interfaccia e marcarla con [ExternalDataExchange] • Dichiarare gli eventi per comunicare verso WFevent EventHandler<MyEventArgs> Foo; • Dichiarare metodi per comunicare verso l'hostvoid FromWorkflow(string Message); • Implementare l'interfaccia in una classe • la UI va aggiornata via Invoke • Scrivere una classe (marcata con Serializable) che deriva da ExternalDataEventArgs per passare dei parametri • Gestire nel workflow i messaggi in ingresso con HandleExternalEventActivity • Spedire messaggi verso l'host con CallExternalMethodActivity

  7. Custom Activities: perché? • Per costruire in modo visuale ed a blocchi la logica dell'applicazione • Per scomporre il problema in sottoproblemi • Activity 'esecutive' • Eseguono codice, query su db, chiamate a WS, etc. etc. • Activity di 'scambio dati' • Derivando HandleExternalEventActivity • Derivando CallExternalMethodActivity

  8. System.Workflow.ComponentModel.Activity • Le Activity sono il "mattoncino" di WF • Ci sono tre tipologie di Activity • Basic: semplici nodi di un programma • SendMail, call WebService, etc. etc. • Composite: contenitori che consentono di modellare e coordinare le activity base • SequentialActivity • ParallelActivity • ... • Root: Activity speciali che costituiscono una unità di attivazione.Microsoft ne fornisce due: • SequentialWorkflowActivity • StateMachineWorkflowActivity

  9. Anatomia di una activity • Definizione. L'insieme di proprietà ed eventi che costituiscono lo stato dell'Activity • Esecuzione. Il comportamento dell'activity, cioè la "logica" • Validazione. Le regole per il controllo dei parametri • Design. La classe che è responsabile del rendering sulla superfice designer • Toolbox. Il comportamento quando viene inserita nel designer

  10. Activity Component Model • Alle Activity si associano dei componenti tramite attributi • Questi componenti definiscono il comportamento: • sul designer • per la validazione dei dati • durante la serializzazione(workflow di lunga durata) • della persistenza nel codice(via codedom) Designer Validator Activity Services Serializer Code Generator [Designer(typeof(MyDesigner))] [CodeGenerator(typeof(MyCodeGen))] [Validator(typeof(MyValidator))] public class MyActivity: Activity {...} Opzionale Richiesto

  11. Operazioni tipiche delle Custom Activity • Se necessario, due override: • Initialize (alloca risorse) • Cancel (le rilascia) • Se l'activity supporta le transazioni • Compensate (rollback) • Sempre necessario fare l'override di: • Execute (esecuzione della logica) ritornando lo stato dell'activity • Cancelling, Closed, Compensating, Executing, Faulting, Initialized

  12. Esempio: la CodeActivity protected sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext){ base.RaiseEvent(CodeActivity.ExecuteCodeEvent, this, EventArgs.Empty); return ActivityExecutionStatus.Closed;} // nel workflow ...private void CodeActivity1_ExecuteCode(object sender, EventArgs e){ ...}

  13. Executing Canceled Initialized Closed Compensating Modello di esecuzione della Activity Activity Execution Methods • Initialize() • Execute() • Cancel() • Compensate() (se implementa ICompensatableActivity) Transizioni possibili Runtime Activity

  14. Child Activity Child Activity Esecuzione di una Composite Activity Composite Activity Execute() += OnChildClosed .. .. .. += OnChildClosed Status.Closed()

  15. Sequence Activity – Execute() protected override Status Execute(ActivityExecutionContext context) { Activity childActivity = this.ExecutableActivities[0]; EventHandler<ActivityStatusChangeEventArgs> OnClosed = null; OnClosed = delegate { childActivity.Closed -= OnClosed; if (this.Status == Status.Canceling) context.CloseActivity(); else if (this.Status == Status.Executing) { this.index++; if (this.ExecutableActivities.Count > this.index) { childActivity= this.ExecutableActivities[this.index]; childActivity.Closed += OnClosed; context.ExecuteActivity(childActivity ); } else context.CloseActivity(); } }; childActivity.Closed += OnClosed; context.ExecuteActivity(childActivity); return Status.Executing; }

  16. Activity Execution Context Template Activity Context Owner Activities Context 1 Default Workflow Context Context 2 Context 3 Ad ogni loop viene creato un contestodifferente che consente l'eventuale rollback

  17. Sub - workflow • I Workflow sono Activity e quindi .... • Oltre a poter creare Activity composite è possibile eseguire veri e propri workflow grazie a: InvokeWorkflowActivity

  18. Validazione • Ci sono diversi tipi di validazioni: • Validazione dei parametri • La più usata ovviamente • Validazione della sequenza delle child Activity • Usata dalle Activity composite • Validazione della posizione del "SetState" • Usata dalle macchine a stati • Validazione delle CallExternalMethodActivity • Utile per chi deriva questa classe • Validazione delle HandleExternalEventActivity • Utile per chi deriva questa classe

  19. ActivityValidator, ActivityCompositeValidator [ActivityValidator(typeof(MyValidator))] public partial class Activity1 : Activity{ ...} public class MyValidator : ActivityValidator { public override ValidationErrorCollection ValidateProperties(ValidationManager manager, object obj) { ValidationErrorCollection errs = new ValidationErrorCollection( base.ValidateProperties(manager, obj)); Activity1 act = manager.Context.Current as Activity1; if(act.HisName != null && act.HisName.Length == 1) errs.Add(new ValidationError("HisName cannot be 1 char", 1)); return errs; } } logica di validazione

  20. Quali proprietà validare? • ValidationOption.None • Nessuna validazione • ValidationOption.Optional • Sono accettati i null • ValidationOption.Required • Validazione obbligatoria [ValidationOption(ValidationOption.Required)] public string EmailAddress { get {...} set {...} }

  21. ActivityDesigner • Classe di supporto alla Activity • Derivando questa classe si crea un nuovo Designer per una custom activity • painting del "box" dell'activity • help text • tooltip • gestione di mouse/tastiera sull'activity • menu contestuale • evento di default • CompositeActivityDesigner in più: • painting negli stati espanso/collassato • painting nelle fasi di drag&drop • painting delle child activity

  22. Creare un Designer per le Activity System.Object System.Workflow.ComponentModel.Design.ActivityDesigner System.Workflow.ComponentModel.Design.CompositeActivityDesigner System.Workflow.ComponentModel.Design.FreeformActivityDesigner [Designer(typeof(SendMailDesigner), typeof(IDesigner))] [ActivityValidator(typeof(ParametersValidator))] public partial class SendMailActivity :Activity { ... } public class SendMailDesigner : ActivityDesigner{ protected override Size OnLayoutSize(ActivityDesignerLayoutEventArgs e) { return new Size(230, 100); }protected override void OnPaint(ActivityDesignerPaintEventArgs e) { e.Graphics.DrawString( ...... ); ..... }}

  23. ActivityToolboxItem • Definisce il comportamento di default che deve avere una Activity quando viene posta (drop) sul workflow • Tipico esempio: aggiunta in automatico di una child activity

  24. Le "Rules" (regole) • Le regole in WF • Permettono di modellare più facilmente la logica • Rendono più semplice la comprensione della logica del sistema • Permettono di eseguire modifiche in modo semplice e comprensibile • Le Activity Policy permettono di stabilire una sequenza di regole (percentuali applicate in sequenze diverse ad esempio)

  25. RuleSet • Due dialog usabili anche fuori da WF: • RuleSetDialog • RuleConditionDialog • Sono in preparazione Dialog ancora più specializzate, ad esempio, per BizTalk

  26. I Themes • Sono una sorta di foglio di stile per il designer • Sono in formato .... xml  (.wtm) • VS2005 (+ WF Extensions) ha un editor che si trova in Tools – Options – Workflow • Permette di cambiare colori, font, stile delle linee, background, ombre • L'applicazione che tiene in host il designer può applicare programmaticamente i Themes

  27. I Glyph • Sono dei marker apposti sopra il disegno della activity • CommentGlyph • ConfigErrorGlyph • LockedActivityGlyph • ReadOnlyActivityGlyph • SelectionGlyph • ShadowGlyph • Tipico utilizzo: marcare le activity in modo visuale durante il tracking(Esempio Workflow Monitor dell'sdk)

  28. Toolbox • [ToolboxBitmap(typeof(MailActivity), "raf.bmp")] • bitmap 16x16 • nome completo di namespace escluso quello di "MailActivity" • La bitmap appare dentro il box dell'activity • La bitmap appare nella toolbox solo se si aggiunge con add item. Nella toolbox appare l'icona di default se l'activity è aggiungta in automatico da vs.net • Vogliamo di più?

  29. Volete provare le brezza della beta2? • Prerequisiti: • VS2005 RTM (opzionale ma in questo momento senza è un'impresa titanica) • Disinstallare tutte le beta precedenti di WinFX • Installare: • WinFX runtime • Windows Vista SDK (beta) (lanciare .msi se l'exe fallisce) • Estensioni di Visual Studio (contengono Cider) • Estensioni di Workflow x Visual Studio • Esempi "Hands On Lab" (msdn website)

  30. Risorse • www.windowsworkflow.net • http://msdn.microsoft.com/workflow • www.workflowfoundation.net • Channel 9 • The book (obsoleto - beta1) • I tanti blog • msdn magazine (articoli di Dino Esposito) • msdn magazine Gennaio 2006

  31. Domande?

More Related