Ancora oggi mi trovo spesso a dover lavorare con Sharepoint 2007.
Essendo ormai coccolato da Sharepoint 2010 e dall’integrazione con Visual Studio 2010, mi trovo sempre più spaesato nel riprendere in mano Visual Studio 2008 e dover sviluppare una feature per Sharepoint 2007.
Ed ecco che ultimamente mi ritrovo con Visual Studio 2008 aperto, con la necessità di creare una feature con una web part e utilizzare WSPBuilder per creare la solution.
WSPBuilder
Per colmare la lacuna tra l’integrazione del tool di sviluppo e il prodotto sono nati varie soluzioni; WSPBuilder è una di queste.
WSPBuilder si propone come soluzione “semplice” per creare solution per Sharepoint 2007.
E’ la parola semplice che prende un’altra piega dopo aver lavorato con 2010… ma è un’altra storia.
Vediamo insieme quali sono gli step per creare una Web Part con un Web User Control visuale (ascx)
Step 1 – Creare un progetto
- Per prima cosa abbiamo la necessità (una volta installato WSPBuilder) di creare un progetto di tipo WSPBuilder.
- Clicchiamo con il tasto destro sul progetto selezioniamo New Item e scegliamo Web Part Feature
ed ecco il risultato
Step 2 – Aggiungere un ascx
Adesso che il progetto è creato non avremo la possibilità di inserire un file ascx all’interno dello stesso.
Questo perchè il guid che descrive il tipo di progetto non ce lo permette.
Possiamo risolvere il problema con questo semplice workaround:
- fare l’unload del progetto in solution
- click con il tasto destro sul progetto e andare in edit del progetto
- trovare l’elemento ProjectTypeGuids e aggiungere la stringa: {349C5851-65DF-11DA-9384-00065B846F21};
prima dell’altro guid che troverete
- chiudete e salvate
- fare il reload del progetto
- adesso sarà possibile inserire un file ASCX
Step 3 – Lavorare con l’ASCX
- Sotto la directory Features aggiungete la directory CONTROLTEMPLATES e una directory dove verrà copiato il vostro file ASCX.
Io per questo esempio creo la directory BookletWebPart.
Otterrete qualcosa del genere:
Quando deploierete la vostra feature l’ascx verrà copiato nel path del file system corretto (esempio):
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\CONTROLTEMPLATES\BookletWebPart
- Adesso dobbiamo togliere la proprietà CodeBehind dall'ascx. Il codice del nostro ascx risiederà nella dll che deploieremo con la feature
- Modifichiamo la proprietà Inherits in questa maniera: apriamo il file BookletgeneratorWebPartFeature.webpart e copiamo l’attributo name della proprietà type
e incolliamolo dentro l'Inherits con una piccola modifica; aggiungendo il nome della classe del WebUserControl:
- Ok a questo punto modifichiamo il namespace della classe BookletUserControl.ascx.cs. Tenendo sempre l’esempio che sto seguendo, il namespace diventerà:
---.---.BookletGenerator
Per concludere ci toccherà caricare il nostro file ascx nel metodo CreateChildControls del file BookletWebPartFeature.cs:
protected override void CreateChildControls()
{
if (!_error)
{
try
{
base.CreateChildControls();
var myControl = (BookletUserControl)Page.LoadControl("~/_controltemplates/BookletWebPart/BookletUserControl.ascx");
this.Controls.Add(myControl);
}
catch (Exception ex)
{
HandleException(ex);
}
}
}
Deploiamo ed abbiamo finito