Archivio

Archivio autore

BUG Sql2005: via le parentesi nei vincoli Check

12 luglio 2010 MarcoB Nessun commento

Se si tenta di creare o modificare un vincolo CHECK utilizzando Microsoft Sql Server Management Studio 2005 attenzione alle parentesi!

Lo strumento visuale elimina tutte le parentesi dell’espressione booleana, lasciando solo quelle esterne. Nessun problema per espressioni semplici, ma nel caso di logica più complessa o di alterazione della precedenza degli operatori sono guai. Ad esempio l’espressione:

(A AND B) OR (C AND D)
[Vero se A e B sono veri oppure se C e D sono veri]

verrebbe trasformata in

(A AND B OR C AND D)
[Vero se A è vero oppure se B o C sono veri o se D è vero]

con conseguente disastro.

In tal caso si risolve utilizzando la creazione del vincolo tramite script, come ad esempio:

ALTER TABLE [NomeTabella] WITH CHECK
ADD CONSTRAINT [CK_NomeVincolo] CHECK  ((A AND B) OR (C AND D))

Approfondendo ulteriormente si osserva che la colpa del bug non sembra tanto dello strumento visuale, quanto dello strumento che legge la definizione del vincolo dal database. Se si seleziona il vincolo nell’esploratore oggetti e si lancia il comando “Crea script per vincolo…” si ottiene uno script con lo stesso problema: parentesi scomparse!

Share

Report con MS Reporting Services facilmente adattabili a clienti diversi

8 luglio 2010 MarcoB Nessun commento

Scenario: stiamo lavorando ad un’applicazione .NET che verrà installata presso numerosi clienti e dobbiamo dotarla di stampe e reportistica che abbiano una struttura comune e aggiornabile, uguale per tutti i clienti. Allo stesso tempo ogni report dovrà essere facilmente personalizzato con colori, testi e loghi per adattarlo ad uno specifico cliente. Quando rilasceremo una nuova versione di tale report non vorremo perdere le personalizzazioni.

Utilizzo un progetto Visual Studio di Business Intelligence per i report (estensione rptproj), con le definizioni dei report nei file rdl.

Una tecnica semplice consiste nel portare all’esterno del report ogni elemento da modificare: un’immagine, un testo con il nome del cliente, ma anche un valore booleano con il quale possiamo dire al motore di rendering del report che un elemento deve essere nascosto o apparire. In pratica si può passare al report qualsiasi valore che possa entrare in un’espressione di Reporting Services.

Per passare tali valori differentemente da un’istallazione ad un’altra ho utilizzato una stored procedure che potremmo chiamare “Impostazioni”, con all’interno una select semplice, come la seguente:

SELECT 'Puntoit Servizi Informatici' as Nome, --nome del cliente
 'Via Stefanardo da Vimercate 19, 20128 Milano' As Indirizzo,
 '#1c3a70' as Colore1, --per titolo e elementi evidenziati
 'DarkGray' as Colore2, --per nome e indirizzo e ulteriori elementi evidenziati
 CAST(1 as bit) as Logo --1 visualizza, 0 nasconde il logo in alto a dx

Si crea un set di dati nel report che vada a leggerla, impiegando i campi in espressioni del report. Come si vede, non solo testo, ma anche colori e bit per visualizzare o meno il logo.

Per le immagini, ad esempio il logo, il lavoro è leggermente diverso. Si posiziona nel report un controllo immagine che punta ad un’immagine esterna con proporzioni definite, ad es. 3 di larghezza x 1 di altezza, con un nome fisso (“logo3x1.jpg”). Si crea un’immagine con un logo neutro, salvandola nella cartella del progetto Visual Studio dove risiede anche il file di definizione del report rdl.

L’ultima nota riguarda i colori. Anch’essi li ho personalizzati passandoli tramite la stored procedure.

E ora mettiamo tutto insieme. Una volta pubblicato il report si dovrà creare o modificare la stored procedure che genera i dati parametrizzati ed eventualmente sostituire l’immagine generica “logo3x1.jpg” con una con lo stesso nome contenente il logo del cliente. Il gioco è fatto. Se domani pubblicheremo una nuova definizione del report, con ad esempio una colonna in più in una tabella, lo potremmo fare per tutti i clienti, che vedranno la colonna in più e manterranno logo, colori, e testi personalizzati.

Ma attenzione ad un fastidioso limite del motore di rendering. Non è possibile inserire dati provenienti dall’esterno nella testata e nel piede del report. Se devono essere messi lì la cosa più semplice è creare parametri nella definizione del report e passarli tramite la query string che lancia il rendering.

Share

KooBoo CMS, promette davvero bene!

3 giugno 2010 MarcoB Nessun commento

Mi sono imbattuto recentemente in un nuovo CMS scritto in ASP.NET che promette davvero bene: il suo nome è KooBoo.

E’ relativamente giovane, un progetto nato nel 2008 e per questo ancora acerbo su alcuni aspetti, ma con un’architettura di prim’ordine! Utilizza il pattern MVC sfruttando le funzionalità introdotte con Microsoft .NET Framework 3.5 SP1 e lo fa davvero bene. Così almeno sembra.

L’ho installato in 15 minuti e ho iniziato subito a muovermi nella sua interfaccia di amministrazione, abbastanza intuitiva e soprattutto densa di funzioni.

Per chi è curioso segnalo il sito del progetto (per altro con licenza AGPL) ed il sito su codeplex.

Se qualcuno lo ha già utilizzato non esiti a contattarmi.

Share
Categorie:cms Tag: , ,

Spostare (o migrare) l’intero blog di Splinder

19 maggio 2010 MarcoB 2 commenti

Nel post precedente ho spiegato come ottenere la lista dei post di un blog su Splinder, magari in Excel. Da questa lista ho ottenuto l’elenco dei codici dei post. Ognuno ha un codice univoco che viene utilizzato nell’URL per visualizzare il singolo post, del tipo http://<nomeblog>.splinder.com/post/123456789.

Utilizzando tale URL ho scritto un programmino in C# che, dato un elenco di codici dei post, chiamasse la pagina relativa e ne catturasse la parte “interessante”, cioè post e commenti, scartando testata, spalle e piede della pagina. Ho anche inserito un temporizzatore tra una chiamata e l’altra, per non causare una raffica di chiamate a Splinder che potessero essere interpretate come DOS.

Ottenuta la porzione di HTML contenente il post l’ho elaborata con una raffica di sostituzioni utilizzando le espressioni regolari per ottenere un file XML pulito contenente l’intero blog. Questa è la parte più impegnativa, perché togliere o sostituire i tag HTML senza corrompere i dati è un’operazione da condurre con molta cautela.

Sono a caccia di idee per migliorare questa fase di pulizia.

Il prossimo passaggio sarà l’importazione verso Blogger. Ma questa si preannuncia una strada in discesa, con le API di Google e la loro documentazione.

Share

Esportare la lista dei post da Splinder

7 maggio 2010 MarcoB Nessun commento

Splinder non brilla per le funzioni che espone ai gestori dei suoi blog.

Di recente mi è capitato di dover esportare l’elenco dei post per analizzare quali avessero il maggior numero di commenti.

Sono riuscito a portarli in excel in questo modo. Mi sono loggato, sono andato nella sezione Blog / Organizza / Post, dove appare un elenco dei post, massimo 20 alla volta. Se il blog contiene più di n post, dove n è il numero di post da visualizzare, appare in fondo alla lista il selettore per cambiare pagina. Passandoci sopra con il mouse, pulsante destro in Firefox, si copia l’indirizzo e lo si incolla in una nuova scheda del browser (ad es. http://www.splinder.com/myblog/edit/manage/<numero>/5?&limit=5). Sostituendo “5?&limit=5″ con “0?&limit=x”, dove x è il numero totale dei post del blog, si ottiene un elenco totale dei post.

Se poi questo url modificato lo si copia nello strumento query web di Excel e si sceglie di importare la sola tabella contenente l’elenco dei post si ottiene in Excel l’elenco dei nostri post, con autore, data, titolo (troncato), incipit e numero di commenti.

Per ora è tutto, ma presto dovrò occuparmi di esportare da Splinder l’intero contentuto di un blog. Ne riparleremo.

Share