ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

26
ASP.NET Dynamic Data » Andrea Dottor – Microsoft MVP ASP/ASP.NET

Transcript of ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

Page 1: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

ASP.NET Dynamic Data

» Andrea Dottor – Microsoft MVP ASP/ASP.NET

Page 2: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 227/03/2009

» Cosa sono gli ASP.NET Dynamic Data?

Permettono di creare una Web Application per l'accesso e la gestione dati utilizzando un meccanismo chiamato scaffolding.

Page 3: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 327/03/2009

» [WIKIPEDIA] Scaffolding:

Wikipedia Scaffolding

Il termine scaffolding, introdotto in psicologia da Jerome Bruner e altri nel 1976, significa letteralmente "impalcatura". Indica quelle strategie di sostegno e quella guida ai processi di apprendimento che consentono di svolgere un compito sebbene non si abbiano ancora le competenze per farlo in autonomia, riuscendovi grazie all'aiuto di un esperto, di un adulto o di un pari più preparato che fornisce indicazioni e suggerimenti, nell'attesa che si riesca a maturare una piena autonomia nello svolgimento del compito.

Le componenti generali dello scaffolding sono:a) reclutare il bambino al compitob) mantenere la direzione dell'attività verso il problema da risolverec) semplificare le componenti del compitod) mostrare le possibili soluzionie) ridurre i gradi di libertà della situazione

Page 4: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 417/01/2008

» [FLICKR] Scaffolding:

FLICKR Scaffolding

Page 5: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 527/03/2009

» Concetti dei Dynamic Data

• Permettono di creare facilmente siti per l’accesso ai dati (operazioni di CRUD)

• L’interfaccia è creata partendo dal Data Model• Data Model fa uso dei metadati per descrivere tutta la

struttura e le relazioni• Le regole di validazione vengono create automaticamente• Le pagine vengono crete automaticamente, utilizzando

dei template• URL Routing è utilizzato per mappare gli url sulle pagine

Concetti base

Page 6: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 627/03/2009

» Architettura

Architettura

Data Source Data Model(LINQ to SQL – Entity Framework)

Data Model(Meta-data)

Page e Field Templates

Page 7: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 727/03/2009

» Creazione di un progetto Dynamic Data – passo 1

Creazione progetto

Utilizzare il template “DynamicData Web Site”

Il WebSite conterrà la cartella “DynamicData”

Page 8: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 827/03/2009

» Creazione di un progetto Dynamic Data – passo 2

Creazione progetto

Aggiungere classi LINQ toSQL oppure Entity Data Model

Page 9: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 927/03/2009

» Creazione di un progetto Dynamic Data – passo 3

Creazione progetto

Popoliamo il Data Model(LINQ to SQL oppure

Entity Framework)

Drag & Drop delle tabelle da utilizzare.

Page 10: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1027/03/2009

» Creazione di un progetto Dynamic Data – passo 4

Creazione progetto

Configurazione del DataModel nel Global.asax per la registrazione del DataContext necessario per la creazione del Meta Model e delle regole di routing.

MetaModelmodel = new MetaModel();

model.RegisterContext(typeof(NorthwindDataContext), new ContextConfiguration() { ScaffoldAllTables = true });

Page 11: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1127/03/2009

» Page Templates

Page Templates

Contenute in DynamicData\Page Templates

Page Uses Controls:• DynamicDataManager• DynamicValidator• FilterRepeater• DynamicControl• DynamicField

GridView utilizzata per visualizzare i dati.

Page 12: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1227/03/2009

» Page Modes

Separate-Page Mode(default)• Vengono utilizzate pagine distinte per la lista, l’edit, il

dettaglio e l’inserimento di nuovi dati.

Combined-Page Mode• I dati vengono manipolati nella stessa pagina (Master-Dteails)

Differenti Page Modes possono essere associati a differenti tabelle

Page Modes

Page 13: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1327/03/2009

» Separate-Page Mode

Utilizzo del seguente route nel Global.asax• {table}/{action}.

La {action} può avere i seguenti valori:• Edit• List• Details• Insert

Ogni operazione viene fatta in una pagina differente

Separate-Page Mode

routes.Add( new DynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary( new { action = "List|Details|Edit|Insert" }), Model = model });

Page 14: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1427/03/2009

» Combined Page Mode

Utilizzo del seguente route nel Global.asax• {table}/ListDetails.aspx

La pagina ListDetails è utilizzata per manipolare i dati e per visualizzarne il dettaglio.

Combined Page Mode

routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {

Action = PageAction.List,ViewName = "ListDetails", Model = model});

routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx"){

Action = PageAction.Details, ViewName = "ListDetails",Model = model});

Page 15: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1527/03/2009

» Combinazioni di Page Modes

Ogni entità/tabella può far uso di un suo specifico Page Mode Nel definire le regole di routing, l’ordine di inserimento è importante.

Combinazioni di Page Modes

routes.Add( new DynamicDataRoute(“Products/{action}.aspx") { Constraints = new RouteValueDictionary(

new { action= "List|Details|Edit|Insert" }),Model = model,Table= “Products” });

routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.List,

ViewName = "ListDetails", Model = model});

routes.Add( new DynamicDataRoute("{table}/ListDetails.aspx") { Action = PageAction.Details,

ViewName= "ListDetails",Model = model});

Non verrà eseguito in quanto ha lo stesso routing di quello precedente

Page 16: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1627/03/2009

» Fields Template

• Le pagine fanno uso dei FieldTemplates per visualizzare ed editare le informazioni• I controlli vengono iniettati a runtime

• I field templates sono specializzati per tipo di dato che devono visualizzare• Boolean checkbox• Relationshipdropdownlist• Textshow TextBox o Literal

Fields Template

Page 17: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1727/03/2009

» Fields Template

• Se non esiste un Field per un specifico tipo di dato, questo non verrà visualizzato• {tipoDato}.ascx• {tipoDato}_Edit.ascx

• Tramite l’attributo UHint è possibilespecificare quale Field Utilizzare• Per sostituire il Field di default• Per assegnare un Field per un tipo

sconosiuto

Fields Template

Page 18: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1827/03/2009

» Custom Pages Template

• Si possono creare dei nuovi templatedi pagina

• Devono seguire la seguente regola• DynamicData\CustomPages\{entity_name}\PageName.aspx

• Per associare una pagina ListDetails.aspxalla classe Suppliers• DynamicData\CustomPages\Suppliers\ListDetails.aspx

Custom Pages Template

Page 19: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 1927/03/2009

» Custom Pages Template

Custom Pages Template

<Columns> <asp:DynamicField DataField="CompanyName" /> <asp:DynamicField DataField="Phone" /> <asp:DynamicField DataField="Fax" /> <asp:DynamicField DataField="Products" /> </Columns>

Le pagine contengono DynamicField• Permettono di iniettare a runtime il controllo corretto

per visualizzare/editare il dato

Le pagine cusomizzate devono mantenere lo stesso nome di quelle orignali• ListDetails.aspx, Edit.aspx, List.aspx, ...• Lo stesso URL viene utilizzato per accedere sia alle pagine customizzate,

che ai template originali

Page 20: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2027/03/2009

» Custom Field Template

Custom Field Template

<asp:CalendarID="Calendar1" runat="server“ SelectedDate="<%# (FieldValue!=null)? FieldValue : DateTime.Now%>" VisibleDate="<%# (FieldValue!=null)? FieldValue : DateTime.Now%>"</asp:Calendar>

Oltre alle pagine è possibile modificare anche i FieldTemplate, in modo dapoter editare dei tipi custom, oppure per modificare il comportamento o aspetto di quelligià presenti• I nuovi FieldTemplate devono estendere la classe FieldTemplate UserControl

Utilizzare FieldValue per recuperare il valore da visualizzare Utilizzare l’override di ExtractValues() per scrivere i valori nel DB

protected override void ExtractValues(IOrderedDictionary dictionary) { dictionary[Column.Name] = ConvertEditedValue(Calendar1.SelectedDate.ToShortDateString());}

Page 21: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2127/03/2009

» MetaData application

MetaData application

using System;using System.ComponentModel.DataAnnotations;[MetadataType(typeof(EmployeeMetadata))]public partial class Employee{

}

public class EmployeeMetadata{ [UIHint("DateTimeCalendar")] public objectHireDate{ get; set; }}

I Dynamic Data utilizzano i MetaData per descrivere il Data Model. Tramite i MetaData possiamo andare ad aggiungere “caratteristiche” al nostro Data Model

• Si deve aggiungere i MetaData tramite una partial class

Page 22: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2227/03/2009

» Validazione

Validazione

Public partial class Customer { partial void OnTitleChanging(string value) { if(!Char.IsUpper(value[0])) throw new ValidationException("Title must start with an upper case letter."); }}

E’ possibili specifacare alcune validazioni tramite alcuni attributi inseriti nella classe dei MetaData• [Required()] • [Range(0,100)]

E’ possibile utilizzare gli eventi all’interno della partial class• Pattern On<Field>Changing, On<Field>Changed

public class CustomerMetadata{ [Required()] public object Title;}

Page 23: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2327/03/2009

» Validazione

Validazione

Public partial class Employee{ partial void OnValidate(System.Data.Linq.ChangeAction action) { if(action == System.Data.Linq.ChangeAction.Insert) { if(this._BirthDate.Value.CompareTo(DateTime.Now) > 0) throw new ValidationException(“The birth date cannot be in the future”); } }}

E’ possibile utilizzare l’evento OnValidate (globale, della classe)• Si è in grado di filtrare la validazione anche per ChangeAction

Le eccezzioni vengono gestite nella pagina e visualizzate in un SummaryValidator (all’interno della pagina)

Page 24: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2427/03/2009

» Conclusioni• I Dynamic Data facilitano la creazione di data-driven

website (che fanno uso di CRUD)• Aumentano la produttività in fase di sviluppo• Semplica la manutenzione dell’applicazione• Ampia possibilità di customizzazione

» Aspetti negativi• Non coprono tutte le casistiche di sviluppo, ma solo una

minima parte• In alcune applicazioni, ci si scontra con parecchi vincoli by

design (è la prima release)

Conclusioni

Page 25: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

3 Aprile 2009 Test Driven Development – Mauro Servienti

Novotel Venezia - Mestre

30 Aprile 2009 .NET Micro Framework – Mirco Vanini

Online – Live Meeting

8 Maggio 2009 NetTiers & code Generation – Davide Senatore

Novotel Venezia - Mestre

5 Giugno 2009 Programming C# 3.0 – Andrea Dottor

Novotel Venezia - Mestre

Prossimi Eventi

In collaborazione con

Page 26: ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.

www.xedotnet.org 2627/03/2009

Links

blog: blog.dottor.net

email: [email protected]

live messenger: [email protected]

community: http://www.xedotnet.org

Andrea Dottor