Belius' Blog

Il blog di Simone Belia
posts - 16, comments - 167, trackbacks - 62

Monday, February 11, 2008

Visual Studio 2008 Roadshow.....

....a Perugia.

Microsoft ha confermato l'evento ed ha pubblicato l'agenda nel sito.

http://www.microsoft.com/italy/launch2008/xml/after_perugia.htm

Se siete da queste parti l'8 aprile.....perchè non ci fate un salto?

P.S. Scusate la mia mancanza dal blog in quest'ultimo periodo.....cercherò di rimediare! :-)

posted @ Monday, February 11, 2008 3:39 PM | Feedback (15) | Filed Under [ Eventi ]

Thursday, December 6, 2007

[OT] Buon Natale a tutti.....

....è prestino....ma volevo già iniziare a fare gli auguri a tutti quanti

http://www.elfyourself.com/?id=1190319580

Buona visione :-)

posted @ Thursday, December 6, 2007 10:02 AM | Feedback (16) | Filed Under [ Funny ]

Saturday, December 1, 2007

1° evento dotNetUmbria

Ieri è stato il giorno del primo evento della nuova community dotNetUmbria.org.

Un grazie ad Andrea e a Paolo per l'organizzazione e per la volontà di aver creato il primo user group umbro dedicato alle tecnologie .NET.

Un altro grazie a Pietro Brambati che con immenza pazienza ha risposto a tutte le mie domande in merito alle scelte future di Microsoft ed in merito all'Entity Framework che gli amanti degli ORM come me stanno aspettando impazientemente.

E' stato sicuramente interessante soprattutto perchè è stato finalmente possibile conoscere altri "Umbri" che lavorano nel campo IT e che hanno la volontà di crescere insieme.

 

 

posted @ Saturday, December 1, 2007 7:59 PM | Feedback (21) | Filed Under [ Eventi ]

Tuesday, November 27, 2007

NHibernate 1.2.1GA

Ieri è stata rilasciata la versione 1.2.1GA e la potete trovare a questo indirizzo:

http://sourceforge.net/project/showfiles.php?group_id=73818&package_id=73969

Di aggiunte non ha, hanno solo corretto alcuni bug, ma la bella notizia è che stavano aspettando di rilasciare questa release per iniziare a dedicarsi pesantemente alla versione 2.0.....e li si che ci sarà da divertirsi.

A questo indirizzo potete trovare quelle che saranno le nuove funzionalità...e non sono poche.
Leggete anche i feedback ce n'è uno di Fabio Maulo che integra il post.

 

posted @ Tuesday, November 27, 2007 6:16 PM | Feedback (92) | Filed Under [ NHibernate ]

Friday, November 16, 2007

Recuperare solo i valori essenziali con Nhibernate

L'infrastruttura di NHibernate ci permette di recuperare con pochi sforzi le informazioni che stanno nel DB sottoforma di nostre classi opportunamente istruite.

Bene....e che c'è di nuovo?
Nulla....ma ipotizziamo questo:

Ho una classe Customer che contiene 40 proprietà (non associazioni) che la descrivono.
Ora voglio che in un menu a tendina della mia applicazione vengano inseriti tutti i Customer così da farne scegliere uno all'utente.

In questo scenario quello che mi serve è solo l'ID del customer ed il suo nome....allora perchè caricarsi tutti quanti i suoi dati?

Negli ultimi progetti che ho sviluppato con NHibernate ho cercato di trovare una metodologia per venire incontro a questa comune problematica in maniera "comoda" e "tipizzata"....e spero che quello che ho fatto possa rilevarsi utile anche per voi!!! :-)

Per prima cosa mi sono costruito una classe generica che mi permetta di descrivere i miei valori: 

public class NameValueDTO<Tv, Tn>
{
   private Tn _name;
   private Tv _value; 

   public Tn Name 
   { 
      get { return _name; } 
   } 
        
   public Tv Value 
   { 
      get { return _value; } 
   }

   public NameValueDTO(Tv value, Tn name)
   {
      _name = name;
      _value = value;
   }
}

Successivamente mi sono costruito un metodo generico rappresentante la classe per la quale voglio estrapolare i valori (nel nostro caso Customer) ed al quale passerò il nome della proprietà dell'oggetto che vorrò visualizzare.

public IList<NameValueDTO<int,string>> GetNameValue<T>(string propName)
{
   ICriteria criteria = _session.CreateCriteria(typeof(T));
   ProjectionList pl = Projections.ProjectionList();
                        
   pl.Add(Projections.Id());
   pl.Add(Projections.Property(propName));
   criteria.SetProjection(pl);
                        
   criteria.SetResultTransformer(new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
               typeof(NameValueDTO<int,string>).GetConstructors()[0]));

   return criteria.List<NameValueDTO<int, string>>();
}
 

Esaminiamo il codice.
La prima istruzione crea un oggeto Criteria basandosi sul tipo della classe che ho passatto come parametro del generic.
Successviamente creo una ProjectionList che mi servirà per incapsulare i campi che desidero "aggregare" (anche se non è la parola giusta in questo esempio....:-)).

L'istruzione successiva è la più interessante.
SetResultTransformer dice ad NH di trasformare (AliasToBeanConstructorResultTransformer) i valori di ritorno dalla query istanziare nel tipo di oggetto che gli ho specificato (typeof(NameValueDTO<int,string>)) utilizzando il primo costruttore GetConstructors()[0];

A questo punto il gioco è fatto....richiamando il metodo GetNameValue mi verrà ritornata la mia bella collezione con solo i campi richiesti.

 

posted @ Friday, November 16, 2007 6:57 PM | Feedback (10) | Filed Under [ NHibernate ]

Wednesday, November 7, 2007

[Tools] FileHelpers

Marco mi ha segnalato questa libreria free per gestire il caricamento di un file di testo in una forma strong-typed di una nostra classe o viceversa serializzare una classe in un file di testo semplicemente corredando con degli attributi le proprietà della nostra classe.

Detto così può sembrare riduttivo, ma controllate il sito e vedrete che risolve tanti problemucci..... :-)

 

posted @ Wednesday, November 7, 2007 7:29 PM | Feedback (20) | Filed Under [ Tools ]

Friday, November 2, 2007

Janky....colpisce ancora!!!!

Lunedì e martedì scorso sono stato al Mastering Enterprise .NET Web Application tenuto presso ObjectWay dal sempre più preparato (e sempre più meritato MVP) Janky.....

Più che soffermarsi su una problematica specifica l'intento del corso è stato quello di dare una panoramica a 360° di quelle che sono le problematiche e quelle che sono le soluzioni attuali (e le prospettive future) per creare applicazioni di un certo livello.

C'è da dire che se da un lato abbiamo visto che ASP.NET è pronto per affrontare certe problematiche dall'altro ha fatto vedere ancora una volta come Microsoft cerca sempre di andare controtendenza per poi tornare sui suoi passi (vedi pattern MVC).
Quello che mi ha fatto molto piacere è che sia io che tutti i partecipanti (compreso Janky) abbiamo tutti la stessa diffidenza rispetto a mamma Microsoft su alcune scelte, come per esempio la volontà di far diventare tutti sviluppatori tramite i Drag&Drop, cosa che riteniamo tutti assolutamente impossibile.

In ogni caso grazie Giancarlo della tua disponibilità e della tua umiltà (non si trova molto facilmente in giro) ed un saluto a tutti partecipanti del corso che ho conosciuto.

Simone

P.S. Unico rimprovero? ObjectWay non puoi mandare Janky da un cliente appena finito il corso.....si rischia solo di far fare le cose di fretta, anche perchè è più che normale che alla fine di un corso si sfori di una mezz'oretta per le domande ed i saluti!!! :-)

posted @ Friday, November 2, 2007 8:42 AM | Feedback (26) |

Tuesday, October 16, 2007

[UPDATE] NHibernate complex queries

Pochi giorni fa avevo scritto un post  su come creare degli oggetti che incapsulassero le informazioni per filtrare dei dati in NH (e non solo).

Questo post non è altro che una piccolissima aggiunta con l'implementazione di una classe che rappresenta l'ordine dei risultati della query.

Il concetto è quello di avere una classe che contenga il campo da ordinare e la direzione di ordinamento (espressa tramite un enum).

public class OrderField
{
     
private string _field = string.Empty;
     private 
OrderDirection _direction OrderDirection.Asc;

     public string 
Field
     {
         
get return _field}
         
set { _field = value; }
     }

     
public OrderDirection Direction
     {
         
get return _direction}
         
set { _direction = value; }
     }

     
public OrderField(string field, OrderDirection direction)
     {
         _field 
field;
         
_direction direction;
     
}
}

 

public enum OrderDirection
{
      Asc,
      Desc
}
 
Visto che potrebbero verificarsi numerosi casi in cui un solo campo non basta ai fini dell'ordinamento, ho pensato fosse utile implementare una collezione che dasse la possibilità di recuperare in un colpo tutta la stringa di ordinamento.

 

public class OrderFieldList: List<OrderField>
{
      
public override string ToString()
      {
          StringBuilder sb 
= new StringBuilder("");
          if 
(this.Count >0)
          {
              sb.Append(
"ORDER BY ");
              foreach 
(OrderField of in this)
              {
                  sb.AppendFormat(
"{0} {1},", of.Field, of.Direction.ToString());
              
}

              sb.Remove(sb.Length-
11);
          
}

          
return sb.ToString();
     
}
}
 
 
 ...e per finire la sua implementazione ai fini pratici è:
 
string hql "select c from Customer c where c.Country = :country"

                
OrderFieldList ofl = new OrderFieldList();
ofl.Add(new OrderField("BirthDate", OrderDirection.Desc));
ofl.Add(new OrderField("LastName", OrderDirection.Asc));

hql +ofl.ToString();

//..........
//..........
//..........
....a presto!!!

posted @ Tuesday, October 16, 2007 1:37 PM | Feedback (28) | Filed Under [ ASP.NET Tips ]

Monday, October 15, 2007

Dynamic Data Controls for ASP.NET

Microsoft ha messo a disposizione da poco tempo un'estensione di ASP.NET chiamata Dynamic Data Controls.
Questa estensione non è altro che una libreria di controlli che collegandosi ad un DB ne recupera lo schema e genera a runtime tutte le pagine che sono necessarie al dataentry e la visualizzazione delle tabelle.

L'estensione potete trovarla a questo indirizzo:  http://www.asp.net/downloads/futures/

Ancora una volta le scelte che fa Microsoft mi fatto restare a bocca aperta. Stanno lavorando moltissimo su LINQ e l'EF eppure tirano fuori un set di controlli che vanno completamente contro al DDD.

[Pensiero] :-)
...valà, non dirmi che anche i dipendenti Ms hanno il vicino rompi che gli dice...."dai fammi un programmino per la gestione dei miei dvd...tanto per te che ci capisci è un attimo".
Se questo fosse, allora mi scuso e ringrazio!!

posted @ Monday, October 15, 2007 9:35 AM | Feedback (84) | Filed Under [ ASP.NET ]

Friday, October 12, 2007

ASP.NET AJAX File Download

Molte volte è necessario permettere agli utenti di scaricare dei file dalle nostre applicazioni ASP.NET, in maniera un pò più elaborata del semplice link alla risorsa. Mettete per esempio che il file da scaricare non esista, ma viene generato durante il postback, oppure mettete che per sicurezza i file stanno all'interno di una cartella del server non raggiungibile tramite Http.

Le metodologie per venire incontro a queste problematiche sono state documentate tantissime volte, ma se voglio utilizzarle con AJAX si devono utilizzare dei trucchetti, proprio perchè, come per l'upload di file, AJAX non permette il download asincrono delle risorse....

In questo post troverete uno di questi trucchetti...e spero che vi faccia comodo come lo ha fatto a me!!! :-)

Il trucchetto consiste di crearsi un HttpHandler che si occupi di recuperare la risorsa e che la restituisca sottoforma di stream nella Response. Logicamente l'handler potendo accedere al contesto e quindi il QueryString e quant'altro potrà effettuare tutti suoi controlli di sicurezza prima di restituire il file.....non me ne vogliano...ma in poche parole non fate come loro  :-)

Successivamente nelle pagine dove è presente uno scriptmanager ed uno o più updatepanel si dovrà aggiungere questo frammento di codice JavaScript:

function GetFile(parm)
{
   var iframe = document.createElement("iframe");
   iframe.src = "Downloader.ashx?id=" + parm;
   iframe.style.display = "none";
  document.body.appendChild(iframe);
}

Il Javascript non fa altro che creare un tag iframe, impostare come src il nostro handler ed aggiungerlo alla pagina. In questa maniera noi possiamo tranquillamente aggiungere ad un bottone che si occupa di scaricare il file il seguente codice:


ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "download", "GetFile('5648752168497');", true);

che "dice" allo scriptmanager della pagina di eseguire la funzione Javascript GetFile passandogli come parametro (in questo esempio un numerone di prova) un qualcosa che vi permetta di capire quale file scaricare.

 

Il codice di esempio lo potete scaricare da qui

posted @ Friday, October 12, 2007 11:55 AM | Feedback (20) | Filed Under [ ASP.NET AJAX Tips ]

Powered by:
Powered By Subtext Powered By ASP.NET