Monday, May 16, 2011

Creare una WebPart con WSPBuilder su Sharepoint 2007

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

  1. Per prima cosa abbiamo la necessità (una volta installato WSPBuilder) di creare un progetto di tipo WSPBuilder.
    wspbuilderprj
  2. Clicchiamo con il tasto destro sul progetto selezioniamo New Item e scegliamo Web Part Feature
    wspbuilderwebpartfeature
ed ecco il risultato
wspbuildersolutionexplorer01

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:
  1. fare l’unload del progetto in solution
  2. click con il tasto destro sul progetto e andare in edit del progetto
  3. trovare l’elemento ProjectTypeGuids e aggiungere la stringa: {349C5851-65DF-11DA-9384-00065B846F21};
    prima dell’altro guid che troverete
    wspbuilderprojectproperty
  4. chiudete e salvate
  5. fare il reload del progetto
  6. adesso sarà possibile inserire un file ASCX

Step 3 – Lavorare con l’ASCX

  1. 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:
    wspbuildersolutionexplorer02 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
  2. Adesso dobbiamo togliere la proprietà CodeBehind dall'ascx. Il codice del nostro ascx risiederà nella dll che deploieremo con la feature
  3. Modifichiamo la proprietà Inherits in questa maniera: apriamo il file BookletgeneratorWebPartFeature.webpart e copiamo l’attributo name della proprietà type
    wspbuilderwebpartfile
    e incolliamolo dentro l'Inherits con una piccola modifica; aggiungendo il nome della classe del WebUserControl
    wspbuilderascxinherits
  4. 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 Smile

No comments:

Post a Comment