Da diversi anni che impiego con soddisfazione DotNetNuke per realizzare le più disparate applicazioni web: e-commerce, sistemi di prenotazione, raccolta dati, sondaggi ed integrazione con sistemi legacy. Il più delle volte, quando sento che molte persone mi dicono "non lo uso perchè è scritto in VB.net, ed io preferisco C#...", sorrido, perchè la cosa è del tutto ininfluente ai fini dello sviluppo di moduli esterni al core di DNN. E' sempre consigliabile, infatti, mantenere le personalizzazioni e le estensioni del portale al di fuori della parte core del framework di DNN, impiegando piuttosto nei nostri moduli le API messe a disposizione dal team di DNN.
Questo articolo vuole essere una linea guida per la creazione di moduli estensivi di DNN, sviluppati in linguaggio C#.
Innanzitutto: cos'è un modulo di DNN?
Cerchiamo di definire che cosa intendiamo con il termine "modulo": un modulo di DNN è a tutti gli effetti una web application che "vive" ospitata all'inteno del portale DotNetNuke. Un modulo di DNN non può vivere all'esterno del portale DNN e quando è ospitato all'interno del portale si avvale di tutti i "servizi" offerti dal CMS Framework. Un modulo è rispettoso dell' ambiente che lo ospita e per questo non deve richiedere modifiche all'ambiente stesso per funzionare. Può necessitare di strutture (tabelle stored Procedures) nel database (metabase) di DNN, oppure può accedere a database esterni per consumare dati provenienti da diverse fonti dati.
Un modulo è composto da una parte visuale (uno o più controlli utente .ascx) e da una parte compilata (uno o più assembly). Possono essere inoltre presenti dei files di risorse se il nostro modulo supporta la globalizzazione.
Prepariamo il terreno
La prima cosa da fare per iniziare lo sviluppo di moduli esterni a DNN consiste nell'installare la versione "install" di DNN. Non vi spiegherò come installare DNN: è piuttosto semplice, in quanto si tratta di unzippare il file all'interno di una directory e configurare una virtual directory. Per approfondimenti, scaricate la documentazione relativa a DNN all'indirizzo http://www.dotnetnuke.com.
Non installeremo la versione StarterKit perchè vogliamo:
- Mantenere separato il codice che scriveremo nei nostri moduli dal codice del Framework DNN
- Mantenere un ambiente di sviluppo il più simile possibile ad un ambiente di produzione (infatti consiglio di configurare IIS per far girare DNN)
Una volta installato, configurato e fatto girare DNN nel nostro browser, siamo pronti per cominciare il nostro lavoro: realizzare un modulo in C# per integrare nuove funzionalità in DNN.
Creiamo la soluzione
Creiamo la soluzione per cominciare lo sviluppo del modulo che andremo a sviluppare e successivamente ad installare in DNN. Il tipo di progetto che utilizzeremo sarà quello di un "ASP.NET Web Application", ovvero una applicazione web compilata. Ovviamente selezioneremo come linguaggio C#. In questo modo, quando compileremo il nostro modulo, andremo a produrre un assembly che potrà essere utilizzato senza alcun problema relativo alla differenza linguaggio impiegato dal il core di DNN e la nostra soluzione. Dovremo aggiungere alle Referenze del progetto l'assembly DotNetNuke.dll che contiene le API del DNN Framework. Naturalmente potremo aggiungere anche altri assembly, ad esempio l'AJAX control toolkit o altri assembly che ci potrebbero essere utili per lo sviluppo del nostro modulo.
Automatizziamo il development-deployment
Per automatizzare il processo di deployment durante lo sviluppo configureremo i Post-Build events, in modo da copiare i files modificati (ascx,resx, etc.) e le dll (compilate e/o referenziate dal nostro progetto) in modo totalmente automatico nei percorsi corretti all'interno dell'installazione del nostro portale. In questo modo, ad ogni compilazione aggiorneremo la nostra "installazione" di sviluppo. Solitamente i file ascx vanno copiati all'interno del folder DesktopModules/<NomeModulo> e gli assembly dentro alla folder bin.
Utilizziamo il debugger di VS 2008
Alle volte (molto spesso!!) i moduli vanno debuggati, e deve essere semplice ed immediato farlo. Grazie al tool "Attach to process", dopo aver impostato un breakpoint, sarà sufficiente connettersi al processo (w3wp.exe se stiamo usando IIS) che fa girare DNN e potremo utilizzare tutte le features del debugger di VS 2008 nel nostro modulo mentre questo "vive" ospitato all'interno del portale DotNetNuke. In questo modo potremo esaminare tutte le varie proprietà del modulo durante il suo ciclo di vita.
Installiamo il modulo in DNN
L'installazione del modulo in DNN è molto semplice; si tratta di autenticarsi su DNN come host e creare un nuovo modulo all'interno dell'anagrafica moduli. Registrato il modulo all'interno della relativa anagrafica, srà sufficiente collocarlo in una pagina per poterlo vedere ospitato all'interno del nostro portale. Una volta terminato lo sviluppo del modulo sarà possibile anche "pacchettizzarlo" per automatizzarne il deployment se si desidera distribuirlo in modo professionale.
Conclusioni
Sviluppare un modulo per DNN è un'operazione semplice e divertente. Sviluppare in C# ci permette di utilizzare il linguaggio più diffuso, svincolandoci dallo sviluppo forzato in VB.net, ma soprattutto ci dà la possibilità di scegliere. L'uso delle API di DNN ci consente di utilizzare tutto ciò che ci viene messo a disposizione dal DNN Framework: localizzazione, servizi di gestione e-mail, eccezioni, autenticazione ed autorizzazione, impaginazione e skinning. Per chi volesse approfondire l'argomento è possibile scaricare una semplice soluzione.