La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Raffaele Rialdi MVP Profile: personalizzazione dell'ambiente Visual Developer Security MVP.

Presentazioni simili


Presentazione sul tema: "Raffaele Rialdi MVP Profile: personalizzazione dell'ambiente Visual Developer Security MVP."— Transcript della presentazione:

1 Raffaele Rialdi MVP Profile: personalizzazione dell'ambiente Visual Developer Security MVP

2 PRESENTATION ASP.NET System.Web (2.0) Compilation Configuration Handlers Hosting Mail Management Security UI (2.0) Util 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 Windows Forms System.Windows.Forms (2.0) Design Layout VisualStyles Printing Subsystem System.Printing (3.0) GDI+ System.Drawing Design Drawing2D Printing ADO.NET System.Data Common Odbc OleDb OracleClient Sql SqlClient ASP.NET Data Management System.Web Caching Profile SessionState XML Data System.Xml Schema Serialization XPath Xsl Windows File System System.Storage (F) Core Audio Calendar Contacts Documents Image Media Messages Rules Sync Video XPS Documents System.Windows.Xps (3.0) System.IO.Packaging (3.0) Speech Integration System.Speech (3.0) Recognition Synthesis Language Integrated Query System.Query (F) System.Data.DLinq (F) System.Xml.XLinq (F) System.Expressions (F) Windows Communications Foundation System.ServiceModel (3.0) Channels Configuration Diagnostics Integration QueueHelper System.ServiceModel.Security(3.0) Protocols Tokens Network Class Library System.Net Cache Mail (2.0) Network Information (2.0) Security (2.0) Sockets.NET Remoting System.Runtime.Remoting ASMX Web Services System.Web.Services Identity Management Microsoft.InfoCards (3.0) MSMQ System.Messaging Directory Services System.DirectoryServices DATACOMMUNICATION FUNDAMENTALS BASE CLASS LIBRARIES System System.CodeDom System.ComponentModel System.Diagonostics System.IO (2.0) System.Resrouces System.Text System.ServiceProcess System.Threading System.Timers System.EnterpriseServices System.Transactions (2.0).NET Remoting System.Runtime.Remoting System.Text Generic (2.0) System.Reflection System.Configuration System.Text AccessControl (2.0) Cryptography (2.0) Permissions Policy Principal (2.0) Managed Add-In Framework System.Addins (F) Contact Microsoft.Build (2.0) System.Runtime CompilerServices ConstrainedExecution (2.0) InteropServices Hosting Serialization Versioning ClickOnce Deployment System.Deployoment (2.0) WINDOWS VISTA (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 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

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

4 Workflow e servizi I servizi di WF sono pluggabiliI servizi di WF sono pluggabili –questa architettura permette l'espandibilità futura dell'infrastruttura di Workflow Alcuni esempi: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 1 Thread 2 ExternalDataExchangeService ds = new ExternalDataExchangeService(); _Runtime.AddService(ds); MyService svc = new MyService(); // informiamo WF del nostro servizio ds.AddService(svc); public class MyService : IMyService

6 Comunicazione 1.Definire una Interfaccia e marcarla con [ExternalDataExchange] Dichiarare gli eventi per comunicare verso WF event EventHandler Foo;Dichiarare gli eventi per comunicare verso WF event EventHandler Foo; Dichiarare metodi per comunicare verso l'host void FromWorkflow(string Message);Dichiarare metodi per comunicare verso l'host void FromWorkflow(string Message); 2.Implementare l'interfaccia in una classe la UI va aggiornata via Invokela UI va aggiornata via Invoke 3.Scrivere una classe (marcata con Serializable) che deriva da ExternalDataEventArgs per passare dei parametri 4.Gestire nel workflow i messaggi in ingresso con HandleExternalEventActivity 5.Spedire messaggi verso l'host con CallExternalMethodActivity

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

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

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

10 Activity Component Model Richiesto Opzionale Alle Activity si associano dei componenti tramite attributiAlle Activity si associano dei componenti tramite attributi Questi componenti definiscono il comportamento: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(typeof(MyDesigner))] [CodeGenerator(typeof(MyCodeGen))] [Validator(typeof(MyValidator))] public class MyActivity: Activity {...} Activity Code Generator Designer Validator Serializer Services

11 Operazioni tipiche delle Custom Activity Se necessario, due override:Se necessario, due override: –Initialize (alloca risorse) –Cancel (le rilascia) Se l'activity supporta le transazioniSe l'activity supporta le transazioni –Compensate (rollback) Sempre necessario fare l'override di:Sempre necessario fare l'override di: –Execute (esecuzione della logica) ritornando lo stato dell'activity Cancelling, Closed, Compensating, Executing, Faulting, InitializedCancelling, 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 Modello di esecuzione della Activity Transizioni possibili Activity Execution Methods Initialize()Initialize() Execute()Execute() Cancel()Cancel() Compensate() (se implementa ICompensatableActivity)Compensate() (se implementa ICompensatableActivity) Activity Runtime InitializedExecuting Closed Canceled Compensating

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

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

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

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

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

19 ActivityValidator, ActivityCompositeValidator 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; } [ActivityValidator(typeof(MyValidator))] public partial class Activity1 : Activity {... } logica di validazione

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

21 ActivityDesigner Classe di supporto alla ActivityClasse di supporto alla Activity Derivando questa classe si crea un nuovo Designer per una custom activityDerivando 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ù: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 public class SendMailDesigner : ActivityDesigner { protected override Size OnLayoutSize(ActivityDesignerLayoutEventArgs e) { return new Size(230, 100); } protected override void OnPaint(ActivityDesignerPaintEventArgs e) { e.Graphics.DrawString( );..... } } [Designer(typeof(SendMailDesigner), typeof(IDesigner))] [ActivityValidator(typeof(ParametersValidator))] public partial class SendMailActivity : Activity {... }

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

24 Le "Rules" (regole) Le regole in WFLe 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:Due dialog usabili anche fuori da WF: –RuleSetDialog –RuleConditionDialog Sono in preparazione Dialog ancora più specializzate, ad esempio, per BizTalkSono in preparazione Dialog ancora più specializzate, ad esempio, per BizTalk

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

27 I Glyph Sono dei marker apposti sopra il disegno della activitySono 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)Tipico utilizzo: marcare le activity in modo visuale durante il tracking (Esempio Workflow Monitor dell'sdk)

28 Toolbox [ToolboxBitmap(typeof(MailActivity), "raf.bmp")][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:Prerequisiti: –VS2005 RTM (opzionale ma in questo momento senza è un'impresa titanica) –Disinstallare tutte le beta precedenti di WinFX Installare: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 Channel 9Channel 9 The book (obsoleto - beta1)The book (obsoleto - beta1) I tanti blogI tanti blog msdn magazine (articoli di Dino Esposito)msdn magazine (articoli di Dino Esposito) msdn magazine Gennaio 2006msdn magazine Gennaio 2006

31 Domande?


Scaricare ppt "Raffaele Rialdi MVP Profile: personalizzazione dell'ambiente Visual Developer Security MVP."

Presentazioni simili


Annunci Google