Silverlight and Sharepoint 2010 a step forward 

Monday, November 01, 2010 4:21:00 PM

My 2nd article on the winning pair has been published on SilverlightShow. I think, and I hope, it is quite interesting because it shows how to use the Silverlight Client Object Model and some other things. In summary what you will find is:

  • query the Sharepoint object using the Silverlight Client Object model
  • fill a DataGrid with the List and Libraries of a Sharepoint site
  • drag & drop of one or more files from the file system into the Datagrid
  • upload of one or more files in the Sharepoint List corresponding to the DataGrid row selected when those files were dragged
  • another method to insert the Silverlight application in Sharepoint page
  • pass parameters from the host Sharepoint web part to the Silverlight application

You can read my article here and watch this video where I create the application which performs the tasks above.

By the way, here you can download the source code.

HomePage

Silverlight and Sharepoint 2010: Getting Started 

Monday, October 18, 2010 4:25:00 AM

Today my first article on Silverlight and Sharepoint 2010 has been published on SilverlightShow. 

In this article the reader takes the first steps in the use of Silverlight applications in SharePoint sites. He can see how to set up a development environment with Sharepoint Foundation and Visual Studio and how to use three different ways to add a Silverlight application to a web page of a Sharepoint site.

ContextMenu: every thing you always wanted to know about context menu but were afraid to ask  

Thursday, May 06, 2010 2:49:13 PM

One of the Xmas gifts of Silverlight 4 was the right mouse click support. Furthermore, we know that the April 2010 Silverlight toolkit release comes with a ContextMenu Control to be used in combination with the right click.  In my article on SilverlightShow I explain how to create and use the ContextMenu.


SilverlightShow.net: Anatomy of the ContextMenu: how it is made, how to use it and how to abuse it

Source code: download here

 

 

Aggiungere un profilo altimetrico alle Bing Maps 

Friday, March 19, 2010 2:13:47 PM


Recentemente ho giocato un pò con il Silverlight Bing Maps Control per vedere un pò cosa si potesse fare. In particolare mi interessava creare un profilo altimetrico di un percorso dati 2 o più punti o disegnato a mano libera.
Volevo scoprire se vi era modo di risalire facilmente alla quota di un punto date le sue coordinate geografiche (latitudine e longitudine). Sfortunatamente ho presto scoperto che tale informazione non veniva messa a disposizione pur esistendo all'interno del namespace Microsoft.Maps.MapControl, la classe Location (rappresentante una posizione geografica) e la relativa la property Altitude. Purtroppo tale property ritorna sempre zero e una veloce ricerca su msdn mi ha confermato essere riservata per usi futuri.


Scavando, scavando ho infine trovato una soluzione abbastanza carina. Divertitevi con questa DEMO in silverlight 3.
Se volete saperne di più leggete i miei 2 articoli su SilverlightShow:

How to extend Bing Maps Silverlight with an elevation profile graph - Part 1

 How to extend Bing Maps Silverlight with an elevation profile graph - Part 2

 UI of the application

Excel file viewer on Channel 9! 

Wednesday, February 03, 2010 12:18:00 PM

Capperi! Smile

Il mio articolo "An Excel file viewer in Silverlight 4" è finito su Channel 9:

Questa settimana infatti è stato incluso fra le "week's top developer news" che potete trovare a questo link.

Devo andare a festeggiare: polenta e coniglio a piene mani Laughing

Un Viewer di file Excel in silverlight 4 

Tuesday, January 26, 2010 5:16:56 AM

Durante le ultime vacanze natalizie mi sono messo a giochicchiare un pò con alcune delle novità di Silverlight 4. Mi sono detto: ma perchè non proviamo a fare un visualizzatore di file Excel? Così giusto per fare pratica sul campo?

La cosa è diventata ben presto piuttosto intrigante ed anche piuttosto impegnativa per il sottoscritto devo ammettere.
Ad ogni modo, alla fine sono riuscito ad arrivare a un qualcosa di presentabile e ne ho tratto un articolo in inglese che mi è stato pubblicato su Silverlightshow.net :

Articolo: An Excel file viewer in silverlight 4

Application: Excel file viewer

Demo movie:

Sources: ExcelViewer.zip

 

Un mio articolo su silverlightitalia.com 

Friday, January 22, 2010 11:35:35 AM

Segnalo con estremo piacere che Silverlightitalia.com ha pubblicato un mio articolo riguardante una personalizzazione del controllo Chart.

Vi rimando al link dell'articolo per tutti i dettagli.

RIA Services, Entity Framework 1.0 e Stored Procedures con parametri: come le mappo? 

Saturday, November 21, 2009 3:03:12 PM

Recentemente mi è capitato di usare i RIA Services poggiandomi su un DB MySql che conteneva alcune semplici Stored Procedures. Una di esse però richiedeva un paio di parametri in ingresso, un tipo INT e un tipo DATA.
Con VS 2008 SP1 mi sono costruito velocemente il mio Entity Model mappando le tabelle che mi interessavano, ma giunto al punto di mappare le Stored Procedures mi sono reso conto che l'IDE non mi dava la possibilità di impostare i parametri in ingresso alleStored Procedures; la finestra"Model Browser" infatti, permette sì di mappare le Stored Procedures tramite la comoda opzione "Create Function Import", ma solo quelle senza parametri in ingresso, mentre per le altre... attendere VS 2010 ed Entity Framework 4.0 mi dicono dalla regia.
Nel frattempo qualcosa bisognerà pur fare mi sono detto ed allora scavando scavando ho individuato una serie di passi da compiere per avere la tanto agognata SP con parametri correttamente mappata nell'EntityModel e richiamabile dal client Silverlight.

 1) Importare la SP con parametri nell'Entity Model:

  Come se nulla fosse usiamo la "Create Function Import", non importa se non ci lascia mappare i parametri in ingresso:
Stored Procedure mapping

 L'importante però è che il risultato venga mappato su una Entity che abbiamo già definito in precedenza:
Stored Procedure Return mapping 

 
2) Aprire il file <myEntityModel>.designer.cs e copiare...
Si, proprio così aprite il codice designer del vostro EM e copiatene il contenuto in un nuovo file .cs che chiamerete come volete. In questo nuovo file appena creato cancellate tutto tranne la partial class e i suoi costruttori e la funzione mappata sulla SP che l'IDE ha costruito per voi incurante dei parametri in ingresso. Ecco come appare la funzione nel mio esempio prima di metterci mano:

  public global::System.Data.Objects.ObjectResult<bt_trainings> GetTrainingUserDate() {
      return base.ExecuteFunction<bt_trainings>("GetTrainingUserDate");
}

3) Modificare la funzione mappata appena copiata nel nuovo file 
 Aggiungiamo i nostri parametri come nel mio esempio, facendo attenzione ad usare lo stesso nome di parametro usato per la stored procedure:

 public global::System.Data.Objects.ObjectResult<bt_trainings> GetTrainingUserDate(int IDUser, DateTime dt){
      ObjectParameter param1 = new ObjectParameter("iuser", IDUser);
      ObjectParameter param2 = new ObjectParameter("training_date", IDUser);
      ObjectParameter[] parameters = new ObjectParameter[] { param1, param2 };
      return base.ExecuteFunction<bt_trainings>("GetTrainingUserDate");
}

4) Modificare il DomainService di conseguenza

Abbiamo creato il nostro EM, abbiamo poi aggiunto una partial class copiandone la struttura dal code designer.cs generato dal compilatore e abbiamo modificato la funzione mappata affinchè accolga i parametri. Ora siamo pronti per generare il Domain Service, scegliendo da "Add/New Item" la categoria "Web" e il template "Domain Service Class".
Il file generato conterrà tutto quello che serve al client Silverlight per aggiungere, aggiornare o cancellare dati dal database ma niente che riguardi, ahimè, la Stored Procedure di cui sopra. Niente paura, basta aggiungerla come nell'esempio seguente:

public IEnumerable<bt_trainings> GetTrainingUserDate(int IDUser, DateTime dt) {
    ObjectResult objRes = myContextSP.GetTrainingUserDate(IDUser, dt);
    return (IEnumerable<bt_trainings>)myContextSP.GeTrainingsFromUser(IDUser);
}

dove myContextSP è un'istanza della partial class che mi sono creato al punto 2.

5) Richiamare la funzione mappata nel client Silverlight
 Siamo quasi arrivati; istanziamo il nostro Domain context, associamo un'entity (dello stesso tipo ritornato dalla nostra Stor Procedure con parametri) alla DataGrid che avremo inserito nella pagina. Carichiamo i dati richismando la funzione mappata sulla Stored Procedure ed il gioco è fatto! 

MyDomainContext myData = new MyDomainContext();
this.dataGrid1.ItemsSource = myData.bt_trainings;
 DateTime dt = new DateTime(2009,02,01);
 myData.Load(myData.GetTrainingUserDateQuery(1,dt));

 

SlideShow Album Manager: PARTE 3 - l'assemblaggio 

Sunday, October 25, 2009 3:58:11 AM
PARTE 1 | PARTE 2 | PARTE 3

Dopo aver definito nel primo articolo cosa volevo fare e descritti nel secondo articolo i principali componenti che volevo utilizzare ho fatto il punto della situazione sulle principali problematiche che avrei dovuto affrontare:

  1. Come faccio a scaricare il file xml di configurazione all'avvio?
  2. Come faccio a parsificare il file di configurazione?
  3. Come collego i dati contenuti nel file di configurazione alla mia AgDataGrid?
  4. Come faccio ad uploadare le immagini sul server e averne notifica nell'applicazione Silverlight sul client?
  5. Come faccio ad aggiornare il file di configurazione sul server?

 Di seguito come ho pensato di risolverle.

 1. scaricare il file xml di configurazione all'avvio
Prima di tutto ho inserito il nome del file fra i parametri iniziali dell'applicativo xap e ho sfruttato la classe WebClient aggiunta in Silverlight 3 per il download dello stesso. A ricezione avvenuta lo salvo in un IsolatedStorageFile per la successiva lettura altrimenti se il file non esiste la AgDataGrid rimane vuota e l'utente può solo inserire un nuovo album.

2. parsificare il file di configurazione in xml
Qui ho sfruttato la class XDocument di System.Xml.Linq per travasare il contenuto del file xml nei miei oggetti Album e slide. Di seguito la funzione che mette in pratica la cosa.

Xml file parsing

 Confesso di aver litigato un pò con la sintassi Linq prima di riuscire a fare una select dentro l'altra...

3. collegare i dati contenuti nel file di configurazione alla mia AgDataGrid
Dopo essermi creato la List<Album> come mostrato nel passo precedente, ho assegnato la stessa alla property "DataSource" dell'AgDataGrid. Per aggiornare le modifiche fatte nei campi editabili dall'utente della AgDataGrid non ho trovato niente di meglio da fare che gestire l'evento myControl_TextChanged di ogni TextBox e aggiornare di conseguenza la List<Album>.

4. uploadare le immagini sul server e ricevere notifica nell'applicazione Silverlight sul client
In questo caso ho dovuto fare una serie di modifiche all'applicazione Silverlight File Upload. Innanzitutto ho fatto in modo che il controllo server creasse la directory con il nome dell'album prima di uploadare le immagini. Poi per dare la notifica al client ho invocato dal controllo Server una funzione Javascript della pagina, la quale a sua volta richiama un metodo della applicazione Silverlight trasferendo ad ogni passaggio intermedio la lista dei files effettivamente caricati.

5. aggiornare il file di configurazione sul server
Dal codice di Silverlight File Upload ho estratto la parte dedicata al mero caricamento dei files creando una classe SimpleUpload semplificata. Questa classe in pratica lancia una HttpWebRequest asincrona e tramite callbacks gestisce il passaggio dello stream e la notifica del termine delle operazioni. Lo stream viene creato a partire dal file di configurazione xml precedentemente aggiornato e salvato in IsolatedStorageFile come nella porzione di codice seguente.

 Upload xml file

SlideShow Album Manager: PARTE 2 - i componenti utilizzati 

Friday, October 23, 2009 11:42:38 AM
PARTE 1 | PARTE 2 | PARTE 3

Definito nel precedente post cosa volevo fare, mi sono guardato in giro in cerca di qualche componente già pronto, ovviamente open source, che mi potesse aiutare.
La scelta è caduta sui seguenti:

  1. DevExpress AgDataGrid

  2.  
  3. Silverlight File Upload

 AgDataGrid è un'accattivante DataGrid control per Silverlight abbastanza ben customizzabile come si può vedere dalla figura seguente dove una riga della grid è stata trasformata in una anteprima.

AgDataGrid with preview

AgDataGrid è collegabile tramite la proprietà DataSource a una collezione qualsiasi che implementi una interfaccia IList o IEnumerable.
Ho deciso quindi di usarla come interfaccia principale della mia applicazione usando una List di oggetti Album.

A questo punto mi serviva qualcosa che consentisse all'utente di uploadare le proprie immagini con semplicità e Silverlight File Upload faceva al caso mio. Dotato di una interfaccia semplice e intuitiva consente l'upload multiplo con l'indicazione dello stato di avanzamento.

Silverlight File Uploader interface

Fornito insieme al controllo Server ASP.NET col quale dialoga per l'invio dei files, contiene anche una preview delle immagini che però ho preferito disattivare perchè limitata alle immagini jpg.

  

Page 1 of 2 1 2 > >>