Codice e slide della sessione Write less do more...with jQuery

by Andrea 08 March 2010 01:35

Ecco disponibile per il download il codice e le slide della mia sessione "Write less do more...with jQuery" tenuta venerdì 5 Marzo 2010.

Tags: , ,

.NET | ASP .NET | Generale | XeDotNet

Reporting Services - creazione di uno snapshot

by Andrea 25 February 2010 08:46

Come scritto nel post precedente, stò dando all'utente finale la possibilità di gestirsi gli snapshot direttamente dall'applicazione, ed ora tocca alla fase di creazione di uno snapshot.

Come ben sapete (e come ho scritto in questo post) gli snapshot vengono creati utilizzando i valori di default dei parametri.
Reporting Services fornisce la possibilità di forzare la creazione di uno snapshot tramite il metodo CreateReportHistorySnapshot, che si comporta esattamente come il pulsante presente nel sito di sharepoint di Reporting, che crea lo snapshot utilizzando i valori dei parametri in quel preciso istante (quindi facendo uso dei valori di default).

Ma se volessimo eseguire uno snapshot che abbia diversi parametri?
E' il caso in cui il report abbia le date o dei filtri calcolati in automatico, magari perchè deve venire eseguito con i dati della settimana precedente, o del mese precedente. Però Il cliente potrebbe avere la necessità di rigenerare il report riferito ad un perioso diverso (magari di 2 settimane prima).
In questo caso si può intervenire andando a modificare da codice i valori di default dei parametri del report, e dopo aver eseguito lo snapshot, ripristinarli ai valori normali.

Ecco qui il codice da qui potete prendere spunto:

   1: using (ReportingService2005SoapClient rs = this.CreateReportingService2005SoapClient())
   2: {
   3:     string batchID = string.Empty;
   4:     ServerInfoHeader infoHeader = rs.CreateBatch(out batchID);
   5:     BatchHeader bh = new BatchHeader()
   6:     {
   7:         BatchID = batchID,
   8:         AnyAttr = infoHeader.AnyAttr
   9:     };
  10:     CatalogItem[] items = null;
  11:     rs.ListChildren(reportFolder, true, out items);
  12:  
  13:     foreach (var item in items)
  14:         if (string.Compare(item.ID, reportId.ToString(), true) == 0)
  15:         {
  16:             // recupero gli attuali parametri e mi tengo una copia degli originali
  17:             ReportParameter[] defaultParameters = null;
  18:             ReportParameter[] parameters = null;
  19:             rs.GetReportParameters(item.Path, null, false, null, null, out defaultParameters);
  20:             rs.GetReportParameters(item.Path, null, false, null, null, out parameters);
  21:  
  22:  
  23:             foreach (ReportParameter parameter in parameters)
  24:             {
  25:                 //modifico i valori dei parametri che voglio cambiare
  26:                 if (string.Compare(parameter.Name, "dateStart", true) == 0)
  27:                     parameter.DefaultValues = new string[] { string.Format("{0:s}", startDate) };
  28:                 else if (string.Compare(parameter.Name, "dateEnd", true) == 0)
  29:                     parameter.DefaultValues = new string[] { string.Format("{0:s}", endDate) };
  30:             }
  31:             // setto i parametri modificati nel report
  32:             rs.SetReportParameters(bh, item.Path, parameters);
  33:             string historyId = string.Empty;
  34:             Warning[] warnings = null;
  35:             // creo lo snapshot
  36:             rs.CreateReportHistorySnapshot(bh, item.Path, out historyId, out warnings);
  37:             // setto i parametri originali
  38:             rs.SetReportParameters(bh, item.Path, defaultParameters);
  39:             // eseguo il tutto sotto un'unica transazione
  40:             rs.ExecuteBatch(bh);
  41:             return;
  42:         }
  43: }

Faccio notare che il tutto viene eseuito sotto un'unica transazione al comando rs.ExecuteBatch(bh), e in caso di errori, il report continuerebbe ad avere i suoi normali valori di default e non i valori da noi modificati.

Technorati Tags: ,

Tags:

SQL Server | Reporting Services | .NET

Reporting Services - cancellare uno snapshot da codice

by Andrea 24 February 2010 03:49

Può capitare di voler dare la possibilità all'utente di cancellare uno snapshot di un determinato report, e dargli la possibilità di farlo direttamente dall'applicazione che abbiamo realizzato.

Oggi mi sono scontrato con questa problematica, e uscirne non è stato proprio immediato a causa della scarsa documentazione a riguardo. Spero quindi che questo post sia utili a qualcuno.

Nella classe ReportingService2005SoapClient (del proxy generato verso il WebService di Reporting Services) esiste un metodo DeleteReportHistorySnapshot che si occupa per l'appunto di cancellare un preciso snapshot (DeleteReportHistorySnapshot), ma il come utilizzarlo è stato un pò oscuro.

Ecco qui il codice finale, che recupera il path del report, conoscendone l'id (scorrendo i report contenuti in una precisa cartella), e successivamente richiama la cancellazione dello snapshot avente l'historyId conosciuto.

   1: using (ReportingService2005SoapClient rs = this.CreateReportingService2005SoapClient())
   2: {                
   3:     string batchID = string.Empty;
   4:     ServerInfoHeader infoHeader = rs.CreateBatch(out batchID);
   5:     BatchHeader bh = new BatchHeader()
   6:     {
   7:         BatchID = batchID,
   8:         AnyAttr = infoHeader.AnyAttr
   9:     };
  10:  
  11:     CatalogItem[] items = null;
  12:     rs.ListChildren(reportFolder, true, out items);
  13:  
  14:     foreach (var item in items)
  15:         if (string.Compare(item.ID, reportId.ToString(), true) == 0)
  16:         {
  17:             rs.DeleteReportHistorySnapshot(bh, item.Path, historyId);
  18:             rs.ExecuteBatch(bh);
  19:         }
  20: }

La difficoltà è stata nel capire cosa fosse il BachHeader, e il di dover chiamare rs.ExecuteBatch,  che si occupa di lanciare i comandi che sono stati inviati utilizzando lo stesso BatchHeader sotto un'unica transazione. Non avendo mai fatto uso (in passato) di metodi a cui viene passato un oggetto BatchHeader, questa soluzione non mi è venuta proprio spontanea.

Ecco un link a riguardo delle operazioni eseguite in batch in reporting services: Batching Methods

Tags:

SQL Server | Reporting Services | .NET

BlogEngine.NET 1.6.0 è stato rilasciato

by Andrea 02 February 2010 00:17

benlogo80 E' da molto che seguo questo progetto, e chi mi segue, sa che ne ho scritto una guida pubblicata su html.it (Guida BlogEngine.NET).
L'ultima release di questo engine risale alla versione 1.5.0 del 13 Aprile 2009 (veramente datata), ma per poter usufruire/conoscere/testare le varie funzionalità aggiunte a BlogEngine.NET, ho sempre tenuto aggiornato questo blog con l'ultima versione di sviluppo, e vi posso assicurare che ha fatto dei notevoli passa avanti.

E' con gran piacere che oggi apprendo (BlogEngine.NET 1.6.0 is Released)  che è stata rilasciata una nuova release, la 1.6.0, con parecchie novità.
Tra le più importanti troviamo l'inserimento di un filtro per i commenti, che di default viene fatto con le Akismet, ma anche con regole custom, e con la possibilità di svilupparsi dei proprio filtri.
Altra novità, che attendevo da molto è la presenza di una pagina per la moderazione/gestione dei commenti, evitando quindi di dover andare nelle pagine dei post.
Ma le novità non si fermano qui, ed ecco la lista completa:

  • Centralized Comment Management
  • Automated Comment Spam Filtering with ability to plug-in custom Filtering modules
  • Multiple Widget Zones
  • Referrers data and Blogroll items now stored in Database when using the DB blog provider.
  • Unsubscribe Link in Comment Notification Emails
  • Referrer Data can be Stored for more than 7 days.
  • Blogroll items can now be Ordered.
  • Newsletter Widget more Intelligent - Emails sent when a post is going from an Unpublished to Published state.
  • Twitter Widget - New options and improvements
  • Page Slugs now saved in Database.
  • New Logging system to Track events and errors.
  • Unhandled Exception Handling
  • Fixes to Comment Notification Emails not being sent out correctly in some cases.
  • Outgoing Email improvements
  • Many other improvements and fixes

Ecco quindi il link per il download di BlogEngine.NET 1.6.0: download

Technorati Tags:

Tags:

Sito | .NET | ASP .NET

Linq to Facebook

by Andrea 28 January 2010 08:07

LinqToFacebook Visto la mia scoperta a riguardo di Linq to Twitter, mi sono chiesto se qualcuno avesse anche scritto un provider LINQ per Facebook, ed ecco che sempre da codeplex spunta il progetto LINQ to FQL, un provider di LINQ che si interfaccia direttamente con le API di Facebook.

Un articolo a riguardo di questa libreria lo trovate a questo link su codeproject:
Facebook Developer Toolkit LINQ to FQL Addon
mentre direttamente su CodeRun trovate il codice disponibile per testare subito la libreria:
CodeRun - LINQ to Facebook

Ed ecco un esempio di sintassi:

   1: var db = new FacebookDataContext();
   2: //LINQ Query Syntax
   3: var myUser = from user in db.user where user.uid == db.uid select user;
   4: //LINQ Method Syntax (the same query)
   5: var myUser2 = db.user.Where(t => t.uid == db.uid);

Una cosa che non condivido a pieno di questa libreria, è l'aver mantenuto gli stessi nomi degli oggetti e proprietà utilizzati da Facebook, mentre io avrei preferito fossero stati rinominati con qualcosa di più leggibile/parlante (e che rispetti le Naming Convention). Capisco altresì che uno sviluppatore, in questo modo, può utilizzare la stessa documentazione delle API di Facebook per capirne il significato e l'utilità.

Technorati Tags:

Tags: , ,

.NET | ASP .NET | Internet

Codice e slide della sessione su ASP.NET Dynamic Data 4.0

by Andrea 28 January 2010 01:03

Con un bel pò di ritardo, ecco il materiale del community meeting che ho tenuto il 11 Dicembre 2009 riguardante ASP.NET Dynamic Data 4.0. Per qualsiasi domanda potete contattarmi, o cosa migliore, utilizzare il forum di ASP.NET italiano http://social.microsoft.com/Forums/it-IT/aspnetit/.

Per il download:
- codice (Visual Studio 2010 - ASP.NET 4.0): Codice Dynamic Data 4.0
- slide (Power Point 2010): Slide Dynamic Data 4.0

Nella sessione (e in un precedente post) avevo consigliato di seguire alcuni blog (del team di sviluppo e di MVP su ASP.NET), che contengono post veramente utili con soluzioni alle problematiche più ricorrenti, ma anche solo per tenervi aggiornati a riguardo delle prossime/nuove funzionalità.

Mentre, per alcune delle risorse/soluzioni viste durante la sessione, i link di interesse sono i seguenti (i sorgenti dei progetti che trovate a questi link sono compresi nel download del codice sorgente della sessione, ma ovviamente aggiornati a dicembre 2009):

Tags: , ,

XeDotNet | Microsoft | .NET | ASP .NET

Linq to Twitter

by Andrea 27 January 2010 06:36

LinqToTwitter Cercando una libreria per interfacciarmi con le API di Twitter, sono venuto a conoscenza di un provider per LINQ chiamato LINQ to Twitter, che esegue le chiamate verso il noto social network.
Questo provider permette quindi di tradurre una sintassi LINQ in una chiamata verso le API REST di Twitter, in modo del tutto trasparente, facilitando/velocizzando notevolmente le fasi di sviluppo (e aggiungerei anche, migliorando la lettura del codice).

Il progetto è disponibile a questo link: LINQ to Twitter

Un esempio di codice (completo di autenticazione semplice) è il seguente, dove andremo a recuperare gli ultimi tweets degli amici:

   1: var authorization = new UsernamePasswordSimpleAuthorization()
   2: {
   3:     UserName = ConfigurationManager.AppSettings["twitterConsumerKey"],
   4:     Password = ConfigurationManager.AppSettings["twitterConsumerSecret"]
   5: };
   6: authorization.SignOn();
   7:  
   8: using (TwitterContext tc = new TwitterContext(authorization))
   9: {
  10:     var publicTweets = (from tweet in tc.Status
  11:                         where tweet.Type == StatusType.Friends
  12:                         select tweet).ToList();
  13: }

Dando uno sguardo al codice, il progetto sembra davvero completo (a differenza di molte altre librerie che non vengono aggiornate dal 2007), e sopratutto, fornisce pieno accesso alle funzionalità di Twitter:

  • Status
  • User
  • Direct Messages
  • Friendship
  • Social Graph
  • Account
  • Twitter Search
  • Authentication

Technorati Tags:

Tags: ,

.NET | ASP .NET

La mia prima (semplice) applicazione in Silverlight

by Andrea 26 January 2010 06:44

Ecco la mia prima applicazione svilluppata in Silverlight. Niente di chissà che, ma almeno ho avuto modo di vedere/provare:

  • Layout - Posizionamento dei controlli. In questo caso, molto semplice, utilizzando una Grid. Silverlight Layout System
  • VisualStateManager - Utilizzato per il cambio di stato nel MouseEnter e MouseLeave nei controlli Image. Semplifica davvero di molto la gestione degli stati.
    VisualStateManager Class
  • Storyboard - Realizzazioni di animazioni per gli efetti di transizione.
    Silverlight animations
  • Styles e Resource - Inserite le proprietà comuni a più controlli all'interno delle risorse del controllo contenitore, in modo da poter cambiare l'aspetto dei controlli intervenendo in un'unico punto. Venendo dal web, questo rispecchia l'uso dei fogli di stile nelle pagine html.
    Style Class

Il codice sorgente è disponibile a questo link: Download Dottor.SocialNetworks

Ho preferito iniziare da un'applicativo semplice, in quanto è stato più chiaro (per me) capire il ruolo di ogni elemento all'interno della pagina e il rispettivo ruolo. Lo xaml finale, è risultato chiaro e di facile lettura, e spero possa essere d'aiuto anche a chi si trovasse nella mia stessa situazione, e stesse iniziando ora lo studio di Silverlight.

Tags:

ASP .NET | .NET | Microsoft

Non tutto è fattibile, ma è meglio saperlo

by Andrea 22 January 2010 08:38

Per le mie prove stò utilizzando Silverlight 3.0, e mi sono bloccato nel tentativo di fare alcune cose che credevo ovvie...modifiche che in una pagina HTML sarebbero state davvero banali. Fortunatamente è un'applicazione di test, e quindi ho la libertà di modificare/stravolgere il tutto a mio piacimento.

Text wrapText wrap. Volevo inserire un'immagine, e fare in modo che un testo occupasse il rimanente spazio, andando ad occupare anche lo spazio sotto l'immagine. Ebbene questo con la versione attuale non sembra possibile, se non facendo qualche acrocchio (del tipo dividere il testo per linee, e gestire manualmente le nuove linee). Sembra però che questa funzionalità sia presente in Silverlight 4.

Border dashed. Volevo che il solo lato destro delle celle della grid avesse il bordo tratteggiato (simile a quello che accade avendo ShowGridLines="True" in una Grid, ma per un solo lato della cella). Con il controllo Border questo non è possibile, si deve utilizzare un workaround utilizzando un Rectangle. http://forums.silverlight.net/forums/t/5574.aspx

Sono solo alcune cose (banali), ma davvero mi hanno bloccato per parecchio tempo. Ragionando nel classico modo (ASP.NET, HTML, CSS) credevo fossero fattibili e in breve tempo, mentre con silverlight mi sono trovato di fronte ad un muro.
A causa di queste problematiche ho dovuto rivedere e modificare il layout che avevo in testa, e quindi, lezione imparata...silverlight ha alcuni limiti che è bene conoscere. :-D
Ecco perchè è bene prendersi del tempo e scrivere codice, tanto codice, in modo da capire quali siano questi limiti, e conoscere per bene una nuova tecnologia/funzionalità.

Tags:

ASP .NET | .NET

Da dove cominciare con Silverlight

by Andrea 21 January 2010 02:13

images_microsoft_silverlight Da alcuni giorni ho iniziato a studiarmi Silverlight. Ho sempre seguito sessioni, articoli e blog, ma non avevo mai trovato il tempo per studiarlo come si deve, e poterlo applicare.
Esistono molte tecnologie, ogni giorno ne escono di nuove, e non è facile seguirle tutte…per questo motivo avevo sempre trascurato Silverlight, ma finalmente è arrivato il momento.

Mi sono allora posto la domanda: da dove comincio il mio studio?

Il punto di partenza è il sito stesso di silverlight http://silverlight.net, che ha una sezione apposita Learn, e per chi riesce a seguire i video in inglese, è davvero ottima.

Visto che abbiamo molte risorse in italiano, ho preferito iniziare guardando i video presenti nel percorso formativo su Silverlight che trovate a questo link, che poi sarà da approfondire e integrare con un bel pò di prove.

Silverlight - Introduzione
Silverlight - Introduzione a XAML
Silverlight - Scripting
Silverlight - Tecniche avanzate
Silverlight 2 (beta 2) – Iniziare a sviluppare
Silverlight 2 (beta 2) – Costruire la User Interface
Silverlight 2 (beta 2) – La User Interface e il DataBinding
Silverlight 2 (beta 2) - Il Networking
Silverlight 2 (beta 2) – Expression Blend 2.5 per “developer”
Silverlight 2 (beta 2) – Gestione degli errori

Per aggiornarsi poi alla versione 3.0 di Silverlight ho trovato utile i webcast presenti su BE IT
Silverlight 3.0 su BE IT fatti da Andrea Boschin e Pietro Brambati.

Silverlight 3 - Introduzione
Silverlight 3 - Out of browser experience
Silverlight 3 - Local connections
Silverlight 3 - DataBinding
Silverlight 3 - Creare immagini con le Bitmap API
Silverlight 3 - Usare Binary XML con WCF
Silverlight 3 - Creare Behaviors con Blend SDK
Silverlight 3 - Overview del ClientHttpStack
Silverlight 3 - Application Services
Silverlight 3 - Uso e personalizzazione della DataForm
Silverlight 3 - Novità grafiche: 3d transform, EasingFunctions, Effect & Shaders
Silverlight 3 - Overview delle Navigation Application
Silverlight 3 - Costruire business application

Ovviamente questi webcast offrono delle buone basi di partenza, per poi cominciare a sviluppare con Silverlight, ma c'è anche bisogno sbattere la testa direttamente nella scrittura del codice, realizzando molte (e molte) applicazione di test/esempio che permettono di prendere confidenza con xaml e con Blend.

Oltre ai webcast, consiglio di seguire e leggere anche alcuni blog:

Se avete trovato utili ulteriori risorse, non esitate a scriverlo, in quanto potrebbe essere un'informazione utile sia a me, che ad altre persone che seguono questo blog. ;-)

Technorati Tags: ,

Tags:

ASP .NET | .NET