SubSonic 2.1 Stored Procedure Bug

SubSonic è un tool open(ci sono i sorgenti inclusi nel package di installazione) che fornisce un framework di accesso ai dati basato sul pattern ActiveRecords.

Risulta quindi una soluzione molto utile, veloce e semplice da utilizzare in progetti in cui non è un requisito l'avere una architettura per forza di cose "loosely coupled"(anche se da questo post l'autore dimostra come anche con SubSonic posso comunque realizzare architetture basate per esempio sul pattern Repository e mantenendo le indipendenze tra i vari layers).

L'ultima versione, la 2.1, presenta un bug durante l'esecuzione di stored procedures che abbiano parametri di tipo decimal con impostati lo "scale"(es. decimal(18,2)).

Qui c'e' il post relativo alla segnalazione, con relativa conferma di fix.

Purtroppo non ho trovato i sorgenti di queste ultime modifiche, che sembra saranno rilasciati in una futura versione 2.1.1.

La soluzione più veloce per me è stata quella di caricare con VS2008 i sorgenti di SubSonic(caricati come dicevo all'inizio durante l'installazione) e cercare di trovare il rimedio al bug in questione. Ecco dove correggere(la parte in bold), nella classe SubSonic.SqlDataProvider:

    private static void AddParams(SqlCommand cmd, QueryCommand qry)
        {
            if(qry.Parameters != null)
            {
                foreach(QueryParameter param in qry.Parameters)
                {
                    SqlParameter sqlParam = new SqlParameter(param.ParameterName, Utility.GetSqlDBType(param.DataType));
                    sqlParam.Direction = param.Mode;

                    //output parameters need to define a size
                    //our default is 50
                    if(sqlParam.Direction == ParameterDirection.Output || sqlParam.Direction == ParameterDirection.InputOutput)
                        sqlParam.Size = param.Size;

                    if(param.Precision != null)
                        sqlParam.Precision = Convert.ToByte(param.Precision);
                    if(param.Scale != null)
                        sqlParam.Scale = Convert.ToByte(param.Scale);

                    //fix for NULLs as parameter values
                    if(param.ParameterValue == null || Utility.IsMatch(param.ParameterValue.ToString(), "null"))
                        sqlParam.Value = DBNull.Value;
                    else if(param.DataType == DbType.Guid)
                    {
                        string paramValue = param.ParameterValue.ToString();
                        if(!String.IsNullOrEmpty(paramValue))
                        {
                            if(!Utility.IsMatch(paramValue, SqlSchemaVariable.DEFAULT))
                                sqlParam.Value = new Guid(param.ParameterValue.ToString());
                        }
                        else
                            sqlParam.Value = DBNull.Value;
                    }
                    else
                        sqlParam.Value = param.ParameterValue;

                    cmd.Parameters.Add(sqlParam);
                }
            }
        }

 

E' sufficiente ricompilare ed utilizzare il nuovo assembly.

del.icio.us Tags:

Do not read from the Sharepoint Database

Dal momento che mi capita spesso di spiegare ai clienti che non è consigliato e non è "best practice" interrogare direttamente i database di Sharepoint(bisogna in invece utilizzare il suo completo Object Model via codice), oggi ho finalmente trovato anche un post che ne spiega le motivazioni in modo molto più "ufficiale":

http://www.sharepoint-tips.com/2008/08/do-not-read-from-sharepoint-database.html

del.icio.us Tags:

Sharepoint Custom Editor Web Part development

Volevo segnalare due post interessanti per chi sviluppa web parts per Sharepoint(WSS 3.0 / MOSS 2007) ed ha la necessita di dover personalizzare la sezione di editing della web part.

 

EditorPart 101 descrive in breve come essere subito operativi e realizzare la propria EditorPart.

Creating custom editor parts for a SharePoint webpart , a complemento del primo post, oltre a descriviere come realizzare EditorPart illustra anche la soluzione ad alcuni problemi di sviluppo che hanno fatto perdere ore all'autore del post e risparmiare tempo a noi che leggiamo il suo prezioso post.

 

Share, share, share... lo metterei subito dopo lo slogan developer, developer, developer...

 

del.icio.us Tags: ,

Sviluppo web parts su Sharepoint: quali strumenti ?

Per uno dei progetti che sto seguendo ho dovuto sviluppare delle web parts personalizzate, che fossero tra loro "connectable" e che visualizzassero dei dati in tabella recuperandoli da Sql Server.

A parte la configurazione dell'ambiente di sviluppo (la tipica VM con tutto quanto serve), bisogna poi decidere come creare il progetto su Visual Studio per lo sviluppo ed il test "on the fly".

 

VSeWSS 1.2

La prima soluzione che ho adottato per lo sviluppo è stata quella di creare un progetto di tipo Web Part utilizzando VS 2008 e le Visual Studio Extension for WSS 3.0 versione 1.2.

L'utilizzo di VSeWSS 1.2 permette di non perdere tempo sui meccanismi che si celano dietro il deploy e l'attivazione di solutions e features e quindi ci si può dedicare full time allo sviluppo delle webparts.

Con un semplice F5 da VS si effettua il deploy della soluzione e l'attivazione delle feature per poter testare sul portale locale.

Si può in qualche modo personalizzare la configurazione delle feature, tramite la WSP view, ma con alcuni limiti, in particolare per quanto riguarda la configurazione della solution.

 

STSDEV

Con questo tools invece è possibile generare al volo lo "scheletro" di diversi tipi di progetti sharepoint, come per esempio un progetto di tipo web part.

Il progetto consente diversi tipi di compilazione, quali debugdeploy, solution upgrade, etc... e quindi risulta anche questo molto semplice e veloce in fase di sviluppo e test locale.

La differenza rispetto al precedente tools è che con STSDEV si deve "giocare" di più con la configurazione dei file xml che servono per generare solution e features, lasciando pero' una più ampia libertà di personalizzazione della configurazione.

 

Personalmente utilizzo STSDEV quando voglio avere maggiore controllo su solution e features che vado a creare. Per alcuni tipi di items sharepoint non gestiti da STSDEV uso comunque VSeWSS 1.2 e decido a sviluppo terminato se inglobare i files della soluzione di VSeWSS all'interno di un progetto creato con STSDEV.

Qui c'e' comunque un post che illustra un po più in dettaglio un parere su VSeWSS 1.2.

 

<complaint-mode level="high">
In entrambi i casi, lo sviluppo di web parts su sharepoint è ancora un lavoro troppo oneroso in termini di codice da scrivere! A parte soluzioni quali SmartPart o l'utilizzo di UserControl al volo, per il resto bisogna scrivere tonnellate di codice per creare i controlli, posizionarli, data-bindarli, etc...
</complaint-mode>

 

Qualcuno di voi che sviluppa Sharepoint utilizza altri metodi e/o strumenti ?

 

To The Sharepoint blog and Sharepoint Library Content

Segnalo questo blog di Sharepoint dedicato alla documentazione http://blogs.technet.com/tothesharepoint.

Da un post all'interno del blog http://blogs.technet.com/tothesharepoint/archive/2008/07/24/3093422.aspx segnalo la possibilità di scaricare un file in formato .chm(compiled help format) contenente tutti gli articoli ed in genere i contenuti della Tecnical Library dedicati a Sharepoint.

(PS. per aprire il .chm, una volta scaricato, leggete il commento al post)

MCPD WEB....e questa è fatta...

Dopo due anni senza fare esami, ma sempre impegnato su progetti Web con il framework .NET 2.0, a maggio ho deciso di far progredire la mia certificazione MCAD verso quella MCPD Web.

E cosi ho passato in questi due mesi i 3 esami necessari(lo so, c'era l'upgrade, ma ho preferito la strada più lunga...), di cui oggi l'ultimo, il 70-547, probabilmente quello un pò più difficile e quello per cui non mi ero praticamente preparato...

Ma alla fine quello che è stato importante per me nel corso dei vari esami è stato l'aver avuto l'esperienza diretta sui vari argomenti ed una conoscenza approfondita del framework...

 

Comunque....visto che da circa un anno lavoro sempre di più con WSS 3.0 e MOSS 2007...penso che i prossimi saranno proprio su Sharepoint....ma per ora nessuna data...vedremo...

 

del.icio.us Tags: ,

Sharepoint Magazine

Qui il sito, pronto per il lancio del 16 Luglio, di cui ho già sottoscritto il feed rss.

E sono diventato anche un "fan" del magazine su FaceBook, come già tanti altri...

 

Direttamente dal blog originale, l'invito a far parte del magazine:

 

Want to be part of the magazine and shape its future? Follow us on the networks below:

RSS Our main feed. In the future we will have separate feeds for different sections of the site, but this feed will be for ALL content.
Facebook This is our FaceBook fan page. Become a fan and collaborate with other fans.
LinkedIn This is our LinkedIn group. Join the group and network with like minded professionals
Twitter Follow Magazine updates through Twitter.

 

del.icio.us Tags:

Innovazione e Social Networking

Interessante questo post di Alfonso Fuggetta nella quale riporta un grafico che illustra da dove provengono le idee innovative utili all'azienda.

Dall'interno dell'azienda, dalle persone che ci lavorano a tutti i livelli possono emergere le opportunità di successo di una azienda e cosa la differenzia in positivo da altre.

E quale miglior vettore di questa tendenza è rappresentato dal Social Networking, o meglio ancora da quello che in questo caso si sviluppa dietro l'etichetta di Enterprise 2.0 ?

 

Con MOSS 2007 abbiamo i mattoni su cui realizzare condivisione, collaborazione e social networking aziendale. Basta crederci...

 

del.icio.us Tags: ,

MOSS 2007 CQWP: an XSLT function to split tags into url

Per un sito di Publishing realizzato con MOSS 2007 ho implementato una soluzione di tagging dei contenuti e per questo mi sono avvalso della soluzione fornita da Code Plex tramite il progetto CKS.

Di questa soluzione mi sono servito della sola web part TagCloud, in quanto per la lista risultante dal click su un tag ho dovuto utilizzare una Content Query Web Part personalizzata., dal momento che il tagging viene gestito a livello di pagina tramite un apposito Content Type di tipo Page che contiene il field Tags occorrente.

Nella lista realizzata con CQWP ho voluto visualizzare, per ogni item, la lista dei tags associati all'item, con anche la possibilità di cliccare sul tag singolo:

image

Per fare questo, avendo a disposizione il solo field Tags contenente la lista dei tags per l'item nel formato tag1,tag2,tag3..., ho dovuto mettere mano all' XSLT realizzando una funzione che mi formattasse la stringa nel seguente modo:

tag1, tag2, tag3,...   -->   <a href="url">tag1</a>, <a href="url">tag2</a>, <a href="url">tag3</a>, ...

La funzione XSLT l'ho inserita all'interno dell' ItemStyle.xsl utilizzato dalla CQWP:

   1:  <xsl:template name="splitIntoUrl">
   2:          <xsl:param name="string" />
   3:          <xsl:param name="url" />
   4:          <xsl:choose>
   5:          <xsl:when test="contains($string, ',')">
   6:              <xsl:variable name="nextString">
   7:                  &lt;/a&gt;
   8:                  <xsl:call-template name="splitIntoUrl">                                     
   9:                  <xsl:with-param name="string" select="substring-after($string, ',')" />
  10:                  <xsl:with-param name="url" select="$url" />
  11:                  </xsl:call-template>                              
  12:              </xsl:variable>        
  13:              &lt;a href="<xsl:value-of select="$url"></xsl:value-of><xsl:value-of select="substring-before($string, ',')" />"&gt;
  14:              <xsl:value-of select="concat(substring-before($string, ','), $nextString)" />
  15:          </xsl:when>
  16:          <xsl:otherwise>
  17:              &lt;a href="<xsl:value-of select="$url"></xsl:value-of><xsl:value-of select="$string" />"&gt;
  18:              <xsl:value-of select='$string' />
  19:              &lt;/a&gt;
  20:          </xsl:otherwise> 
  21:          </xsl:choose>                
  22:      </xsl:template>

dove il parametro "string" è il field Tags, mentre il parametro "url" è l'url che deve contenere il redirect del click sul tag.

Come dicevo, la CQWP utilizza un suo stile per renderizzarsi, ed è dove ho inserito la chiamata alla funzione per visualizzare i links:

   1:  <xsl:template name="MyCustomList" match="Row[@Style='MyCustomList']" mode="itemstyle">
   2:  ...
   3:  ...
   4:  <xsl:variable name="UrlTags">
   5:      <xsl:call-template name="splitIntoUrl">
   6:                     <xsl:with-param name="string" select="@Tags"/>  
   7:          <xsl:with-param name="url" select="string('Tags.aspx?tags=')"></xsl:with-param>
   8:      </xsl:call-template>
   9:  </xsl:variable>
  10:  ...
  11:  ...
  12:  <td>
  13:      <xsl:value-of select="$UrlTags" disable-output-escaping="yes"></xsl:value-of>
  14:  </td>
  15:  ...
  16:  ...
  17:  </xsl:template>


La funzione la posso riutilizzare ovunque dato che accetta l' url come parametro e quindi può essere associata ad altri template relativi ad altre CQWP per altri contenuti taggati.

Spero possa tornare utile.

del.icio.us Tags: ,

Qualche libro

I giorni scorsi ho comprato qualche libro da Amazon per rinfoltire la biblioteca interna aziendale e anche la mia personale.

Visto che ci occupiamo prevalentemente di sviluppo web(ASP.NET) e Sharepoint(MOSS 2007) ho comprato i seguenti libri:

Inside the Index and Search Engines: Microsoft® Office SharePoint® Server 2007 (PRO-Developer) (PRO-Developer) (PRO-Developer) [Paperback]
By: Patrick Tisseghem (Author), Lars Fastrup (Author)

Professional ASP.NET 3.5: In C# and VB (Programmer to Programmer) [Paperback]
by Bill Evjen (Author), Scott Hanselman (Author), Devin Rader (Author)

Programming Microsoft® LINQ (PRO-Developer) [Paperback]
By: Paolo Pialorsi (Author), Marco Russo (Author)

Per la mia biblioteca personale ho voluto tenermi stretto questi due:

Professional SharePoint 2007 Web Content Management Development: Building Publishing Sites with Office SharePoint Server 2007 [Paperback]
By: Andrew Connell (Author)

Getting Things Done: The Art of Stress-Free Productivity [Paperback]
By: David Allen (Author)

 

Ho scelto questi libri per via delle garanzie che mi danno gli autori: Patrick Tisseghem è una certezza per Sharepoint e l'ho tra l'altro ascoltato dal vivo lo scorso anno ad un evento in Microsoft; Scott Hanselman lo seguo da tempo tramite il suo blog ed è un personaggio ormai notissimo; Paolo Pialorsi e Marco Russo non hanno bisogno di presentazione e tra l'altro mi sono convinto del libro ascoltando la loro intervista al teched 2008; Andrew Connel, stesso discorso di Patrick.

L'ultimo libro invece l'ho preso per cercare di dare "ordine e priorità in modo efficiente"  ai miei progetti...

 

del.icio.us Tags: