Questa mattina in circa 4 ore ho scaricato la versione Professional...ora devo solo trovare il tempo di installarla....ed anche il coraggio, perchè ho intenzione di installarla sul mio portatile che uso per lavoro dove c'è già installato VS 2005.
Scott dice che le versioni coesistono, a parte uno script da lanciare per mantenere funzionante Ajax 1.0 con ASP.NET 2.0.
C'e' qualcuno che farà lo stesso...o tutti installeranno inVM ?
Oggi il messenger è uno degli strumenti di maggiore utilizzo in azienda, in quanto ci permette di comunicare tra colleghi e clienti in modo semplice e veloce.
L'idea è stata quella di poterlo utilizzare all'interno di un nostro nuovo prodotto web di eprocuremente dando la possibilità all'utente di visualizzare la classica icona del messenger relativamente agli ordini fatti dagli utenti che sono presenti nella sua lista contatti(del messenger).
L'utilità è ovvia: mentre un utente naviga nello storico ordini o negli ordini che deve autorizzare, puo' verificarne lo stato di presenza e di conseguenza contattare direttamente via messenger l'utente che ha fatto l'ordine.
Ho cosi realizzato un webcontrol per visualizzare in automatico l'icona di stato di un contatto(in base all'email), nascondendo nel controllo stesso le risorse javascript ed immagini necessarie a tale scopo.
Tutto semplice se non fosse per le difficoltà nel gestire le API del messenger, la scarsita di informazioni trovate a riguardo ed un vero grosso problema riguardante il funzionamento su Windows XP.
In pratica sembra che utilizzando l'activex Messenger.UIAutomation.1 che è il componente che permette l'automazione del messenger via script, non ci sia modo di usarlo senza "crashare" il browser se sono installate sia la versione base del messenger(che XP installa) che la versione Live Messenger(o MSN messenger).
Su Windows Vista non ci sono problemi, tutto funziona regolarmente.
Non ho avuto tempo di fare altre prove.Se qualcuno ha il tempo e la voglia di fare delle prove mi puo' contattare per avere i sorgenti del controllo web e fare tutti gli esperimenti del caso.
La crezione di controlli custom per ASP.NET mi ha sempre appassionato e fin dalla versione 1.1 di ASP.NET per vari progetti web che ho dovuto affrontare, mi sono sempre "costruito" la mia libreria di controlli personalizzata.
Si tratta spesso di estendere i controlli che il framework di ASP.NET ci mette a disposizione, ma per le esigenze "più estreme" è necessario a volte sviluppare ex-novo.
Con ASP.NET 2.0 abbiamo qualche classe base in più che ci facilita il lavoro nel caso volessimo implementare un controllo custom da zero.
E' il caso della classe CompositeDataBoundControl, la quale ci fornisce l'infrastruttura di base per la creazione ci controlli compositi che funzionino tramite "databinding".
Un esempio potrebbe essere un controllo che visualizzi dei tag in dimensione diversa in proporzione al "peso"(TagCloud).
In questo caso il CompositeDataBoundControl si adatta bene in quanto il controllo sarà costituito da una collection di hyperlink che verrà costruita sulla base di un datasource.
Sulla costruzione di controlli compositi ci sono parecchie referenze in rete, in particolare rimando a questo articolo di Dino Esposito.
Il problema che ho dovuto affrontare spesso, e che ogni volta dimentico, è come fare in modo che il controllo cosi creato persista dopo un postback generico nella pagina.
La soluzione non è banale, anche se alla fine si tratta solo di mettere il codice nella posizione corretta!
La creazione degli elementi che compongono il controllo custom avviene nel metodo CreateChildControl(IEnumerable dataSource, bool dataBinding).
Questo metodo viene invocato durante il ciclo di vita della pagina sia quando c'e' un "databind" diretto, sia quando siamo in una situazione di postback da parte di altri controlli(e non c'e' quindi un databind specifico).
Durante il databind il controllo deve poter effettuare il "tracking" del viewstate dei controlli che lo compongono, in modo che sui successivi postback possa ricrearsi correttamente:
if (dataSource != null)
{
CheckBoxList bookList = new CheckBoxList ();
Controls.Add (bookList); --> deve stare qui, altrimenti non c'e' Tracking del Viewstate
IEnumerator e = dataSource.GetEnumerator ();
while (e.MoveNext ())
{
if (dataBinding)
{
ListItem item = new ListItem();
... --> solo quando sono in data bind, non entra qui se c'e' un postback generico
}
}
Controls.Add (bookList); --> soluzione che viene spontanea, ma ERRATA.
}
Articoli di riferimento dalla quale ho preso spunto sono i seguenti:
http://aspnetresources.com/blog/composite_databound_control.aspx
http://scottonwriting.net/sowblog/posts/2129.aspx