Monday, October 5, 2009

Come usare un WebUserControl in una WebPart per SharePoint

Creare WebPart con un'UI un pò carina è IMHO qualcosa di alquanto complicato.
E' interessante, in questi casi e non, utilizzare le WebUserControl.
Purtroppo ancor'oggi con le Visual Studio 2008 extensions for Windows SharePoint Services 3.0, v1.3 - Mar 2009 CTP non è stato creato un progetto che ne supporta direttamente l'utilizzo.
Ma, con un paio di accorgimenti, è possibile utilizzarle.
Vediamo come.
  1. Installiamo le extensions di cui sopra.
  2. Creiamo un progetto di tipo SharePoint -> WebPart
  3. Create/disegnate il vostro WebUserControl in un progetto di tipo ASP.NET Web Application (per questo esempio utilizzerò un ascx di nome WebUserControl1.ascx)
  4. Prendete il contenuto del file WebUserControl1.ascx.designer.cs e riversatelo all'interno del file WebUserControl1.ascx.cs
  5. Eliminate la keyword partial dalla classe
  6. Quello che otterrete è qualcosa del tipo (io ho inserito una Label e un Button):
    public class WebUserControl1 : System.Web.UI.UserControl
    {
        protected Label Label1;
    
        protected Button Button1;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }
    }
     
  7. Copiate il codice di cui sopra e inseritelo all'interno del namespace del file cs creato
    dal progetto SharePoint WebPart del punto 2
  8. Il risultato sarà il seguente:
    [Guid("2f61a277-7142-4d8d-a72c-4dfd83c6cedb")]
    public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart
    {
        public WebPart1()
        {
        }
    
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
    
            // TODO: add custom rendering code here.
            // Label label = new Label();
            // label.Text = "Hello World";
            // this.Controls.Add(label);
        }
    }
    
    public class WebUserControl1 : System.Web.UI.UserControl
    {
        protected Label Label1;
    
        protected Button Button1;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToString();
        }
    }
     
  9. Adesso potreste anche cancellare il file WebUserControl1.ascx.cs
  10. Aggiungiamo l'item Root File nel nostro progetto SharePoint WebPart
  11. Sotto la directory RootFiles, create le directory Template\ControlTemplates. Questa sarà la directory SharePoint dove verrà copiato il nostro WebUserControl
  12. Copiamo il nostro file WebUserControl1.ascx dall'applicazione ASP.NET Web Application alle directory del punto precedente, in modo da ottenere RootFiles\Template\ControlTemplates\WebUserControl1.ascx e aggiungiamo il file al progetto
  13. Adesso dobbiamo modificare il nostro file WebUserControl1.ascx per far puntare i riferimenti al code-behind alla stessa dll della WebPart. In teoria quello che dovreste avere è:
    
    che dovrà diventare:
    
    
     
    in ClassName specifichiamo la classe del nostro WebUserControl copiato nel punto 7,
    mentre in Inherits specifichiamo:
    Namespace.ClassName, Nome_Assembly, Version, Culture, PublicKeyToken

    tutti questi dati lì ho presi da Administrative Tools -> Microsoft .NET Framework 2.0 Configuration
    guardando le proprietà della mia dll della WebPart deployata.
A questo punto potete inserire la WebPart in una pagina e testarla.
 
 Le WebPart vanno testate all'interno di una pagina di SharePoint non nelle WebPart Preview; nella WebPart Preview gli eventi non funzioneranno.
 
Tags:

No comments:

Post a Comment