ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.
-
Upload
valentino-testa -
Category
Documents
-
view
237 -
download
0
Transcript of ASP.NET Dynamic Data »Andrea Dottor – Microsoft MVP ASP/ASP.NET.
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.
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
www.xedotnet.org 417/01/2008
» [FLICKR] Scaffolding:
FLICKR Scaffolding
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
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
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”
www.xedotnet.org 827/03/2009
» Creazione di un progetto Dynamic Data – passo 2
Creazione progetto
Aggiungere classi LINQ toSQL oppure Entity Data Model
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.
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 });
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.
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
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 });
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});
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
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
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
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
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
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());}
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
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;}
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)
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
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
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