lunedì 29 dicembre 2008

Rilasciato DotNetNuke 5.0.0

E' stata rilasciata la versione 5.0.0 di DOtNetNuke con una serie di fix e nuove funzionalità. Vi lascio alla news ufficiale.


Major Highlights

Added jQuery support to the core
platform. jQuery will now be distributed as part of the DotNetNuke installation
and will be available for use by module developers.
Added support for
Internet Explorer 8 Web Slices. Administrators can configure any module to use
IE8 Web Slices including the ability to set time-to-live and expiration values.
Removed distinction between admin modules and pages and normal pages. This
allows administrators to easily delegate access to any portion of the
application to any group of users.
Updated the installation services to
support manifest files for all extension types. Now skins, containers, providers
and modules are all first class citizens that can be installed and uninstalled.
Expanded XHTML, WCAG and ADA compliance.
Refactored core to improve
support for Unit Testing. Refactored several core classes to use interfaces and
added a simple component factory to provide dependency injection support.
Added ability to deny permissions in the permissions grid. This new feature
extends the permission framework to give administrators greater flexibility in
defining permissions.
Added Widget framework. The new Widget framework
allows you to quickly add JavaScript/html widgets to your site with very little
effort. The framework supports the use of a simple object tag based
representation which means you don’t have to know JavaScript in order to add the
widgets.
Added new Object notation for using skin objects in Skins. Skin
designers will no longer need to include separate XML files when creating and
packaging skins. No more funky “[SKINOBJECT]” tags littering your html. This
significantly simplifies the process of creating skins and further opens up skin
development to a broader group of designers. If you include a simple JavaScript
reference in your HTML skin, you can even get a full WYSIWYG experience when
designing your skin.
Security Fixes

Includes a rollup of all
4.x security fixes
Updated Modules/Providers


The following
modules and providers have been updated in the 5.0.0 packages. Please see the
specific project pages for notes on what bugs or enhancements were corrected
with each release.

Providers

AD Authentication
Provider 05.00.00

domenica 14 dicembre 2008

Localizzazione dei moduli

Ci sono due modi differemti per localizzare il testo all'interno di un modulo DotNetNuke. Il primo è quello di utilizzare il controllo DNN:Label di DotNetNuke che rende a video il testo e da la possibilità anche di impostare una descrizione di Help che compare alla pressione dell'icona accanto al testo. Di seguito un esempio di come impostare nella pagina ASCX la label.







All'interno del file di risorsa va indicata la chiave, in questo caso lblTemplate.Help per il testo dell'help e lblTemplate.Text per il testo della label. Va fatta molta attenzione alle maiuscole perchè le chiavi del file di risorsa sono case sensitive.

Il secondo modo è quello classico di indicare nella definizione del controllo LABEL la resourcekey da cui prendere il testo.



Testo localizzato



E nel file di risorsa va indicato il valore della chiave come segue.



EmptyDataText.Text = "Testo localizato"

mercoledì 3 dicembre 2008

Roadmap for Documents Module 04.02.00

Oggi la notizia sul sito ufficiale di DotNetNuke delle nuove funzionalità che saranno introdotte a breve sul modulo DOCUMENTS alla versione 04.02.00

La data dell'effettivo rilascio non è stata definita con precisione, si parla di inizio 2009. Le funzionalità sono le seguenti:


DOC-5936 Modify User

Currently when modifying a document the Modified User is not updated, this will be resolved, to help track the individuals responsible for updates to module content.

DOC-8132 Search Integration

A modification to the integration of the module with the ISearchable interface will be completed that will add both the document title AND description data will be included in the content provided to the indexer. This will allow users to be exposed to more opportunities to find the documents they are looking for.

DOC-8381 Option for 100% width

To meet standards with DotNetNuke core modules 4.1.0 defaulted the display to 100% width, which was a breaking change for some designs. In an effort to provide customization a module setting will be added to allow users to enable/disable this feature.

DOC-8308 Implement IHydratable

In an effort to prepare for future changes and to improve the performance of the module the IHydratable interface is being implemented on all information objects to remove the need for reflection to hydrate document listings.

DOC-8617 Allow Paging

An optional paging feature will be added in this release, allowing users with long documents lists to show a paged set of results. By default paging will be disabled.

mercoledì 26 novembre 2008

Il progetto IWEB per DotNetnUke

Questo interessantissimo progetto, IWEB, mette a disposizione degli utenti uno strumento pronto per connettersi via webservice allla nostra istallazione di DotNetNuke e permette agli sviluppatori di implementare delle classi custom per esporre metodi personalizzati.

questo indirizzo potete trovare maggiori informazioni su come funziona il modulo e su come sviluppare un proprio metodo da esporre sul webservice.

mercoledì 15 ottobre 2008

Rilasciato DotNetNuke Linq to Sql Model Adapter

questo indirizzo compare oggi la news del rilascio di un adattatore per DotNetNuke che ci permette di utilizzare "Linq to SQL" sfruttando il database owner e l' the object qualifier di DotNetNuke.

A questo indirizzo invece trovate il progetto su CodePlex.




lunedì 6 ottobre 2008

DotNetNuke 5.0 RC1

E di pochi giorni fa la notizia di una versione di DNN con l'aggiunta di nuove features. La più importante è l'aggiunta di JQuery al framework. Di seguito l'estratto della news originale.


Earlier today, DotNetNuke hit another milestone with the release of DotNetNuke 5.0.0 RC1. RC1 is our first stable DotNetNuke 5.0.0 release and represents a feature complete version of the 5.0 platform. From here on out we will be focused on fixing bugs and ensuring that any performance issues are resolved. While it is true that DotNetNuke 5.0 represents a substantial change from 4.8.x, many of the updates in 5.0 were back ported to the recent 4.9 release. Below is list of highlights for this release which were not included in 4.9.0.

Major Highlights

  • Added jQuery support to the core platform. jQuery will now be distributed as part of the DotNetNuke installation and will be available for use by module developers.
  • Added support for Internet Explorer 8 Web Slices. Administrators can configure any module to use IE8 Web Slices including the ability to set time-to-live and expiration values.
  • Removed distinction between admin modules and pages and normal pages. This allows administrators to easily delegate access to any portion of the application to any group of users.
  • Updated the installation services to support manifest files for all extension types. Now skins, containers, providers and modules are all first class citizens that can be installed and uninstalled.
  • Expanded XHTML, WCAG and ADA compliance.
  • Refactored core to improve support for Unit Testing. Refactored several core classes to use interfaces and added a simple component factory to provide dependency injection support.
  • Added ability to deny permissions in the permissions grid. This new feature extends the permission framework to give administrators greater flexibility in defining permissions.
  • Added Widget framework. The new Widget framework allows you to quickly add JavaScript/html widgets to your site with very little effort. The framework supports the use of a simple object tag based representation which means you don’t have to know JavaScript in order to add the widgets.
  • Added new Object notation for using skin objects in Skins. Skin designers will no longer need to include separate XML files when creating and packaging skins. No more funky “[SKINOBJECT]” tags littering your html. This significantly simplifies the process of creating skins and further opens up skin development to a broader group of designers. If you include a simple JavaScript reference in your HTML skin, you can even get a full WYSIWYG experience when designing your skin.

In addition to these highlights there are literally hundreds of bug fixes in this release.

giovedì 11 settembre 2008

Rilasciato DotNetNuke 4.9.0

In attesa della versione 5.0.0 di DNN ecco che viene rilasciata oggi la 4.9.0 con una discreta quantità di fix. Le più interessanti sono quelle che riguardano la gestione della cache e l'urlrewriting.

Qui trovate il post originale.

lunedì 8 settembre 2008

Gestire SQLDataProvider troppo grandi

A chi si trova a sviluppare moduli particolarmente complessi sarà sicuramente capitato di dover gestire file SQLDataProvider, contenenti le logiche di interrogazione della base dati, con una quantità di righe notevole (io ad esempio ho superato le 5000 righe). Ciò comporta lentezza nello sviluppo per due motivi. Da una parte Visual Studio impiega un tempo enorme nelle operazioni di code highlighting e di individuazione di metodi, proprietà e quant'altro. Dall'altra parte i tempi di compilazione aumentano in funzione delle dimensioni dei file.

Per ovviare a questi inconvenienti c'è un modo abbastanza semplice. La struttura del layer dati di DNN prevede una interfaccia, DataProvider.vb, e una classe che la implementa, SQLDataProvider.vb, che contiene le logiche di comunicazione con il database. All'interno del controller (o dei contreller, in base a come viene strutturato il modulo) viengono richiamati i metodi della classe implementativa, e istanziata la classe SQLDataProvider, tramite il metodo DataProvider.Instance().NumeMetodo().

Per separare in più parti il DataProvider basta dunque duplicarlo e dividerlo per aree funzionali. Ad esempio posso prevedere lo stesso livello di separazione che viene adottato per le classi di controller. Dunque so ho un controller dedicato alle funzionalità anagrafiche e uno alle funzionalita generali posso creare due DataProvider, e quindi due SQLDataProvider, che contengono rispettivamente i metodi per gestire a DB le anagrafiche e le funzioni generiche.

Di seguito un esempio di struttura con più DataProvider.


App_Code
........ MyApp
................ DataProvider.vb
................ DataProviderAnagrafiche.vb
................ SQLDataProvider.vb
................ SQLDataProviderAnagrafiche.vb



All'interno dei metodi della classe controller sarà quindi necessario fare la chiamata per istanziare la classe SQLDataProviderAnagrafiche in questo modo:



Public Function getObjAnagrafica(ByVal idAnagrafica As Long) As Components.Anagrafica
Return CType(CBO.FillObject(DataProviderAnagrafica.Instance().getObjAnagrafica(idAnagrafica ), GetType(Components.Anagrafica)), Components.Anagrafica)
End Function

mercoledì 27 agosto 2008

Rilasciato Active Directory Provider 01.00.04

Sul blog ufficiale di DotNetNuke, Mike Horton annuncia il rilascio della versione 01.00.04 dell' Active Directory Provider. Grazie a questo provider è possibile configurare l'accesso degli utenti di DotNetNuke su un server Active Directory e sfruttare le utenze di un dominio Windows.

Di seguito la release note:


The fixes for this release are:
Changes/Fixes for this release:

ACD-5737 - Auto Authentication Not Working On Multi-Portal Installs

ACD-6760 - Default Profile Values Are Not Applied.

ACD-6960 - Server Bogs Down When Using Synchronization

ACD-7077 - Preferred Locale not populated on new account

ACD-7243 - Uknown UserCreateStatus value encountered. Parameter name: UserRegistrationStatus

ACD-7422 - Role Synchronization Not Working On W2K Domain Controllers

ACD-7748 - ActiveDirectory redirects web service files to the WindowsSignin.aspx file.

ACD-7532 - Typo in pop up help for email domain on windows auth provider config screen

ACD-7664 - Auto Login IP Addresses

ACD-8217 - Site Crashes Under Medium Trust

The only real visual change administrators will see is in the Auto Login IP Addresses. In the .03 version an administrator could put a partial IP address (e.g. 192.168) and any user that had an IP address that started with that would get logged in. Because of a flaw in my IP range logic (known as "sometimes the math didn't work out") only valid IP addresses are allowed. So 192.168 would need to be changed to 192.168.0.0 to 192.168.255.255).

Another significant change is that Role Synchronization should be much faster and consistent (in my testing it dropped to a 1/4 to 1/2 of the time it took before).


E li link del post originale.

venerdì 18 luglio 2008

DotNetNuke - Creare Skin personalizzate

Oggi vediamo come personalizzare le skin di DotNetNuke per rendere il nuostro portale più accattivante. Intanto diamo un'occhiata a come è strutturato DNN per quanto riguarda l'aspetto grafico.

DotNetNuke prevede due tipologie di oggetti per la customizzazione dell'aspetto: le skin e i container.

La Skin definisce l'aspetto generale del portale, la posizione degli oggetti all'interno delle colonne, dell'header e del footer. Tramite la manipolazione della skin possiamo configurare il nostro portale nella maniera classica (header,tre colonne e footer) oppure sbizzarrirci con dei layout meno convenzionali come ad esempio quelli dei blog che prevedono un header, una colonna per il contenuto, una per i banner e altri box e infine il footer.

Si può dunque partire da un qualsiasi layout per ralizzare le nostre skin, a patto di inserire nei posti giusti gli oggetti di DNN e di nominare le colonne per il corretto posizionamento dei contenuti.

Gli oggetti di DNN che possono essere posizionati sono i seguenti:

  • LOGO: il logo definito in configurazione del portale
  • BANNER: il banner
  • NAV: il menu di navigazione
  • SEARCH: la ricerca sul portale e sul web
  • LANGUAGE: selezione della lingua
  • CURRENTDATE: data di oggi
  • BREADCRUMB: la posizione di navigazione attuale
  • USER: info utente
  • LOGIN: login/logout
  • COPYRIGHT: copyright del portale
  • TERMS: link ai termini e condizioni
  • PRIVACY: link all'informativa sulla privacy
  • DOTNETNUKE: link al sito ufficiale di DotNetNuke

Di seguito uno schema riepilogativo del layout standard con il posizionamenti degli oggetti di DNN.

di seguito la struttura dei file di uno skin:



e qui la definizione degli oggetti da inserire nella pagina ascx dello skin



<%@ Control language="vb" CodeBehind="~/admin/Skins/skin.vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.UI.Skins.Skin" %>
<%@ Register TagPrefix="dnn" TagName="LOGO" Src="~/Admin/Skins/Logo.ascx" %>
<%@ Register TagPrefix="dnn" TagName="BANNER" Src="~/Admin/Skins/Banner.ascx" %>
<%@ Register TagPrefix="dnn" TagName="NAV" Src="~/Admin/Skins/Nav.ascx" %>
<%@ Register TagPrefix="dnn" TagName="SEARCH" Src="~/Admin/Skins/Search.ascx" %>
<%@ Register TagPrefix="dnn" TagName="LANGUAGE" Src="~/Admin/Skins/Language.ascx" %>
<%@ Register TagPrefix="dnn" TagName="CURRENTDATE" Src="~/Admin/Skins/CurrentDate.ascx" %>
<%@ Register TagPrefix="dnn" TagName="BREADCRUMB" Src="~/Admin/Skins/BreadCrumb.ascx" %>
<%@ Register TagPrefix="dnn" TagName="USER" Src="~/Admin/Skins/User.ascx" %>
<%@ Register TagPrefix="dnn" TagName="LOGIN" Src="~/Admin/Skins/Login.ascx" %>
<%@ Register TagPrefix="dnn" TagName="COPYRIGHT" Src="~/Admin/Skins/Copyright.ascx" %>
<%@ Register TagPrefix="dnn" TagName="TERMS" Src="~/Admin/Skins/Terms.ascx" %>
<%@ Register TagPrefix="dnn" TagName="PRIVACY" Src="~/Admin/Skins/Privacy.ascx" %>
<%@ Register TagPrefix="dnn" TagName="DOTNETNUKE" Src="~/Admin/Skins/DotNetNuke.ascx" %>

La prima riga definisce che il file in questione è un file di skin e le successive servono per registrare gli oggetti/controlli di DNN.


I Container invece definiscono l'aspetto dei singoli moduli all'interno della struttura della skin e possono essere applicati anche container differenti all'interno della stessa pagina.

La conformazione di un container è molto semplice e meno rigida di quella della skin. Anche i conteiner hanno degli oggetti di DotNetNuke da poter posizionare a piacere:

  • ACTIONS: il menu del modulo
  • ICON: l'icona del modulo
  • TITLE: il titolo del modulo
  • ACTIONBUTTON: i pulsanti per definire le azioni del modulo
  • VISIBILITY: l'icona per ridurre il modulo e ampliarlo



di seguito la struttura dei file di un container:


e qui la definizione degli oggetti da inserire nella pagina ascx del container


<%@ Control language="vb" CodeBehind="~/admin/Containers/container.vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.UI.Containers.Container" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONS" Src="~/Admin/Containers/SolPartActions.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ICON" Src="~/Admin/Containers/Icon.ascx" %>
<%@ Register TagPrefix="dnn" TagName="TITLE" Src="~/Admin/Containers/Title.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONBUTTON1" Src="~/Admin/Containers/ActionButton.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONBUTTON2" Src="~/Admin/Containers/ActionButton.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONBUTTON3" Src="~/Admin/Containers/ActionButton.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONBUTTON4" Src="~/Admin/Containers/ActionButton.ascx" %>
<%@ Register TagPrefix="dnn" TagName="ACTIONBUTTON5" Src="~/Admin/Containers/ActionButton.ascx" %>
<%@ Register TagPrefix="dnn" TagName="VISIBILITY" Src="~/Admin/Containers/Visibility.ascx" %>


dove la prima riga definisce che il file in questione è un file di container e le successive servono per registrare gli oggetti/controlli di DNN.

Ovviamente sono fondamentali le conoscenze di HTML per realizzare una skin completa e che ci soddisfi a pieno, per non parlare dell'utilizzo dei CSS.

In allegato a questo articolo ho voluto mettere a disposizione uno skin che riepiloga quello che ho appena illustrato: DotNetNuke Ita Skin.
Il file prevede un layout tableless con il posizionamento dei DIV tramite CSS per rendere più flessibile la struttura. Ho, inoltre, inserito accanto al logo del portale anche il nome del portale.

Dimanticavo ... per importare i file di skin e dei container basta accedere a DNN con l'utenza di host e accedere al menù 'Skin'. A questo punto potete importare direttamente i file zip sia per le skin sia per i container e impostarli per il vostro portale.

Buon divertimento.

domenica 13 luglio 2008

RSSNuke - Modulo RSS Feed per DotNetNuke

Sono lieto di annunciare che DotNetNuke Ita ha rilasciato la settimana scorsa il primo modulo per DotNetNuke. Si tratta di un modulo per visualizzare i Feed RSS provenienti da altri siti.

Il modulo è gratuito e liberamente scaricabile (sia in versione compilata, sia con i codici sorgenti) a questo indirizzo: RSSNuke

Ecco uno screenshoot di come si possono inserire più feed in una pagina:


All'interno del codice potete vedere come implementare i metodi per la gestione dei settaggi, come localizzare le pagine, come parametrizzare il layout del feed in funzione delle impostazioni del modulo.

Al più presto pubblicherò un tutorial per la creazione di Skin personalizzate.

giovedì 10 luglio 2008

ModuleFactory

Interessante articolo uscito su CodeProject in cui si parla di un modulo (A Module Code Generator Framework on DotNetNuke) per la generazione automatica di contenuti.

In sostanza si tratta di un meccanismo che permette agli sviluppatori di DNN di generare codice basato su metadati da un database o da file. Con Code Generator, gli sviluppatori possono risparmiare quel noioso lavoro di routine (ad esempio, la scrittura delle classi del layer di accesso ai dati , l'impostazione manuale di controlli delle property, ecc.), concentrandosi sullo sviluppo dei propri moduli.

Vi consiglio di dare una letta a questo interessante articolo.

lunedì 7 luglio 2008

Rilasciato Wiki 04.01.00

E' di oggi la notizia che sul sito ufficiale di DotNetNuke conferma il rilascio della nuova versione del modulo Wiki, arrivato alla release 04.01.00.



Come si legge sul post ufficiale

This version of the Wiki module has quite a few bug fixes from the 04.00.01 release from 2007. It also has some new functionality such as

  • The ability to add a page without having to "edit" another page
  • IPortable functionality (thanks to Stefan Cullmann)
  • SEO Support for Wiki Pages (define page title, keywords, descriptions)

In questa versione sono stati risolti diversi bug e aggiunte alcune funzionalità:
  • La possibilità di aggiungere pagine senza doverne modificare altre
  • La funzionalità IPortable
  • Supporto a SEO per le pagine Wiki (definizione del titolo della pagina, chiavi, descrizioni)
Sul sito di DNN è possibile scaricare il modulo dopo aver effettuato la login.

sabato 14 giugno 2008

Eseguire query in transazione

A chi non è mai capitato di dover effettuare operazioni (interrogazioni a db e inserimenti) legate tra di loro e di doversi servire di una transazioni per gestire la concorrenzialità sulla modifica dei dati da più connessioni?

Nel caso di DNN è abbastanza semplice prevedere la possibilità di utilizzare connessioni in transazione per effettuare operazioni tra di loro collegate ad esempio se ci fosse la necessità di leggere un dato da una tabella e scriverlo su un'altra evitando che possa essere modificato nel frattempo. in alternativa all'utilizzo di un store procedure possiamo implementare un metodo nel nostro data provider come quello che segue:

Public Overrides Function MyTransactionFunction() As string

Dim Exceptions As String = ""
Dim strQuery As String = ""
Dim s As StringBuilder = New StringBuilder("")
Dim Conn As New SqlConnection(ConnectionString)

Conn.Open()
Try
Dim Trans As SqlTransaction = Conn.BeginTransaction
Dim IgnoreErrors As Boolean
Dim ReturnedValue as integer
Try
'Prima query
s.Append("select myval ")
s.Append(" from " & DatabaseOwner & ObjectQualifier & "MyTab ")
ReturnedValue = SqlHelper.ExecuteScalar(ConnectionString, CommandType.Text, s.ToString)

'Seconda query
s = New StringBuilder("")
s.Append(" insert into ")
s.Append(DatabaseOwner & ObjectQualifier)
s.Append("My_Table ")
s.Append(" (col1,ReturnedValue) ")
s.Append(" values (")
s.Append(val1)
s.Append(",")
s.Append(ReturnedValue)
s.Append("')")
strQuery = s.ToString()
sqlDR = SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.Text, (strQuery))

Catch objException As SqlException
Exceptions += objException.ToString & vbCrLf & vbCrLf & strQuery & vbCrLf & vbCrLf
End Try

If Exceptions.Length = 0 Then
Trans.Commit()
Return "1"
Else
Trans.Rollback()
Exceptions += "Esecuzione SQL fallita. La transazione è stata annullata." & vbCrLf & vbCrLf & strQuery & vbCrLf & vbCrLf
Return Exceptions
End If
Catch objException As SqlException
Exceptions += objException.ToString & vbCrLf & vbCrLf & strQuery & vbCrLf & vbCrLf
objExeptionLog.AddLog(objException)
Finally
Conn.Close()
End Try

Return Exceptions
End Function
Come si vede dal codice viene istanziata una transazione e utilizzata sulla connessione al db per tutte le operazioni effettuate nel metodo. In questo modo è semplice gestire il rollback in caso di eventuali errori e il commit in caso di successo.

giovedì 12 giugno 2008

Permessi personalizzati per i moduli

Oggi affrontiamo il problema dei permessi ed in particolare come è possibile aggiungere ad un modulo custom dei permessi aggiuntivi oltre a quelli di default.

Innanzi tutto facciamo qualche premessa. In base a quanto detto nei post precedenti per la creazione di un modulo custom con l'ausilio dello StarterKit partiamo dalla situazione in cui abbiamo configurato il nostro modulo aggiungendolo ad una pagina.

Se tutto è andato bene dovremmo essere di fronte a qualche cosa del genere:

Come vedete nella colonna centrale è presente il nostro modulo dimostrativo. A questo punto possiamo iniziare ad insererire all'interno del nostro modulo il codice necessario per aggiungere i permessi.

Il codice da inserire riguarda il nostro controller principale, DemoModuleController che si trova nella directory App_Data.

All' interno di questo controller possiamo aggiungere il codice riportato di seguito lasciando inalterati i metodi già esistenti:


Imports System
Imports System.Configuration
Imports System.Data
Imports System.XML
Imports System.Web
Imports System.Collections.Generic
Imports DotNetNuke
Imports DotNetNuke.Services.Search
Imports DotNetNuke.Common.Utilities.XmlUtils
Imports DotNetNuke.Entities.Modules
Imports DotNetNuke.Entities.Modules.Definitions

Namespace DotNetNukeIta.Modules.DemoModule

'''
''' The Controller class for DemoModule
'''

'''
'''

'''
'''

''' ------------------------------------------
Public Class DemoModuleController
Implements Entities.Modules.ISearchable
Implements Entities.Modules.IPortable

#Region "Variabili Private"
Private _PremessoDemo As Boolean
#End Region

#Region "Costanti pubbliche"
Public Const PERMISSIONCODE As String = "DemoModule"

Public Const PERMESSODEMO As String = "PERMESSODEMO"
#End Region

#Region "Private Methods"

Private Sub InitModulePermissions()

Dim permCtl As Permissions.PermissionController = New Permissions.PermissionController()
Dim arr As ArrayList = permCtl.GetPermissionByCodeAndKey(PERMISSIONCODE, "")
Dim desktopMod As DesktopModuleController = New DesktopModuleController()
Dim desktopInfo As DesktopModuleInfo = desktopMod.GetDesktopModuleByModuleName("DotNetNukeIta.DemoModule")
Dim modDef As ModuleDefinitionController = New ModuleDefinitionController()
Dim modDefInfo As ModuleDefinitionInfo = modDef.GetModuleDefinitionByName(desktopInfo.DesktopModuleID, "GECO")

'Settaggio permessi sulle Pagine AnagraficaPF
Try
Dim pi As Permissions.PermissionInfo = New Permissions.PermissionInfo()
pi.ModuleDefID = modDefInfo.ModuleDefID
pi.PermissionCode = PERMISSIONCODE
pi.PermissionKey = PERMESSODEMO
pi.PermissionName = "Permesso personalizzato"
permCtl.AddPermission(pi)
Catch e As Exception
' gestisco l'eventuale eccezione
End Try

End Sub

#End Region

#Region "Metodi Pubblici"

Public Function UpgradeModule(ByVal Version As String) As String
'Possiamo impostare un controllo a piacere
' in questo caso controlliamo il numero di versione del modulo
' e istalliamo i permessi solo se il modulo è alla versione 01.00.00
If (Version = "01.00.00") Then
' Istallazione dei permessi per il modulo
InitModulePermissions()
End If

'Se tutto è andato bene aggiorno la versione del modulo
Version = "01.00.01"
Return Version
End Function

Public ReadOnly Property PermessoDiDemo() As Boolean
Get
Return _PremessoDemo
End Get
End Property

''' Esempio di utilizzo :
'''
''' Dim ms As DemoModuleController = New GECOController()
''' Dim objModules As ModuleController = New ModuleController()
''' Dim objMudule As ModuleInfo
''' objMudule = objModules.GetModule(ModuleId, TabId)
''' ms.ModuleSecurity(objMudule)
'''-----------------------------------------------------------
Public Sub ModuleSecurity(ByVal modInfo As ModuleInfo)
Dim permCollection As Permissions.ModulePermissionCollection

permCollection = modInfo.ModulePermissions
Dim permCtl As Permissions.ModulePermissionController = New Permissions.ModulePermissionController()
_PremessoDemo = Permissions.ModulePermissionController.HasModulePermission(permCollection, PERMESSODEMO)

End Sub

#End Region


La Sub InitModulePermissions consente di inizializzare la definizione dei permessi per il nostro modulo. Possiamo quindi pensare di chiamarla quando più ci fa comodo, per esempio all'istallazione o all'aggiornamento del modulo stesso.

Una volta inseriti i permessi accedendo alle impostazioni del modulo (icona in alto a sinistra del modulo, settings) avremo il permesso tra quelli disponibili come appare di seguito:

Prima:

Dopo:

Come vedete si è aggiunta una colonna col il nuovo permesso. A questo punto dalle nostre pagina possiamo richiamare il metodo per controllare i permessi:



'*****controllo permessi*****
Dim ms As DemoModuleController
Dim objModules As ModuleController
Dim objMudule As ModuleInfo

ms = New DemoModuleController()
objModules = New ModuleController()

objMudule = objModules.GetModule(ModuleId, TabId, False)
ms.ModuleSecurity(objMudule)

If ms.PermessoDiDemo = False Then
Response.Redirect(NavigateURL())
End If
'*****controllo permessi*****


Ed il gioco è fatto ...

martedì 3 giugno 2008

DotNetNuke - StarterKit

DotNetNuke mette a disposizione uno strumento molto utile per iniziare a sviluppare moduli personalizzati. Si tratta dello StarterKit che una volta istallato aggiunge a VisualStudio (2005, 2008, Express) dei nuovi elementi da aggiungere ad un progetto web. Vediamo innanzi tutto come poter istallare il kit. Andiamo sul sito di DNN e scarichiamo (previo login al sito) lo StarterKit più recente che, una volta scaricato, dovrebbe apparire più o meno così:


Lanciamo l'eseguibile appena scaricato e ci troviamo di fronte ad una finestra come questa:



Clicchiamo su AVANTI:


Confermiamo premendo YES per andare avanti con l'istallazione:

A questo punto terminiamo premendo CLOSE e lanciamo Visual Studio per iniziare il nostro nuovo progetto DotNetNuke. Dal manù FILE scegliamo l'opzione "New Web Site". Tra le voci disponibili troviamo "DotNetNuke Web Application Framework". Scegliamo una cartella e premiamo OK.

A questo punto avremo a disposizione un progetto vuoto con tutti i file necessari per iniziare a sviluppare i nostri moduli personalizzati sfruttando le API di DNN. Appena caricato il progetto si presenta una pagina in cui ci sono delle ottime spiegazioni per configurare la connessione al database ed effettuare le prime customizzazioni grafiche (link: come configurare il database)

A questo punto sempre sfruttando lo StarterKit istallato per Visual Studio possiamo aggiungere altri elementi al nonstro progetto. Partiamo dall'aggiunta di un nuovo tema per il nostro portale. Claccando con il tasto destro del mouse sulla root del progetto in "Solution Explorer" scegliamo la voce "Add new item". Scegliamo "DotNetNuke Skin" e diamo un nome al nostro tema.

Premiamo ADD e il wizard aggiungerà i file di base per iniziare a creare il nostro tema personalizzato. Importantissimo è leggere le spiegazioni che appaiono nella pagina di documentazione. Il wizard di Visual Studio non è in grado di cambiare il nome alle directory dei file template, quindi questa operazione la dobbiamo fare a mano.

Cambiamo il nome delle cartelle 'SkinName' con il nome che abbiamo scelto per il nostro tema (in questo caso abbiamo scelto 'DemoSkin'). Come possiamo notare abbiamo due cartelle, Containers e Skins, all'interno delle quali ci sono i file dedicati alla personalizzazione del tema del portale e dei container. I container sono le parti del portale che contengono i moduli e possono essere personalizzate applicando degli stili in maniera indipendente dagli stili applicati al portale. In poche parole nella cartella Skins andiamo ad inserire i temi relativi all'aspetto del portale (header, footer, content ecc.), mentre nella cartella Containers inseriamo i temi relativi alla definizione dello stile del contenuto del portale. Nei prossimi post vedremo come personalizzare i temi e quali sono le parti principali su cui effettuare le modifiche.

Se volessimo aggiungere un nuovo modulo personalizzato possiamo operare come abbiamo per il tema cliccando con il tasto destro del mouse sulla root del progetto e scegliendo "Add new item". Scegliamo "DotNetNuke Dynamic Module" e diamo un nome al nostro Modulo. Premiamo ADD e andiamo avanti.A questo punto il wizard creerà i file di base per il modulo da cui iniziare con lo sviluppo.

Come per il tema vengono creati i file necessari sia nella cartella App_Code sia nella cartella DesktopModules e come per i temi dobbiamo cambiare il nome della cartella 'ModuleName' con il nome che abbiamo scelto per il modulo (in questo caso DemoModule). Nei prossimi moduli approfondiremo su come approcciare lo sviluppo di moduli custom con DNN.

Per ora è tutto ... al prossimo post.

martedì 20 maggio 2008

DotNetNuke, elementi di base

Fino ad ora abbiamo visto come istallare il CMS, adesso iniziamo a vedere quali sono i componenti, come interagiscono tra di loro e come possiamo configurarli.

Gli elementi principali di DNN sono i portali. Per ogni istallazione di DNN possono essere configurati più portali all'interno dei quali è possibile fare specifiche operazioni di configurazione e personalizzazione, a partire dall'aspetto grafico fino ad arrivare all'inserimento di moduli custom.

Una volta istallato DNN ci troviamo di fronte ad una configurazione standard. Gli utenti a disposizione sono due; "ADMIN" e "HOST". Il primo dedicato alla gestione delle impostazione a livello di portale, il secondo è il superuser vero e proprio in grado di gestire la configurazione generale del CMS. Effettuando l'accesso come utente HOST abbiamo a disposizione i seguenti menù:



Menù Admin

Menù Host
In testa al portale compare il pannello di controllo per la gestione delle impostazioni immediate come Utenti, Ruoli, Pagine e Moduli.

Le Pagine sono gli elementi da cui partire per personalizzare il nostro portale. Sono gli elementi che contengono i moduli e nei quali possiamo definire la disposizione dei contenuti. La creazione di una pagina ci permette di inserire una voce nel menù di DNN che sarà il punto di accesso alla nostra pagina. Una volta definita una pagina possiamo inserire al suo interno i moduli che preferiamo. I Moduli sono delle vere e proprie applicazioni che possono essere inserite all'interno del portale come dei plugin e possono essere posizionate sulla pagina. Alcuni possono essere scaricati dal sito ufficiale di DNN.

La posizione dei moduli sulle pagine è governabile sia in fase di inserimento del modulo sia in fase di modifica delle impostazioni del singoo modulo. In un altro articolo approfondiremo il discorso sui moduli e sulla loro configurazione. L'utilizzo delle funzionalità di configurazione del portale è abbastanza intuitivo una volta comprese le relazioni tra pagine e contenuti e tra utenti e gruppi.

Control Panel

Su questi ultimi, gli utenti, faccio notare che la loro gestione a livello di profilatura segue gli standard adottati da quasi tutti i CMS in circolazione. Abbiamo quindi la possibilità di creare gruppi di utenti ai quali associare i singoli utenti e ai quali assegnare i singoli permessi applicativi che essendo peculiarità dei singoli moduli, vengono assegnati ai gruppi dalle impostazione di configurazione di ogni modulo.

Altra caretteristica tipica dei CMS più comuni è quella di poter customizzare gli skin (o aspetto grafico) per il singolo portale. In giro se ne trovano parecchi sia gratuiti sia a pagamento.

Nei prossimi articoli cercheremo di approfondire le singole funzionalità di DNN.

Per adesso un saluto.

mercoledì 7 maggio 2008

Istallazione di DotNetNuke

Oggi parliamo di come istallare DotNetNuke. Iniziamo a capire di cosa abbiamo bisogno. Per iniziare ci dobbiamo procurare il pacchetto di istallazione di DotNetNuke, reperibile sul sito ufficiale (solo per utenti registrati). La versione al momento disponibile è la 4.8.2 e potete trovare il changelog qui.

I requisiti di base per istallare DotNetNuke sono i seguenti:

  • Windows con istallato IIS
  • Dot.Net Framework 2 (o superiore)
  • MS SQL Server 2000 (o superiore) o MSDE
Per prima cosa dobbiamo configurare una virtual directory sotto IIS per la nostra istallazione. Su come configurare la virtual directory per il web dedicato alla nostra istallazione di DotNetNuke rimando a questo sito.

A questo punto estraiamo i file contenuti nel pacchetto DotNetNuke_04.08.02_Install.zip nella directory virtuale creata prima.

Ora è arrivato il momento di creare il database che conterrà i dati necessari al corretto funzionamento della nostro CMS. Per fare questo dobbiamo aver istallato un' istanza di database SQL Server o MSDE, creato un database (con nome ad esmpio "DOTNETNUKE") e configurato un utente per l'accesso al db (Per ulteriori dettagli su questa fase vi rimando a questo sito).

Adesso c'è la partepiù interessante, quella dedicata allìistallazione vera e propria. Puntiamo al nostro web (ad esempio http://localhost/DotNetNuke) e dovremmo ricevere una pagina come questa:


Scegliamo la lingua, selezioniamo "TYPICAL" come metodo di istallazione e premiamo il link "NEXT" per andare avanti. Nel caso in cui si volesse avere un maggior dettaglio di configurazione allora sarà necessario selezionare "CUSTOM" come metodo di istallazione.

A questo punto ci sarà richiesto di verificare i permessi di creazione e modifica di file e cartelle della nostra istallazione. Premiamo il link "TEST PERMISSIONS" e se tutto è a posto riceveremo un messaggio di conferma come questo:


Premiamo "NEXT" e andiamo avanti. Configuriamo l'accesso al database. Abbiamo due alternative; possiamo scegliere se utilizzare un puntamento ad un file di database (MSDE o SQL Express) o se configurare una connessione ad una istanza di database MS SQL Server. In questo caso vedremo come configurare DNN su un file di databse. Il file in questione viene già fornito con il pacchetto di istallazione di DNN e si trova nella directory "App_Data"

Indichiamo i parametri come mostrato nella schermata seguente e premiamo il tasto "TEST DATABASE CONNECTION" per verificare la correttezza dei dati inseriti.


A questo punto DNN si occuperà di creare le tabelle necessarie sul database e al termine di questa operazione ci troveremo di fronte ad una schermata come questa

che ci conferma la corretta istallazione di DNN. Adesso clicchiamo su "CLICK HERE TO ACCESS YOUR PORTAL" e potremo accedere alla nostra istallazione di DotNetNuke.



Nel prossimo articolo vedremo come iniziare a configurare il nostro portale.

martedì 29 aprile 2008

DotNetNuke LinkedIn Group


Sono lieto di comunicare a tutti gli sviluppatori di DotNetNuke che da oggi esiste un gruppo su LinkedIn dedicato agli sviluppatori italiani. Il gruppo si chiama "DotNetNuke Italian Developers" ed è raggiungibile a questo indirizzo: DNN su LinkedIn

lunedì 28 aprile 2008

Cosa è DotNetNuke e come funziona.

Iniziamo con un post quasi obbligatorio riportando quanto sul sito ufficiale viene descritto dal punto di vista delle caratteristiche principali di DotNetNuke.
  • Versatilità
  • Facile utilizzo
  • Potenza
  • Ricchezza di funzionalità
  • Supporto
  • Facile installazione
  • Localizzazione
  • Open Source
  • Innovativo
  • Estendibile

Inoltre DotNetNuke è disegnato su piattaforma Microsoft ASP.NET 2.0, 3.0, e 3.5 e per essere utilizzato con Visual Studio 2005, Visual Studio 2008, o Visual Web Developer.

DotNetNuke è un CMS (Content Management System), un software sviluppato per il web che consente la creazione e la gestione di siti/portali web e dei loro contenuti.

DotNetNuke è sviluppato seguendo i più comuni pattern tra cui MVC, la gestione dei template, l'inserimento di moduli esterni, la localizzazione basata sui file di risorsa (.resx), l'integrazione di Ajax, l'integrazione dell'autenticazione tramite LiveId, la possibilità di integrare nei moduli custom l'utilizzo delle API con un notevole incremento di efficacia ed efficienza nello sviluppo.

DotNetNuke mette a disposizione tutti quegli strumenti di base necessari per lo sviluppo di applicazioni web-based svincolando lo sviluppatore dal doverli necessariamente implementare. Il web administrator configura e gestisce in maniera intuitiva e semplice i portali sia dal punto di vista grafico sia dal punto di vista dei contenuti.

Esistono moltissimi moduli aggiuntivi che mettono a disposizione una serie di funzionalità cha vanno dalla possibilità di insirire nel proprio sito un forum, un blog, un bookmark, un album fotografico e molto altro.

Se siete in cerca di un CMS versatile in ambiente Micosoft allora di certo DotNetNuke è quello che fa al caso vostro.

Di seguito uno schema che sintetizza l'architettura implementativa di DotNetNuke:




Nel prossimo post inizieremo a vedere quali sono i requisiti e come procedere per l'istallazione.

venerdì 25 aprile 2008

DotNetNuke in Italia

DotNetNuke è un CMS (Content Management System) open source scritto un VB.NET. Si tratta di uno dei pochi CMS disponibili in ambiente Microsoft. Il sito di riferimento ufficiale é in lingua inglese e disponibile all'indirizzo www.dotnetnuke.com. Esiste un sito di supporto in lingua italiana, ma è da molto tempo che non viene aggiornato ed è rimasto indietro di qualche versione.

Il mio intento con questo blog è quello di offrire un punto di riferimento per gli sviluppatori italiani che si sono accostati a DotNetNuke e che lo utilizzano per lavoro o per semplice diletto.

Non mancheranno dunque post tecnici, tips, particolarità implementative, informazioni sulle news ufficiali e molte altre cose interessanti.

Quindi vi lascio ... al prossimo post!
Un saluto.