Windows SharePoint 2003 Products & Technologies – Sviluppare Web Part

46
1 Windows SharePoint 2003 Products Windows SharePoint 2003 Products & Technologies & Technologies Sviluppare Web Part Sviluppare Web Part Marco Bellinaso Marco Bellinaso Senior trainer & consultant Senior trainer & consultant Code Architects S.r.l. Code Architects S.r.l. Web: Web: http://www.codearchitects.com http://www.codearchitects.com E-mail: E-mail: [email protected] [email protected]

description

Windows SharePoint 2003 Products & Technologies – Sviluppare Web Part. Marco Bellinaso Senior trainer & consultant Code Architects S.r.l. Web: http://www.codearchitects.com E-mail: [email protected]. Biografia. Consulenza, sviluppo e training con Code Architects Srl - PowerPoint PPT Presentation

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

46http://www.codearchitects.com

Domande?

http://www.ugisharepoint.ithttp://www.dotnet2themax.it/blog