Windows SharePoint 2003 Products & Technologies – Sviluppare Web Part
-
Upload
ramona-robles -
Category
Documents
-
view
22 -
download
6
description
Transcript of Windows SharePoint 2003 Products & Technologies – Sviluppare Web Part
1
Windows SharePoint 2003 Windows SharePoint 2003 Products & TechnologiesProducts & Technologies
––Sviluppare Web PartSviluppare Web Part
Marco BellinasoMarco BellinasoSenior trainer & consultantSenior trainer & consultant
Code Architects S.r.l.Code Architects S.r.l.
Web: Web: http://www.codearchitects.comhttp://www.codearchitects.com
E-mail: E-mail: [email protected]@codearchitects.com
2http://www.codearchitects.com
BiografiaBiografia
Consulenza, sviluppo e training con Code Architects Srl Consulenza, sviluppo e training con Code Architects Srl
Collaboratore di Collaboratore di Visual Basic & .NET Journal, Computer Visual Basic & .NET Journal, Computer Programming, MSDN Magazine e ASP TodayProgramming, MSDN Magazine e ASP Today
Coautore di “ASP.NET Website Programming”, “Fast Track Coautore di “ASP.NET Website Programming”, “Fast Track ASP.NET” e “Visual C# .NET: a Guide for VB6 Developers” ASP.NET” e “Visual C# .NET: a Guide for VB6 Developers” (Wrox Press) (Wrox Press)
Sviluppatore di UGI SharePoint (Sviluppatore di UGI SharePoint (www.ugisharepoint.itwww.ugisharepoint.it))
Sviluppatore dei siti *2TheMax (Sviluppatore dei siti *2TheMax (www.dotnet2themax.comwww.dotnet2themax.com)) ((www.dotnet2themax.itwww.dotnet2themax.it
) )
e-mail: e-mail: [email protected]@codearchitects.com
3http://www.codearchitects.com
AgendaAgenda
Concetti baseConcetti base Generazione manuale di HTMLGenerazione manuale di HTML Riutilizzo di controlli ASP.NETRiutilizzo di controlli ASP.NET ProprietàProprietà
DeploymentDeployment DebugDebug Web part avanzateWeb part avanzate
Custom Tool PartCustom Tool Part ConnessioniConnessioni
4http://www.codearchitects.com
ArchitetturaArchitettura
Le Web Part sono controlli ASP.NET server-side che vengono Le Web Part sono controlli ASP.NET server-side che vengono inseriti all’interno di pagine o zone eseguite nel contesto di inseriti all’interno di pagine o zone eseguite nel contesto di SharePointSharePoint
Forniscono caratteristiche comuni, offerte dal frameworkForniscono caratteristiche comuni, offerte dal framework Titolo, bordi, stato (minimizzato ecc.)Titolo, bordi, stato (minimizzato ecc.) Supporto per drag & dropSupporto per drag & drop Proprietà shared o per utenteProprietà shared o per utente
I controlli sulla pagina sono determinati da record del DB dei I controlli sulla pagina sono determinati da record del DB dei contenuticontenuti
Implementano interfacce standard per comunicare le une con le Implementano interfacce standard per comunicare le une con le altrealtre
ASP.NET PageControlli ASP.NET che ereditano dalla classe base WebPart, che a sua volta eredita da System.Web.UI.Control
Web Part zone
5http://www.codearchitects.com
Sviluppo in VS.NETSviluppo in VS.NET
WebPart1.cs: scheletro per la classe della WebPart1.cs: scheletro per la classe della Web PartWeb Part
WebPart1.dwp: file XML che descrive la WebPart1.dwp: file XML che descrive la Web Part (nome, descrizione) e contiene Web Part (nome, descrizione) e contiene valori di default per alcune proprietàvalori di default per alcune proprietà
AssemblyInfo.cs: specifica versione, il AssemblyInfo.cs: specifica versione, il file .snk per lo strong name, ecc.file .snk per lo strong name, ecc.
Manifest.xml: file XML che contiene un Manifest.xml: file XML che contiene un riferimento a tutti i file necessaririferimento a tutti i file necessari
““References” contiene un riferimento a References” contiene un riferimento a Microsoft.SharePoint dllMicrosoft.SharePoint dll
Microsoft fornisce un template per VS.NET 2003, Microsoft fornisce un template per VS.NET 2003, scaricabile separatamente, chiamato “Web Part scaricabile separatamente, chiamato “Web Part Library”Library”
6http://www.codearchitects.com
Classe baseClasse base
Browser RenderingBrowser Rendering
Non è possibile fare l’override del metodo Non è possibile fare l’override del metodo Render()Render() della classe basedella classe base
La classe base lo usa per creare il bordo, il titolo e il La classe base lo usa per creare il bordo, il titolo e il menu della Web Partmenu della Web Part
Le Web Part custom devono implementare l’override Le Web Part custom devono implementare l’override di di RenderWebPart()RenderWebPart() per fare l’output dell’HTML del per fare l’output dell’HTML del proprio contenutoproprio contenuto
7http://www.codearchitects.com
Classe baseClasse base
Browser RenderingBrowser Rendering
ASPX ASPX PagePage
Web Part WebPart.Rende
r()
CustomPart.RenderWebPart()
ASP.NET starts page render
RequestRequest
ResponsResponsee
8http://www.codearchitects.com
Classe baseClasse base
Rendering per client diversi da browserRendering per client diversi da browser
L’interfaccia L’interfaccia IDesignTimeHtmlProviderIDesignTimeHtmlProvider viene usata per viene usata per ottenere il rendering della Web Part quando questa viene ottenere il rendering della Web Part quando questa viene inserita in client diversi dal browser Internet. Es: inserita in client diversi dal browser Internet. Es: FrontPage 2003FrontPage 2003
IDesignTimeHtmlProvider consiste in un singolo metodo: IDesignTimeHtmlProvider consiste in un singolo metodo: GetDesignTimeHtmlGetDesignTimeHtml
Non è implementata di defaultNon è implementata di default
9http://www.codearchitects.com
Classe baseClasse base
Override di eventiOverride di eventi
I seguenti metodi della classe base sono marcati come I seguenti metodi della classe base sono marcati come sealed, e non se ne può fare l’override:sealed, e non se ne può fare l’override:
OnInit , OnDataBinding, OnLoad, OnPreRender, OnUnload OnInit , OnDataBinding, OnLoad, OnPreRender, OnUnload Ci si può iscrivere agli eventi relativi:Ci si può iscrivere agli eventi relativi:
this.Load += new EventHandler (myLoadEvent);this.Load += new EventHandler (myLoadEvent);
10http://www.codearchitects.com
ProprietàProprietà
Introduzione Introduzione
Le Web Part, come gli altri controlli web, possono Le Web Part, come gli altri controlli web, possono esporre proprietà custom che permettono di esporre proprietà custom che permettono di personalizzarne il comportamento e l’aspettopersonalizzarne il comportamento e l’aspetto
Due tipi di proprietà:Due tipi di proprietà: Proprietà della classe baseProprietà della classe base Proprietà customProprietà custom
Tutte le proprietà devono poter essere serializzabili Tutte le proprietà devono poter essere serializzabili tramite l’XmlSerializertramite l’XmlSerializer
Gli attributi della proprietà ne possono cambiare il Gli attributi della proprietà ne possono cambiare il comportamentocomportamento
11http://www.codearchitects.com
ProprietàProprietà
Attributi supportatiAttributi supportati Browsable (.Net)Browsable (.Net) Category (.Net)Category (.Net) Description (.Net)Description (.Net) - Ecc. – - Ecc. – FriendlyName (Web Part Framework)FriendlyName (Web Part Framework) HtmlDesigner (Web Part Framework)HtmlDesigner (Web Part Framework) WebPartStorage (Web Part Framework)WebPartStorage (Web Part Framework) - Ecc. - - Ecc. -
12http://www.codearchitects.com
ProprietàProprietà
Modifica e salvataggio dei valori delle proprietàModifica e salvataggio dei valori delle proprietà Le proprietà vengono serializzate e salvate nel databaseLe proprietà vengono serializzate e salvate nel database Due contesti di salvataggioDue contesti di salvataggio
SharedShared PersonalPersonal
Il tipo di storage è controllato dall’attributo Il tipo di storage è controllato dall’attributo WebPartStorageWebPartStorage::
WebPartStorage = WebPartStorage = Storage.SharedStorage.Shared WebPartStorage = WebPartStorage = Storage.PersonalStorage.Personal WebPartStorage = WebPartStorage = Storage.NoneStorage.None
I valori di default delle proprietà possono anche essere I valori di default delle proprietà possono anche essere salvati nel file .dwpsalvati nel file .dwp
<WebPart>...
<Text xmlns=”MyWebPart”>Hello World!</Text></WebPart>
13http://www.codearchitects.com
ProprietàProprietà
[Browsable(true),Category("Miscellaneous"),DefaultValue(defaultText),WebPartStorage(Storage.Personal),FriendlyName("Text"),Description("Text Property")]public string Text{
get{
return _text;}set{
_text = value;}
}
protected override void RenderWebPart(HtmlTextWriter output){
output.Write(SPEncode.HtmlEncode(this.Text));}
14http://www.codearchitects.com
RenderingRendering
Due metodi per eseguire il renderingDue metodi per eseguire il rendering Il codice HTML viene generato tutto manualmente, Il codice HTML viene generato tutto manualmente,
all’interno di RenderWebPartall’interno di RenderWebPart Pro: controllo totale sul codice generatoPro: controllo totale sul codice generato Contro: codifica molto lunga, non si sfruttano alcuni dei Contro: codifica molto lunga, non si sfruttano alcuni dei
vantaggi più interessanti di ASP.NETvantaggi più interessanti di ASP.NET Creare dei controlli ASP.NET all’interno di Creare dei controlli ASP.NET all’interno di
CreateChildControls, ed eseguirne il rendering in CreateChildControls, ed eseguirne il rendering in RenderWebPartRenderWebPart
Pro: La generazione di output complesso (es: griglie) è Pro: La generazione di output complesso (es: griglie) è incapsulata all’interno delle classi di .NETincapsulata all’interno delle classi di .NET
Pro: Si possono sfruttare eventiPro: Si possono sfruttare eventi Contro: in alcuni casi personalizzazioni avanzate Contro: in alcuni casi personalizzazioni avanzate
richiedono più sforzo di una completa codifica manualerichiedono più sforzo di una completa codifica manuale
Soluzione ideale: scrivere Web Part sotto forma di Soluzione ideale: scrivere Web Part sotto forma di user control, ma...gli user control non sono user control, ma...gli user control non sono attualmente supportati!attualmente supportati!
15http://www.codearchitects.com
Rendering di controlli ASP.NETRendering di controlli ASP.NETprotected override void CreateChildControls() {
btnSubmit = new Button();btnSubmit.Text = "Somma";btnSubmit.Click += new EventHandler(btnSubmit_Click);this.Controls.Add(btnSubmit);
txtOp1 = new TextBox();this.Controls.Add(txtOp1);txtOp2 = new TextBox();this.Controls.Add(txtOp2);lblResult = new Label();this.Controls.Add(lblResult);
}
public void btnSubmit_Click(object sender, EventArgs e) {lblResult.Text = "La somma è " +
(Convert.ToInt32(txtOp1.Text)+Convert.ToInt32(txtOp2.Text)).ToString();}
protected override void RenderWebPart(HtmlTextWriter output) {output.Write("Operando 1: ");txtOp1.RenderControl(output);output.Write("Operando 2: ");txtOp2.RenderControl(output);btnSubmit.RenderControl(output);lblResult.RenderControl(output);
}
16http://www.codearchitects.com
DeploymentDeployment
Deployment manualeDeployment manuale1)1) Compilazione con strong name (opzionale)Compilazione con strong name (opzionale)
2)2) Copia dell’assembly nel folder /binCopia dell’assembly nel folder /bin
3)3) Registrazione come “safe control”Registrazione come “safe control”
4)4) Preparazione e copia/importazione del file .dwpPreparazione e copia/importazione del file .dwp
Deployment “semi-automatico”Deployment “semi-automatico”1)1) Compilazione con strong name (opzionale)Compilazione con strong name (opzionale)
2)2) Preparazione del file .dwpPreparazione del file .dwp
3)3) Preparazione di un file manifest.xmlPreparazione di un file manifest.xml
4)4) Preparazione di un pacchetto .cabPreparazione di un pacchetto .cab
5)5) Installazione del pacchetto .cab con stsadm.exeInstallazione del pacchetto .cab con stsadm.exe
17http://www.codearchitects.com
Deployment manualeDeployment manuale
Compilare un assembly con strong name Compilare un assembly con strong name significa dargli un nome univoco, per versioni significa dargli un nome univoco, per versioni diverse. Assembly con lo stesso nome possono diverse. Assembly con lo stesso nome possono coesistere senza essere rinominaticoesistere senza essere rinominati
Creare un file con le chiavi pubblica/privataCreare un file con le chiavi pubblica/privatasn.exe - k c:\keypair.snksn.exe - k c:\keypair.snk
Modificare AssemblyInfo.cs, impostando gli attributi Modificare AssemblyInfo.cs, impostando gli attributi AssemblyVersion e AssemblyKeyFileAssemblyVersion e AssemblyKeyFile
[assembly: AssemblyKeyFile(@"c:\keypair.snk")] [assembly: AssemblyVersion("1.0.0.0")]
18http://www.codearchitects.com
Deployment manualeDeployment manuale
Registrazione come safe controlRegistrazione come safe control Aggiungere una nuova entry all’interno di Aggiungere una nuova entry all’interno di
<SafeControls> in web.config (senza “a capo”)<SafeControls> in web.config (senza “a capo”)
Il file .dwp di descrizioneIl file .dwp di descrizione<?xml version="1.0" encoding="utf-8"?><WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" >
<Title>WebCalc</Title><Description>Impressive beb-based calculator</Description><Assembly>WebCalcWebPart</Assembly><TypeName>WebCalcWebPart.WebCalc</TypeName><!– Valori di default per proprietà... -->
</WebPart>
<SafeControlAssembly="WebCalcWebPart, Version=1.0.0.0, Culture=neutral,PublicKeyToken=e0cc4e02e14341c1" Namespace="WebCalcWebPart“TypeName="*" Safe="True"
/>
19http://www.codearchitects.com
Deployment con stsadm.exeDeployment con stsadm.exe
Stsadm.exe può installare una o più Web Part Stsadm.exe può installare una o più Web Part presenti all’interno di un pacchetto .cab. Si presenti all’interno di un pacchetto .cab. Si occupa di:occupa di: Copiare gli assembly in /binCopiare gli assembly in /bin Copia i file .dwp di descrizione in /wpcatalogCopia i file .dwp di descrizione in /wpcatalog Copia eventuali file di risorse in /wpresourcesCopia eventuali file di risorse in /wpresources Registra le Web Part come safe controlRegistra le Web Part come safe control Copiare il file .cab all’interno del database di Copiare il file .cab all’interno del database di
configurazioneconfigurazione
20http://www.codearchitects.com
Deployment con stsadm.exeDeployment con stsadm.exe
Stsadm.exe installa un pacchetto .cab che deve contenere:Stsadm.exe installa un pacchetto .cab che deve contenere: Gli assembly .dllGli assembly .dll I file .dwp di descrizioneI file .dwp di descrizione Eventuali file di risorseEventuali file di risorse Un file manifest.xml che elenca tutti i fileUn file manifest.xml che elenca tutti i file
Il pacchetto .cab può essere creato da VS.NETIl pacchetto .cab può essere creato da VS.NET Setup & Deployment Projects \ CAB ProjectSetup & Deployment Projects \ CAB Project Basta includere “Primary Output” e “Content Files”Basta includere “Primary Output” e “Content Files”
Stsadm.exe –o addwppack –filename path_to_webpart.cabStsadm.exe –o addwppack –filename path_to_webpart.cab
Opzione Opzione –globalInstall–globalInstall: installa gli assembly nella GAC: installa gli assembly nella GAC pieni permessi di esecuzione -> deployment facilitato, ma meno sicuropieni permessi di esecuzione -> deployment facilitato, ma meno sicuro
Opzione Opzione –force–force: sovrascrive la Web Part, se già presente: sovrascrive la Web Part, se già presente
21http://www.codearchitects.com
DeploymentDeployment
<?xml version="1.0"?><WebPartManifest xmlns="http://schemas.microsoft.com/WebPart/v2/Manifest"> <Assemblies> <Assembly FileName="WebCalcWebPart.dll"> <ClassResources> <ClassResource FileName="Resource.jpg"/> </ClassResources> <SafeControls> <SafeControl Namespace="WebCalcWebPart" TypeName="*" /> </SafeControls> </Assembly> </Assemblies> <DwpFiles> <DwpFile FileName="WebCalc.dwp"/> </DwpFiles></WebPartManifest>
Contenuto del file manifest.xml fileContenuto del file manifest.xml file
22http://www.codearchitects.com
Apportare delle modifiche a web.configApportare delle modifiche a web.config debug="true" in <compilation>debug="true" in <compilation> mode="RemoteOnly" o mode="Off" in <customErrors>mode="RemoteOnly" o mode="Off" in <customErrors> CallStack="true" nel tag <SafeMode>CallStack="true" nel tag <SafeMode>
Eseguire il debug di una Web Part:Eseguire il debug di una Web Part:1)1) Compilare, registrare e importare la Web Part in una pagina Compilare, registrare e importare la Web Part in una pagina
(può essere richiesto un riavvio di IIS – iisreset)(può essere richiesto un riavvio di IIS – iisreset)
2)2) Impostare i breakpointImpostare i breakpoint
3)3) Da VS.NET selezionare “Tools / Debug Processes...” oppure Da VS.NET selezionare “Tools / Debug Processes...” oppure “Debug / Processes...” e selezionare “w3wp.exe”“Debug / Processes...” e selezionare “w3wp.exe”
Se w3wp.exe non è elencato, assicurarsi che l’opzione Se w3wp.exe non è elencato, assicurarsi che l’opzione “Show system processes” sia selezionata, e caricare una “Show system processes” sia selezionata, e caricare una pagina del browser per assicurarsi che il processo partapagina del browser per assicurarsi che il processo parta
4)4) Caricare la pagina nel browser...l’esecuzione si fermerà al Caricare la pagina nel browser...l’esecuzione si fermerà al breakpointbreakpoint
DebuggingDebugging
23http://www.codearchitects.com
RisorseRisorse
SmartPartSmartPart Web part che permette di “hostare” User ControlWeb part che permette di “hostare” User Control Permette di scrivere Web Part in modo molto più Permette di scrivere Web Part in modo molto più
immediato, riutilizzando controlli già prontiimmediato, riutilizzando controlli già pronti Gli user control possono essere testati all’interno di una Gli user control possono essere testati all’interno di una
normale pagina ASP.NET, prima di essere aggiunti ad normale pagina ASP.NET, prima di essere aggiunti ad una pagina di SharePointuna pagina di SharePoint
Debug molto semplificatoDebug molto semplificato Permette allo user control referenziato di esporre Permette allo user control referenziato di esporre
proprietà e di supportare connessioni, mediante proprietà e di supportare connessioni, mediante implementazione di sue interfacceimplementazione di sue interfacce
http://www.smartpart.infohttp://www.smartpart.info
24http://www.codearchitects.com
RisorseRisorse
STSAdmWin (Microsoft)STSAdmWin (Microsoft) Interfaccia grafica per stsadm.exeInterfaccia grafica per stsadm.exe Bastato file file .xml di definizioni dei comandiBastato file file .xml di definizioni dei comandi
Facilmente estendibile, se necessarioFacilmente estendibile, se necessario
http://download.microsoft.com/download/1/6/8/1688http://download.microsoft.com/download/1/6/8/16887e30-897e-4d6c-afce-3e85a43e6eaa/stsadmWin-2g7e30-897e-4d6c-afce-3e85a43e6eaa/stsadmWin-2go.zipo.zip
25http://www.codearchitects.com
RisorseRisorse
WPPackager (Microsoft)WPPackager (Microsoft) Crea un pacchetto .msi autoinstallanteCrea un pacchetto .msi autoinstallante
L’utente può scegliere se installare la Web Part nella GACL’utente può scegliere se installare la Web Part nella GAC Disinstallazione standardDisinstallazione standard Può creare nuovi permission-set (utile se il pacchetto non Può creare nuovi permission-set (utile se il pacchetto non
viene installato nella GAC)viene installato nella GAC) Necessita di:Necessita di:
Il file manifest.xml, e tutti gli altri file della libreriaIl file manifest.xml, e tutti gli altri file della libreria Un “packaging file”, che indica proprietà del file MSI Un “packaging file”, che indica proprietà del file MSI
risultante, politiche di sicurezza, e il nome del manifest risultante, politiche di sicurezza, e il nome del manifest da includereda includere
http://www.microsoft.com/downloads/http://www.microsoft.com/downloads/details.aspx?FamilyIddetails.aspx?FamilyId=0FDA5912-C136-4B44-911A-011ADFCC66E3&di=0FDA5912-C136-4B44-911A-011ADFCC66E3&displaylang=ensplaylang=en
26http://www.codearchitects.com
Tool PartTool Part
IntroduzioneIntroduzione
Sono anch’essi controlli web, usati per aggiungere Sono anch’essi controlli web, usati per aggiungere funzionalità al tool pane standardfunzionalità al tool pane standard
Diverse dalle Web PartDiverse dalle Web Part Non possono essere spostateNon possono essere spostate Poche proprietà nella classe basePoche proprietà nella classe base Non c’è supporto per lo storage di proprietàNon c’è supporto per lo storage di proprietà Rendering solo all’interno del tool paneRendering solo all’interno del tool pane
Il processo di rendering è simile a quello delle Web PartIl processo di rendering è simile a quello delle Web Part Non si può fare l’override di ToolPart.Render()Non si può fare l’override di ToolPart.Render() Bisogna fare l’override di Bisogna fare l’override di ToolPart.RenderToolPart()ToolPart.RenderToolPart()
27http://www.codearchitects.com
Tool PartTool Part Metodi importantiMetodi importanti
ToolPart.ApplyChanges()ToolPart.ApplyChanges() Chiamato quando l’utente clicca Apply / Ok dalla pagina Chiamato quando l’utente clicca Apply / Ok dalla pagina
delle proprietàdelle proprietà
ToolPart.CancelChanges()ToolPart.CancelChanges() Chiamato quando l’utente clicca Cancel dalla pagina delle Chiamato quando l’utente clicca Cancel dalla pagina delle
proprietàproprietà
ToolPart.SyncChanges()ToolPart.SyncChanges() Chiamato quando serve un refresh della toolpart (ad es. Chiamato quando serve un refresh della toolpart (ad es.
quando un’altra toolpart salva le sue proprietà)quando un’altra toolpart salva le sue proprietà)
WebPart.GetToolParts()WebPart.GetToolParts() Metodo della Web Part base, usato per associare le Metodo della Web Part base, usato per associare le
toolpart della Web Parttoolpart della Web Part
28http://www.codearchitects.com
ToolPartToolPart – RenderToolPart() – RenderToolPart()
protected override void RenderToolPart(HtmlTextWriter output){
//get a reference to the parent Web PartSpecialSayHello parentWebPart
= (SpecialSayHello) this.ParentToolPane.SelectedWebPart;
//print the text box HTMLoutput.Write("Enter your age: ");output.Write("<input name='" + inputName);output.Write("' type='text' value='" + SPEncode.HtmlEncode(parentWebPart.Age) + "'>");
}
public override void ApplyChanges(){
//get a reference to the parent Web PartSpecialSayHello parentWebPart
= (SpecialSayHello) this.ParentToolPane.SelectedWebPart;
//set the Age property of the parent Web Part based on Form InputparentWebPart.Age = Page.Request.Form[inputName];
}
29http://www.codearchitects.com
ToolPartToolPart – GetToolParts() – GetToolParts()
public override ToolPart[] GetToolParts(){
//the array that holds instances of all ToolPartsToolPart[] toolparts = new ToolPart[3];//standard toolparts creationWebPartToolPart wptp = new WebPartToolPart();CustomPropertyToolPart custom = new CustomPropertyToolPart();
//the toolpart that we are adding creationAgeDisplayerToolPart ad = new AgeDisplayerToolPart();
toolparts[0] = wptp;toolparts[1] = custom;toolparts[2] = ad;
return toolparts;}
30http://www.codearchitects.com
ConnessioniConnessioni
Le connessioni permettono a Web Part separate Le connessioni permettono a Web Part separate (ed indipendenti) di scambiarsi dati di tipo base: (ed indipendenti) di scambiarsi dati di tipo base: Cell, Row, List ecc.Cell, Row, List ecc.
Implementazione di un set di interfacce standardImplementazione di un set di interfacce standard
Due Web Part possono essere collegate da Due Web Part possono essere collegate da browser o FrontPagebrowser o FrontPage
31http://www.codearchitects.com
Connessioni – ScenariConnessioni – Scenari
Parent / ChildParent / Child
Master / DetailMaster / Detail
Data entry and filteringData entry and filtering
32http://www.codearchitects.com
Connessioni – InterfacceConnessioni – Interfacce
ICellProvider, ICellConsumer ICellProvider, ICellConsumer IRowProvider, IRowConsumer IRowProvider, IRowConsumer IListProvider, IListConsumer IListProvider, IListConsumer IFilterProvider, IFilterConsumer IFilterProvider, IFilterConsumer IParametersOutProvider, IParametersOutProvider,
IParametersOutConsumerIParametersOutConsumer IParametersInProvider, IParametersInConsumerIParametersInProvider, IParametersInConsumer
33http://www.codearchitects.com
Connessioni Connessioni – – Cell Consumer/Provider diagramCell Consumer/Provider diagram
ICellProviderICellProvider
EventsEvents
CellProviderInit()CellProviderInit()
CellReady()
Event Handlers
CellConsumerInit()
ICellConsumerICellConsumer
EventsEvents
CellConsumerInit()CellConsumerInit()
Event Handlers
CellProviderInit()
CellReady()
Web Part FrameworkWeb Part Framework
34http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
EnsureInterfaces()EnsureInterfaces() RegisterInterface()RegisterInterface()
CanRunAt()CanRunAt()
PartCommunicationConnect()PartCommunicationConnect()
PartCommunicationInit()PartCommunicationInit() Solleva eventi Init (Es. CellProviderInit)Solleva eventi Init (Es. CellProviderInit)
PartCommunicationMain()PartCommunicationMain() Solleva gli eventi rimanenti (Es. CellReady)Solleva gli eventi rimanenti (Es. CellReady)
35http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
1)1) Creare la classe che implementa le interfacceCreare la classe che implementa le interfacce
2)2) Dichiarare gli eventiDichiarare gli eventi
public class CellProvider : WebPart, ICellProvider {
// ...}
// CellProviderInit Event – // provides the field name and display field name to the consumer Web
Partpublic event CellProviderInitEventHandler CellProviderInit;
// CellReady Event - occurs whenever a cell is selected or updatedpublic event CellReadyEventHandler CellReady;
36http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
3)3) Fare l’override del metodo EnsureInterfaces, e al Fare l’override del metodo EnsureInterfaces, e al suo interno chiamare RegisterInterfacesuo interno chiamare RegisterInterface
4)4) Fare l’override del metodo CanRunAtFare l’override del metodo CanRunAtpublic override ConnectionRunAt CanRunAt() {
return ConnectionRunAt.ServerAndClient;}
public override void EnsureInterfaces() {
RegisterInterface("MyCellProviderInterface_WPQ_", "ICellProvider",
WebPart.UnlimitedConnections, ConnectionRunAt.ServerAndClient,
this, "CellProviderInterface_WPQ_","Fornisce singolo valore a...","Fornisce ad un’altra Web Part il valore inserito nella
textbox");
}
37http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
5)5) Fare l’override di PartCommunicationConnectFare l’override di PartCommunicationConnect Notifica la Web Part che è stata creata una connessioneNotifica la Web Part che è stata creata una connessione
public override void PartCommunicationConnect(string interfaceName, WebPart connectedPart, string connectedInterfaceName, ConnectionRunAt runAt)
{if (runAt == ConnectionRunAt.Client){
_runAtClient = true;return;
}
EnsureChildControls(); // create the Web Part's controls
// Check if this is my particular cell interface if (interfaceName == "MyCellProviderInterface_WPQ_")
_cellConnectedCount++; // count connections}
38http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
6)6) Opzionale: override del metodo Opzionale: override del metodo PartCommunicationInit, responsabile del PartCommunicationInit, responsabile del sollevamento degli eventi di inizializzazionesollevamento degli eventi di inizializzazione
public override void PartCommunicationInit(){
if(_cellConnectedCount > 0){
if (CellProviderInit != null){
CellProviderInitEventArgs args =new CellProviderInitEventArgs();
args.FieldName = _cellName;args.FieldDisplayName = _cellDisplayName;CellProviderInit(this, args);
}}
}
39http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
7)7) Opzionale: override del metodo Opzionale: override del metodo PartCommunicationMain, responsabile del PartCommunicationMain, responsabile del sollevamento degli altri eventi (es: CellReady)sollevamento degli altri eventi (es: CellReady)
public override void PartCommunicationMain(){
if (_cellConnectedCount > 0){
if (CellReady != null){
CellReadyEventArgs args = new CellReadyEventArgs();args.Cell = this.ctlInputBox.Text;CellReady(this, args);
}}
}
40http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
8)8) Implementare gli appropriati gestori di evento, a Implementare gli appropriati gestori di evento, a seconda del tipo di interfaccia che si sta seconda del tipo di interfaccia che si sta implementandoimplementando
public void CellConsumerInit(object sender, CellConsumerInitEventArgs cellConsumerInitEventArgs)
{// This is where the Provider part could see what type of "Cell"// the Consumer was expecting/requesting.
}
41http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
9)9) Fare l’override del metodo CreateChildControlsFare l’override del metodo CreateChildControls
protected override void CreateChildControls() {
// crea il bottone di submit e registra il suo evento ClickctlSubmitButton = new Button();ctlSubmitButton.ID = “SubmitButton";ctlSubmitButton.Text = “Submit";this.Controls.Add(ctlSubmitButton);ctlSubmitButton.Click += new EventHandler(SubmitButtonClicked);
// crea il controllo textBoxctlInputBox = new TextBox();ctlInputBox.ID = “InputBox";this.Controls.Add(ctlInputBox);
cellName = “InputBox";cellDisplayName = "InputBox Cell";
}
42http://www.codearchitects.com
Connessioni – CodiceConnessioni – Codice
10)10) Fare l’override del metodo RenderWebPartFare l’override del metodo RenderWebPart
protected override void RenderWebPart(HtmlTextWriter output){
EnsureChildControls();if (_runAtClient){
// Render client connection code if needed}else{
if (_cellConnectedCount > 0){
this.ctlInputBox.RenderControl(output);this.ctlSubmitButton.RenderControl(output);
}else
output.Write(“No connection is set-up.");}
}
43http://www.codearchitects.com
Estendere il frameworkEstendere il framework
Property BuilderProperty Builder Pagine web (.htm) caricate all’interno di Pagine web (.htm) caricate all’interno di
dialog del browserdialog del browser
Collegato alle proprietà che ne vogliono Collegato alle proprietà che ne vogliono fare uso tramite attributo fare uso tramite attributo HtmlDesignerAttributeHtmlDesignerAttribute
Es: Color picker; picture picker, file Es: Color picker; picture picker, file picker, date pickerpicker, date picker
(questi sono già implementati, (questi sono già implementati, e disponibili tramite e disponibili tramite costanti del tipo costanti del tipo BrowserBuilderType.*)BrowserBuilderType.*)
44http://www.codearchitects.com
Estendere il frameworkEstendere il framework
Menu della Web PartMenu della Web Part Possibilità di aggiungere voci custom al context menu Possibilità di aggiungere voci custom al context menu
delle proprie Web Partdelle proprie Web Part
Override del metodo Override del metodo CreateWebPartMenu()CreateWebPartMenu() Si possono aggiungere elementi MenuItem alla collezione Si possono aggiungere elementi MenuItem alla collezione
WebPartMenu.MenuItems, associandovi del codice WebPartMenu.MenuItems, associandovi del codice javascript client-side, e un gestore di evento server-sidejavascript client-side, e un gestore di evento server-side
Si possono referenziare le voci di menu built-in, per Si possono referenziare le voci di menu built-in, per nasconderle, disabilitarle, cambiarle di posizione, o nasconderle, disabilitarle, cambiarle di posizione, o associarvi un comportamento diversoassociarvi un comportamento diverso
45http://www.codearchitects.com
Il futuroIl futuro
ASP.NET 2.0 include il supporto per Web PartASP.NET 2.0 include il supporto per Web Part Possibilità di scrivere Web Part come User Control!Possibilità di scrivere Web Part come User Control! Supporto per le Web Part per SharePoint già esistentiSupporto per le Web Part per SharePoint già esistenti La prossima versione di SharePoint sarà basata su La prossima versione di SharePoint sarà basata su
ASP.NET 2.0 e potrà sfruttare i vantaggi delle sue Web ASP.NET 2.0 e potrà sfruttare i vantaggi delle sue Web PartPart
Microsoft intende rilasciare un aggiornamento per Microsoft intende rilasciare un aggiornamento per SharePoint che consenta il supporto delle Web Part di SharePoint che consenta il supporto delle Web Part di ASP.NET 2.0 prima di SharePoint 3.0ASP.NET 2.0 prima di SharePoint 3.0