counter free hit invisible
Welcome to MSDN Blogs Sign in | Join | Help
Silverlight 2 RC0 + ADO.NET Data Service + Entity Framework

Qualche giorno fa discutevo con un amico sulle seguenti problematiche:

  • Qual è il modo migliore da Silverlight 2 di fare una chiamata verso un servizio che espone dei dati provenienti da un database ?
  • Voglio poter serializzare le entità del mio modello dei dati ? Sì, ma non solo, voglio serializzare l’intero grafo di una relazione master/details. Devo costruirmi tutto a mano ?

Ok ,vediamo una possibile soluzione che adotta l’uso di ADO.NET Data Service (DS) e ADO.NET Entity Framework (rilasciati con la RTM della SP1 di Visual Studio 2008) e la RC0 di Silverlight 2, in quest’ultima versione, da poco rilasciata, sono infatti state aggiornate le librerie client che consentono di lavorare con gli ADO.NET Data Service.

Ma cosa sono gli ADO.NET Data Service?

Beh, per chi non li conosce vi consiglio di dare uno sguardo alla prima parte di questo webcast. In estrema sintesi però posso dire che i DS permettono un accesso REST verso sorgenti dato esposte , in questo caso con EF. In realtà basta una qualsiasi sorgente dati che supporti l’interfaccia IQueryable.

I DS mi consentono così di accedere via http/https con i semplici verbi GET, PUT, POST, DELETE ad una sorgente dati, che restituirà i dati in formato JSON o ATOMpubs.

Se ad esempio voglio recuperare l’elenco dei customers(le mie entità) posso effettuare una chiamata GET del tipo http://localhost:48248/SilverlightADOnetDataServicesDemo.Web/NorthwindWebDataService.svc/Customers , dove NorthwindWebDataService.svc è il servizio che espone la mia sorgente dati; se voglio che mi venga restituito l’elenco dei Customers, aggiungo “/Customers” alla chiamata GET del servizio.

Costruiamo un esempio

Vado veloce nella prima parte, perché mi aspetto sia più nota, alla fine di questo post trovate scaricabile l’esempio completo. Dunque Creiamo un’applicazione Silverlight 2, ricordate che però questo esempio funziona solo con la RC e non con la beta 2; facciamo in modo che oltre alla creazione del progetto Silverlight 2 venga creato anche il sito web ASP.NET, ora come prima cosa aggiungiamo un nuovo template ADO.NET Entity Data Model, come in figura

image

Il wizard vi guiderà fino alla scelta di un database, prendiamo Northwind, quindi alla scelta delle tabelle da inserire e scegliamo Cutomers e Orders, per avere una relazione del tipo (0,1) a Molti, quindi avremo:

image

Ok ora viene il bello, aggiungiamo un nuovo template ADO.NET Data Service, come in figura:

image

Chiamiamolo NorthwindWebDataService, o come vogliamo, a questo punto nel nostro progetto web ci troviamo più o meno quello indicato in figura:

image

Andiamo ora nel file .cs in figura NorthwindWebDataService.cs, in questo caso dobbiamo abilitare quali entità del nostro dominio applicativo vogliamo siano rese visibili all’esterno dai data Service. Per fare questo basta registrare come vedete nel codice seguente il modello dei dati e specificare quali permessi vogliamo vengano dati a quali entità. Nel mio esempio ho optato per la scelta più sbrigativa, attenzione a non fare lo stesso in produzione.

image

Ora possiamo fare qualche prova dal browser ed invocare il nostro servizio con delle chiamate come le seguenti: http://localhost:48248/SilverlightADOnetDataServicesDemo.Web/NorthwindWebDataService.svc/

che dà la lista delle entità esposte, aggiungendo in coda a questo url:

  • /Customers ottengo un file XML con l’elenco dei customers e le informazion su db
  • /Customers(‘ALFKI’) per avere le informazioni su uno specifico customer
  • /Customers?&expand=Orders : che dà l’elenco dei clienti ma anche i relativi ordini

In questo ultimo caso abbiamo proprio un esempio di quello che ci serviva: i clienti ed i relativi ordini in una sola chiamata; ok è da valutare quando questo sia o meno conveniente o se al limite si poteva raffinare la ricerca selezionando meglio solo alcuni clienti. Vi mostro comunque il risultato del browser , il primo riquadro è l’ID del primo customer e gli altri due sono gli id dei primi due ordini, potete immaginare il resto…

image

Il client, Silverlight 2 in questo caso

Bene, vediamo ora come chiamare gli ADO.NET Data Service da Silverlight 2 RC. Per essere completi dovrei aggiungere che posso utilizzarli, usando delle librerie client per AJAX e delle librerie client per Windows, quindi potrei usarli da WPF o da una Windows Form, oppure direttamente via http, anche se poi dovrei occuparmi del parsing del file XML o JSON.

Dal progetto SL aggiungiamo il riferimento all’ assembly System.Services.Data.Client.

Ora la mia applicazione SL si compone di due semplici ListBox, la prima che dà la lista dei clienti e la seconda la lista degli ordini per uno specifico cliente. Non vorrei soffermarmi sugli aspetti di databinding della UI, ma evidenziare come fare la chiamata da SL. Il modo più rapido è aggiungere un riferimento dal progetto Silverlight verso il servizio offerto dai Data Service, quindi verso il file .svc come se fosse un qualsiasi Web Service.

Ora nel code behind della pagina page.xaml.cs aggiungiamo queso codice:

image

La classe DataServiceContext si occupa di gestire il contesto della chiamata, facendo il tracking delle entità aggiunte etc. La seconda chiamata è quella vera e propria dove definiamo cosa vogliamo ottenere; dovreste vedere la stringa che prima chiamavamo dal browser; quindi definiamo la funzione di call-back che verrà invocata alla fine della chiamata asincrona.

image

La nostra funzione di call-back semplicemente aggancia una lista di oggetti Customers al DataContext della nostra prima lista, che mostra quindi l’elenco dei Customer (alcune informazioni).

Ora agganciamo all’evento SelectionChanged il fatto che vogliamo visualizzare gli ordini del cliente selezionato nella seconda lista.

image

Direi che il gioco è fatto, ecco la nostra applicazione funzionante: ok ammetto la grafica non è affascinante, ma spero di aver reso l’idea.

image

Conclusione

L’uso degli ADO.NET Data Services aiuta in molti scenari in cui si voglia esporre via REST sorgeti dati, offrendo un meccanismo che ne semplifica il modo d’interrogare, filtrare, ordinare e modificare la sorgente dati sottostante. Può essere usato sia per lo sviluppo per il web ma anche per Windows e insieme a Entity Framework consente anche la facile serializzazione di grafi con relazioni master/detail.

Potete scaricare il codice di esempio di questo post da qui.

I nuovi MVP

Il buon Alessandro, che ormai scrive in inglese :-) ha segnalato i nuovi Microsoft Most Valuable Professionals, di ottobre 2008, quindi non potevo che fare:

var italyMvp = from mvp in newMvp where mvp.Country == “Italy” select mvp;

Il cui risulato dà:

Name

Technical Expertise

Country

Alessio Leoncini

Client App Dev

Italy

Andrea Dottor

ASP/ASP.NET

Italy
Ermanno Goletto Directory Services Italy
Franco Leuzzi Windows Desktop Experience Italy
Mario De Ghetto Visual Basic Italy
Matteo Raumer Visual C# Italy
Simone Chiaretta ASP/ASP.NET Italy
Vito Arconzo Client App Dev Italy
Giuseppe Traficante Exchange Server Italy

 

Complimenti a tutti anche da parte mia!!

Mi sono salvato in extremis, anzi in Vista!

Questa mattina mi sveglio, faccio colazione, vesto la mia bimba etc, (altri particolari omessi) … oggi sono a casa, faccio Home Office e volevo approfittare della tranquillità per fare qualcosa diciamo così di “produttivo” –bene- vediamo di andare avanti con una presentazione che sto preparando o meglio con una demo … e fin qui tutto a posto, quindi accendo il computer e faccio per cancellare una directory che pensavo non mi servisse, un po’ distrattamente (era mattina presto) … dopo qualche secondo realizzo!  devo aver cancellato la directory che contiene proprio la demo che stavo preparando e che mi era già costata parecchie ore di lavoro! No, no non ci posso credere!   Ancora abbastanza calmo guardo subito nel cestino … e no, no, non c’è neanche lì … torno indietro con la mente no accidenti ho usato proprio quella sequenza di tasti … ma perchè,  non lo faccio mai.  Il panico comincia a farsi largo … ma sì io tengo tutte le demo e presentazioni sulla chiavetta, quella lenta… la prendo e  no, no, no, non c’è, ma come mai non l’ho salvata, almeno una parte, lo faccio sempre, come può essere successo.

Ok a questo punto ero assolutamente disperato, il racconto si farebbe cruento ( con me stesso) e già pensavo di usare strani toolletti che da anni non usavo più, di chiedere a Renato, di scrivere io un programmino, quando …

imageMa aspetta un attimo le “Previous Versions” ?

Eh sì, la storia finisce proprio così tasto destro sul folder che conteneva la directoy cancellata innavertitamente ed eccole lì: la lista per data delle modifiche fatte alla cartella. Ora basta fare un Restore oppure per maggiori scrupoli, fare la copia della versione che serve in un altro folder “et voilà” …

ora sto meglio :-)

Certe funzionalità non sono utili, fino a quando non servono.

Uno sguardo a ASP.NET Dynamic Data – parte 2

Nel primo post di questa serie abbiamo visto come realizzare una prima applicazione con ASP.NET Dynamic Data (DD). Come dicevo i DD sono pensati per scenari di rapida prototipazione, dove con poco realizziamo un sito completo partendo dalla basedati. Ci tengono a ricordare che questa è solo una possibilità in più, non in meno, possiamo naturalmente partire da zero usando WebForms o, quando sarà rilasciato, ASP.NET MVC e in base ai gusti scrivere più o meno codice oppure optare per un modello piuttosto che per l’altro.

Nonostante siano pensati per scenari RAD, però, i DD danno una buona possibilità di personalizzazione: in questo post vedremo come:

  • Esporre solo alcune tabelle
  • Visualizzare o meno le colonne delle tabelle esposte
  • Personalizzare il comportamento di visualizzazione delle colonne

Quali tabelle esporre

Usando l’attributo scaffoldAllTables nel global.asax abbiamo infatti esposto tutte le tabelle del nostro db. Potremmo, invece, operare selettivamente impostando a false tale attributo e andando a abilitare la/le singole tabelle. Per ogni tabella su db, LINQ to SQL, ha creato una classe partial, che possiamo vedere nel codice del file .dbml. Vediamo ora proprio come estendere queste classi, aggiungiamo un nuovo file Order.cs , che definisce una nuova classe parziale con qualche attributo in più, come mostrato nel seguito:

image

Il nuovo namespace System.ComponentModel.DataAnnotation consente di usare l’attributo ScaffoldTalble, con cui possiamo rendere o meno visibile la tabella ai DD. Quindi nel nostro caso abbiamo impostato l’attributo scaffoldAllTables in global.asax a false, mentre abbiamo impostato per la classe Order (e anche Product ) l’attributo ScaffoldTable a true. Se lanciamo l’applicazione ora vedremo “scovate” dai DD due tabelle, come in figura:

image

Controllare le colonne che vengono esposte

Se andiamo a vedere le colonne della tabella Orders, cliccando sul link, notiamo che sono presenti tutte le colonne definite nella tabella, nella figura vedete evidenziata anche la colonna shippedDate, che andremo a modificare nel seguito:

image

Se per qualche ragione non volessimo visualizzarla, ecco che possiamo operare sempre sulla classe parziale precedentemente definita, aggiungendo un attributo ScaffoldColumn, dal comportamento intuitivo, come mostrato in figura:

image

Questa volta abbiamo dovuto scrivere un po’ di codice in più (bene :-)), definire un MetadataType, una classe nella quale poi definiamo un po’ il comportamento relativo alla colonna ShippedDate. Il comportamento, a meno di errori :-), è quello atteso: se lanciamo il sito e andiamo nella tabella Order, non vederemo più  la colonnaShippedDate, l’attributo in questione, infatti, ha detto ai DD di non visualizzarlo più. Ometto l’immagine, potete immaginare …

Controlliamo il comportamento delle colonne

Il comportamento in fase di visualizzazione e modifica dei singoli campi della tabella è definito, come abbiamo visto nel primo post, dai template che si trovano nella directory DynamicData\FieldTemplate, dove trovate come viene visualizzato ogni campo di uno specifico tipo: guardate ad esempio il codice di Boolean.ascx e Boolean_Edit.ascx. Ora, se volessi modificare come vengono visualizzati i campi di uno specifico tipo di tutte le tabelle potrei modificare questi template, ma se volessi operare solo sul singolo campo (ShippedDate ad esempio) di una specifica tabella (Orders) potrei (come ho fatto) sfruttare alcuni meccanismi di estendibilità offerti dai DD. Guardate il pezzo di codice qui di seguito:

image

In questo caso sto usando l’attributo DisplayFormat per definire il formato di come deve essere visualizzato il campo in questione (la ShippedDate), in questo caso è una data che verrà visualizzata nel formato mostrato in figura. Inoltre grazie all’attributo UIHint sto indicando ai DD di non usare il template di default per il rendering dell’attributo, ma ho creato un nuovo field template che utilizza il controllo Calendar dell’ AJAX Control Toolkit. Non vi mostro il codice che ho usato per la personalizzazione del controllo, che non è molto, lo sto finendo di preparare per la sessione dei Microsoft Days 08. Il risultato visualizzato è il seguente:

image
Dove si nota il calendar in fase di editing della colonna ShippedDate.

Conclusione

In questo post avete visto come utilizzare alcune tecniche per personalizzare il comportamento di default dei DD, potendo non solo abilitare\disabilitare specifiche tabelle “scovate” dal runtime, ma anche personalizzando il singolo comportamento di un singolo campo di una specifica tabella, aprendo di fatto a molteplici utilizzi. I DD sono, in oltre, già compatibili con ASP.NET AJAX e anche con l’AJAX Control Toolkit, non ultimo potreste anche voler utilizzare controlli di terze parti per specifiche esigenze…. insomma non male, vero?

Uno sguardo a ASP.NET Dynamic Data – parte 1

Una delle novità presenti nella SP1 di .NET 3.5 sono i Dynamic Data (DD), o meglio ASP.NET Dynamic Data. In estrema sintesi i DD consentono di generare un sito web completo partendo da un modello dei dati. Vi è mai capitato di dover costruire un’applicazione web in poco tempo, niente di eccezionale, solo per poter permettere di fare operazioni di interrogazione e modifica su una sorgente dati?

Bene, i DD sono pensati proprio per questi scenari: si parte da un modello dei dati costruito con LINQ to SQL o Entity Framework (ma non solo..) e su questo, delle pagine aspx fungono da template generici, essendo in grado di capire quali tabelle sono presenti nel modello dei dati, di capire come sono fatte e di visualizzarle così come renderle modificabili. Esiste quindi un template unico (condiviso da tutte le tabelle) per le operazioni tipiche che su queste potremmo fare (interrogazione, modifica etc).

Un altro aspetto importante riguarda il motore di routing su cui si basano, che consente di non legare l’url che chiamiamo nel browser per richiedere una specifica pagina a dove la pagina fisica risieda oppure a come questa si chiami. Inoltre è possibile modificare il comportamento del motore di routing tramite delle regole, in un unico punto, senza dover modificare alcunché nelle singole pagine e come queste si richiamino tra di loro.

Partiamo con un semplice esempio:

Da Visual Studio 2008 SP1 ( oppure con Visual Web Development Express 2008 SP1) scegliamo uno dei due nuovi template disponibili:

image

Scegliamo Dynamic Data Web Application, perché pensiamo di generare il modello dei dati con LINQ to SQL, se volessimo usare Entity Framework dovremmo scegliere Dynamic Data Entities ….

Date ora un rapido sguardo al progetto generato che contiene la cartella DynamicData, che a sua volta contiene i template che vi dicevo sopra, in particolare guardate la sottocartella PageTemplates che contiene i template usati dai DD. Qui trovate una descrizione delle pagine incluse di default.

E’ interessante anche il folder FiledTemplate in cui trovate come viene eseguito il rendering di uno specifico tipo, ad esempio il file Boolean.ascx e Boolean_Edit.ascx contengono il codice che viene generato a runtime tutte le volte che si deve generare la parte di pagina che visualizza una colonna del database di tipo boolean e, come avrete capito, il comportamento cambia se siamo in fase di visualizzazione piuttosto che editing del campo. Quindi, in un unico punto, è stato centralizzato il comportamento per la visualizzazione e la modifica dei singoli campi delle tabelle del database. Posso modificare il codice qui e vedere le modifiche apportate ogni volta che viene visualizzata una colonna che fa riferimento ad un campo boolean su db, di una qualsiasi pagina che venga renderizzata. I DD hanno anche un meccanismo che consente di fare un po’ il contrario: di specificare cioè che un particolare campo boolean, di una particolare tabella sia visualizzato in modo completamente diverso che dagli altri. Vedremo meglio questo meccanismo di estendibilità in un altro post.

Per ora procediamo oltre e aggiungiamo un modello dei dati basato su LINQ to SQL. Dal menù: Add new Item, quindi scegliamo Linq to SQL Classes, “agganciamo” il nostro database Northwind, o quello che preferite, e senza preoccuparcene troppo facciamo drag & drop di tutte le tabelle, alla fine ci troviamo più o meno nella situazione in figura:

image

Nella figura trovate evidenziati il folder DynamicData e il file del modello dei Dati Northwind.dbml.

Ora andiamo nel file global.asax, semplicemente scommentiamo la riga di codice in cui informiamo i DD del nostro modello, “registrandolo” e aggiungendo il DataContext che mi ha creato il designer, NorthwindDataContext , imponendo a true l’attributo ScaffoldAllTables, che in soldoni dice ai DD di utilizzare tutte le tabelle del mio modello dei dati. E’ doveroso ricordare, come il commento nella stessa pagina global.asax ricorda, questa può non essere la cosa migliore da fare, ma per ora, per il mio esempio, può andare.

Premendo F5 vediamo la nostra applicazione già bella che fatta. In figura vedete la prima schermata che mostra l’elenco delle tabelle

image

Per renderci conto di quanto sia potente il meccanismo di discovery del modello dei dati usato dai DD, premiamo il link che ci porta alla tabella Products, la pagina list.aspx che viene invocata, è un template completamente generico, è in grado di visualizzare correttamente la tabella Products.

Nella seguente figura, ho evidenziato gli aspetti notevoli che i DD ci mettono a disposizione gratuitamente:

image

I DD si accorgono :

  • che la tabella Products ha una relazione di foreign-key con la tabella Category ed invece di mostrarci l’ID della Categoria, ad esempio 1 per il primo prodotto, ci mostra il nome della categoria, cioè Beverages. Potente, no! Lo stesso vale per Supplier.
  • Mettono a disposizione un menù per fare operazione di filtraggio: guardate Discontinued, Category, Supplier: che è generato dinamicamente in base a quali campi boolean e alle relazioni foreign-key presenti nella tabella prodotti.
  • Seguendo i link Edit, Delete e Details si giunge a delle pagine che servono proprio per le operazioni suddette, che ovviamente sono generate a partire dagli altri template, anch’essi generici e adattabili a qualsiasi tabella.

Il tutto finora semplicemente scrivendo una riga di codice nel file global.asax.

Il Routing

Se torniamo al file global.asax, noterete come viene generato l’url per navigare l’applicazione web generata:

image

L’url viene composto con il nome della tabella e il nome delle action, a cui viene aggiunta l’estensione aspx. Ora cos’è l’action ? Possiamo pensare alle action come alle azioni eseguite sulla pagina dall’utente. Esiste l’enum PageAction che contiene le action usate di default dai DD. Con un esempio si potrebbe dire che se l’utente clicca sul link Edit, per modificare come è fatto un singolo prodotto, la pagina esegue la relativa action PageAction.Edit e il motore di routing invoca la corrispondente pagina, nell’esempio sopra sarà dunque la pagina Edit.aspx, che trovate nel folder dei template in Page templates.

Per renderci conto di quanto sia flessibile il motore di routing, possiamo provare ad aggiungere due nuove regole. Le regole seguenti valgono solo sulla tabella “Supplier”.

image

Attenzione : le regole hanno una precedenza, quindi dobbiamo applicare queste due regole prima di quella presente di default che è più generica. Questa regola agisce quando scegliamo la tabella Supplier (durante la navigazione ). In questo caso sia che l’utente scelga di selezionare la lista di tutti i supplier (PageAction.List), che scelga di selezionare il singolo supplier (PageAction.Details), la pagina che la visualizza sarà la ListDetails.aspx (anche questa è una delle 4 pagine presenti di default nel folder Page Templates). Nella definizione della regola ViewName è il nome della pagina aspx (senza estensione) che deve farne il rendering. Mentre in verde vedete l’url che apparirà nella address bar del browser, che può essere quello che volete, in questo caso ho semplicemente rimosso l’estensione “.aspx” alla fine dell’url.

Conclusione

I DD vanno ad arricchire le funzionalità delle WebForms, offrendo un framework per realizzare applicazioni web data-driven. In questo post abbiamo visto brevemente come iniziare ad usarli vedendo i principi di base del loro funzionamento.

I DD offrono comunque un meccanismo che permette molte forme di personalizzazione, permettono di usare dei template particolari per fare il rendering di campi specifici di una tabella usando ad esempio i controlli dell’ AJAX Control Toolkit o di terze parti ad esempio per selezionare un calendario, oppure uno slider per decidere una quantità numerica. Le pagine degli ASP.NET Dynamic Data sono già pensate per sfruttare i controlli ASP.NET AJAX.

Altri attributi consentono di impostare delle regole di validazione sul modello dei dati, ad esempio posso impostare tali regole direttamente sulle proprietà delle classi generate da LINQ to SQL, creando delle partial class. Questo meccanismo consente di accentrare le regole di validazione, che poi “fluiscono” nella UI e valgono in qualsiasi pagina web si faccia riferimento a quella specifica classe...

Spero di avere stuzzicato la vostra curiosità , almeno per chi non ha ancora avuto modo di provare i nuovi ASP.NET Dynamic Data.

Link utili

MSDN library ASP.NET Dynamic Data

www.asp.net/dynamicdata/

2 chiacchiere

In queste mesi mi rendo conto di aver trascurato un po’ il mio blog, ok ci sono state le ferie, ma in effetti ero solito postare un po’ più spesso; me ne sono accorto anche perché ho ricevuto un insolito numero di mail: molto interessanti, grazie e spero che le risposte siano state utili :-) e di aver risposto a tutti.

Nelle ultime settimane in DPE, la divisione Microsoft per cui lavoro, siamo stati un po’ presi, complice il cambiamento del modo di lavorare, persone etc, insomma le solite cose che vi potete aspettare. Inoltre e soprattutto, stiamo lavorando agli eventi MSDN e TechNet dei prossimi mesi. Giusto per darvi qualche anticipazione ci sarà (ok queste informazioni sono completamente non-ufficiali :)) un Roadshow MSDN e TechNet in diverse città italiane tra Ottobre e Novembre dove si parlerà delle ultime novità: in particolare di .NET 3.5 SP1 e SQL Server 2008 e il tutto insieme a molte Community italiane! E’ anche già live il portale dei TechDays – WPC 2008, evento di approfondimento tecnologico che si svolgerà invece il 2-3-4 Dicembre. Quindi preparatevi: tenete monitorati i nostri blog, pronti a fissare le date in agenda. Ora che mi ricordo, ho anche registrato un webcast introduttivo (e sintetico) sulle novità della SP1, ma non è ancora disponibile per il download, quindi ci sarà da aspettare ancora un po’. Mauro mi sta anche conivolgendo in qualche attività con le università, ma per ora niente di certo.

Ma non è tutto qui, almeno per me :-) Sono alle prese con un cambio casa: potete solo immaginare quanti grattacapi; mi rincuora che in DPE non sono l’unico. Bene mi rendo conto che questo post è (quasi) completamente inutile … ma ormai l’ho scritto.

Supporto nativo JSON in Internet Explorer 8

Uno dei post che ho letto con più interesse sul blog del team di prodotto riguarda il supporto nativo a JSON di IE 8. JSON è un formato noto a chi sviluppa applicazioni AJAX, ma non solo … direi. In IE 8 sono state aggiunte una serie di nuove API native che consentono di aumentare le performance in fase di serializzazione e deserializzazione ed inoltre verificano il contenuto da deserializzare per “sanitizzare” da codice malevolo.

Le nuove API mantengono il supporto a JSON come descritto in ES3.1 Proposal Working Draft. Il motore è nuovo e non si basa sulla classica eval().

Quello che come sviluppatori web abbiamo a disposizione è un nuovo oggetto JSON con delle nuove API, ad esempio JSON.parse e JSON.stringify: la prima fa il parsing di una stringa che dovrebbe contenere dati in formato JSON e ne restituisce il corrispondente oggetto o array, mentre la seconda, fa un po’ l’inverso. L’elenco delle API con tutti i dettagli del caso la trovate al post che vi suggerivo di leggere.

Nel post trovate anche discusso il comportamento delle pagine che usano note librerie per la gestione del JSON come json2.js; la maggior parte di queste pagine trarrà vantaggio, senza modifica, di queste nuove API girando in modo più veloce, perché sfrutteranno il supporto nativo di IE 8. Per le pagine che hanno implementato una versione custom di un oggetto JSON sono discusse invece due possibile alternative da seguire.

Ok, non ho resistito a scrivere due righe di codice e farne il debug con i nuovi Dev tools inclusi in IE8. Sulla destra vedete i campi dell’oggetto JSON, risultato del parsing della stringa.

clip_image002

Attenzione:il valore del campo Age in figura è puramente indicativo e non attinente alla realtà … forse.

Internet Explorer 8 beta 2 : Developer’s Quick Guide

Ho collezionato una serie di link utili per capire le novità di Internet Explorer 8 e in particolare relativamente alla beta 2. Ho cercato di rendere il più ridotta possibile la lista dei link in modo da non perdere troppo tempo a rileggere le stesse cose.

  • What's New in Internet Explorer 8: qui trovate una carrellata di tutte le novità presenti in IE8 per sviluppatori e non solo, troverete segnato con un asterisco quelle relative alla beta 2.
  •  image Modalità di visualizzazione delle pagine (Document Compatibility): La compatibilità con gli standard ( in particolare CSS 2.1) è uno dei requisiti di progettazione di IE8; per garantire però che vengano visualizzate correttamente le pagine web realizzate per versioni precedenti del browser, IE 8 mette a disposizione diverse modalità di rendering della pagina. Il comportamento di IE 8 può essere influenzato dall’utente finale attraverso la Compatibility View, ma anche da chi sviluppa l’applicazione usando un tag <Meta> o un header http.
  • Document Compatibility: spiega come modificare la visualizzazione di IE 8 usando il tag o un header http
  • Introducing Compatibility View: parla della Compatibilità View, ma anche del nuovo parametro IE=EmulateIE8
  • image WebSlices: Cosa sono e come svilupparle
  • image Accelerators (le Activities della beta 1): Cosa sono e come svilupparli
  • Search Providers
  • Il filtro XSS: questo nuovo filtro è in grado di prevenire attacchi Type-1 Cross-Site Scripting. Leggendo il post che vi ho segnalato noterete che l'effetto per l'utente finale è di essere minimamente invasivo, così da non dover far compiere scelte difficoltose e a volte impossibili a molti. Come developer,  potete disabilitare questo filtro per le vostre pagine, mettendo un apposito header Http: X-XSS-Protection.
  • image IE 8 Developer Tools: è un’applicazione integrata in IE8 che consente di testare la pagina web visualizzata: HTML, CSS, Javascript e altro. In particolare è interessante la possibilità di testare il comportamento di una pagina nelle diverse modalità di visualizzazione di IE, il tutto in modo dinamico, modificando i parametri Browser Mode e Document Mode. Nel terzo ducumento viene spiegata la differenza tra queste due opzioni in apparenza poco chiare: la prima inluenza lo user agent e il version vector, mentre la seconda influenza il comportamento di IE in base alla presenza o meno del document tag eventualmente presente.

Testing di siti esistenti

Scarica la Internet Explorer Application Compatibility VPC Image che contiene anche una nuova immagine con Windows XP SP3 e IE8 Beta 2: queste immagini vi consentono di avere una macchina virtuale già pronta per fare il testing dei vostri siti con la beta 2 di IE8.

Se trovate qualche altro link utile su IE 8, lasciate pure un commento; nei prossimi giorni è probabile ci sia un maggiore aggiornamento della documentazione dalla beta1 alla beta 2.

IE 8 beta 2 – Visual Tour

La beta 2 di Internet Explorer 8 è stata rilasciata, ho pensato di prendere qualche screenshot per “illustrare” alcune funzionalità di IE8. Non sono tutte relative alla beta 2, ma …. Per maggiori informazioni qui e qui(in italiano).

Per gli aspetti più di sviluppo, aspettatevi qualche post  in seguito …

Bottone per la Compatibility View

image

 

Developer Tools

image

 

WebSlices

image

image

image

 

Accelerators (beta 2)

image

image

image

 

Visual Search & Suggestion (beta2)

image

 

Smart Address Bar (beta 2)

image

 

Find in Page

image

 

Crash Recovery e TabIsolation

Crash recovery and Tab Isolation

 

Domain Name in evidenza

image

 

Safety menù

image

 

Delete browsing History

image

 

InPrivate Browsing & Blocking (beta 2)

image

image

 

NewTab Window

image

 

Bottone “Diagnose Connection problems”

image

 

SmartScreen (beta 2)

SmartScreen - anti phishing

SmartScreen - Unsafe Download

 

Raggruppamento dei tab con colori (beta 2)

image

 

Download di Internet Explorer 8 beta 2

Scontenti di Windows Vista ?

Leggere qui: differenza tra percezione e realtà.

Microsoft SQL Server 2005 Driver for PHP v1.0 : rilasciato

Potete leggere la notizia dal blog del Team

Download del driver qui

Scarica i codici sorgenti da CodePlex

Potete leggere un articolo su come usarlo a questo link:  Accessing SQL Server Databases with PHP

Letture estive – parte 2

Per chi di voi durante l’estate è interessato ad approfondire/imparare ad usare WPF, ecco un paio di libri che apprezzo sull’argomento. WPF, come sapete, è una tecnologia che è stata inizialmente presentata con .NET 3.0, ma forse non è ancora ben conosciuta/usata da molti developer; personalemente la ritengo semplicemente straordinaria. Ammetto che quando mi ci sono avvicinato per la prima volta qualche anno fa, io, che ero abituato alle Windows Forms, l’ho trovata un po’ difficile; in realtà dopo poco, mi sono reso conto che, capiti i concetti più nuovi che ne sono alla base, si è rilevata incredibilmente soddisfacente e interessante se usata nelle moderne interfacce utente. So che molte aziende hanno investito molto in applicazioni che fanno uso di Windows Forms, ma grazie all’interoperabilità tra le due tecnologie, sono sicuramente interessanti anche approcci misti Windows Forms /WPF che sappiano prendere il meglio dell’una e dell’altra, rendendo possibile una modifica incrementale delle applicazioni esistenti.

Inoltre lo XAML usato da Silverlight 2 è un sottoinsieme di quello usato da WPF, e quindi come dire: si imparano due tecnolgie al costo (di apprendimento) di una :-)

Ecco  quindi i miei preferiti, ovviamente è un giuzio soggettivo:

image Il primo libro è di Adam Nathan, sicuramente interessante per chi inizia da zero con WPF, perché è molto ben spiegato,  scritto in modo chiaro, brillante e mi ha sempre colpito perché spiega il “perchè” delle tecnologia mettendone in luce vantaggi e scenari d’uso.

WPF Unleashed, Adam Nathan, partite da qui.

 

 

 

Pro WPF in C# 2008 by Matthew MacDonald: Book CoverIl secondo libro è decisamente molto completo, preciso e aggiornato con le novità di WPF introdotte con .NET 3.5. In questo libro trovate anche un capitolo sul Multithreading ed come utilizzare il nuovo modello degli Add-In introdotto con .NET 3.5.

Pro WPF in C# 2008, Matthew MacDonald

 

Buone letture

Open Source at Microsoft - II

Nel suo bellissimo post history.forward() Sam Ramji, Director Open Source Software Lab in Microsoft, ha reso noto i contenuti della sua keynote alla OSCON, una delle più grandi conferenze sull’ Open Source, con i recenti passi di Microsoft come contributor nel mondo Open Source. In sintesi:

  • Microsoft ha rilasciato una patch per ADOdb, una popolare libreria per l’accesso ai dati in PHP, con il supporto per SQL server, grazie al nuovo SQL Server Driver per PHP.
  • Un chiarimento alla Open Specification Promise al fine di renderne più chiara l’applicabilità ai developer.
  • Microsoft è diventata sponsor della Apache Software Foundation (ASF)

Quest’ultimo punto, in particolare, non va inteso come allontanamento da IIS, su cui Microsoft continua e continuerà ad investire con IIS 8.

Leggete l’annuncio completo con dettagli e chiarimenti qui.

Letture estive – parte I

imageOk, forse sono un po’ fissato, ma ammetto che da quando ero giovanissimo ho sempre dedicato parte del periodo estivo a letture “tecnologiche”; in effetti non sono proprio il tipo da gialli.

Spero di fare cosa gradita segnalandovi un po’ di libri sulle tecnologie più importanti per Microsoft e per il sottoscritto e quindi ecco il primo.

Nuovissimo libro su Silverlight 2, vi rimando direttamente al sito dell’ autore, Laurence Moroney, che ne descrive l’indice ed i contenuti e qualche anticipazione su un capitolo bonus…

Le mie sessioni ai Community Days 2008

Anche quest’anno in Microsoft Italia si svolgeranno i Community Days, l’appuntamento con alcune delle più note community italiane , per approfondire i temi più nuovi e di maggior interesse nell’ambito dello sviluppo .NET.

L’evento, completamente gratuito, si svolgerà il giorno 9 e 10 luglio. Il 9 mattina sarò presente anch’io con due sessione di cui trovate qualche anticipazione nel seguito:

Silverlight 2

clip_image002

Questa sessione è assolutamente “no-slide” e partirò da un’applicazione che svilupperò durante l’intera sessione e che mi darà la possibilità di parlare di Silverlight 2.

Windows Live

clip_image004

Ho già avuto modo di vedere che Windows Live è poco conosciuto al mondo dai developer e quindi è un vero piacere poterne parlare! Nella percezione comune il termine viene associato solo a una serire di servizi per utenti finali, come ad esempio il Messenger, l’aspetto interessante è che in questi anni Microsoft ha lavorato al fine di “aprire la piattaforma” e quindi sono disponibili una serie di API (web) e controlli multipiattaforma per l’accesso a tali servizi.

Nella sessione presenterò anche un controllo, non ancora scaricabile pubblicamente, che farà presto parte dei Windows Live Tools per Visual Studio 2008…. Un’anteprima da non perdere!

Le due sessioni sono quindi rivolte ad un pubblico di sviluppatori.

Conclusione

Le due giornate saranno molto ricche e se non l’avete già fatto vi conviene dare uno sguardo all’agenda, troverete sicuramente molte sessioni che vi interesseranno.

Quindi che dire …. non mancate!

Ciao e a presto

More Posts Next page »
Page view tracker