Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFloriano Mattioli Modificato 10 anni fa
1
Raffaele Rialdi MVP Profile: http://snipurl.com/f0cv personalizzazione dell'ambiente malta@vevy.com 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 Email 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 EmailAddress { 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 www.windowsworkflow.netwww.windowsworkflow.netwww.windowsworkflow.net http://msdn.microsoft.com/workflowhttp://msdn.microsoft.com/workflowhttp://msdn.microsoft.com/workflow www.workflowfoundation.netwww.workflowfoundation.netwww.workflowfoundation.net 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?
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.