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.
- Installiamo le extensions di cui sopra.
- Creiamo un progetto di tipo SharePoint -> WebPart
- Create/disegnate il vostro WebUserControl in un progetto di tipo ASP.NET Web Application (per questo esempio utilizzerò un ascx di nome WebUserControl1.ascx)
- Prendete il contenuto del file WebUserControl1.ascx.designer.cs e riversatelo all'interno del file WebUserControl1.ascx.cs
- Eliminate la keyword partial dalla classe
- 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();
}
}
- Copiate il codice di cui sopra e inseritelo all'interno del namespace del file cs creato
dal progetto SharePoint WebPart del punto 2
- 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();
}
}
- Adesso potreste anche cancellare il file WebUserControl1.ascx.cs
- Aggiungiamo l'item Root File nel nostro progetto SharePoint WebPart
- Sotto la directory RootFiles, create le directory Template\ControlTemplates. Questa sarà la directory SharePoint dove verrà copiato il nostro WebUserControl
- 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
- 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 è:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="WebUserControl1.ascx.cs"
Inherits="WebApplication1.WebUserControl1" %>
che dovrà diventare:
<%@ Control Language="C#" AutoEventWireup="true"
ClassName="WebUserControl1"
Inherits="WebPart1.WebUserControl1, WebPart1, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=<token creato dal progetto SharePoint WebPart>" %>
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. |
posted @ giovedì 23 aprile 2009 15:15