29

Mar

EXAM 70-573: Create and Implement Delegate Controls

I Delegate Control sono un modo alternativo per aggiungere controlli alle normali pagine .aspx di SharePoint.

Siamo abituati ad aggiungere controlli nelle pagine o con la tecnica del Drag & Drop o manualmente nel markup. I Delegate Control offrono la possibilità di aggiungere/modificare un controllo in una pagina senza ricompilare o modificare la pagina che si vuole aggiornare. Non è neppure necessario modificare la master page o le layout page. Il semplice deploy di una feature è sufficiente, vediamo come:

Innanzi tutto è necessario definire un Delegate Control nella Master Page:

<SharePoint:DelegateControl runat="server" ControlId="EsamaticControl">
  
SharePoint:DelegateControl>

Di fatto abbiamo inserito un contenitore vuoto. Il Delegate Control sopra definito non rappresenta ancora nessun tipo di controllo. Per associare al posto del Delegate Control un vero e proprio controllo usiamo una feature. La feature userà il nome del controllo “EsamaticControl” specificato nell’attributo “ControlId” per effettuare la reale sostituzione. Definiamo il contenitore della feature:

<Feature xmlns="http://schemas.microsoft.com/sharepoint/" Id="E307154D-787B-46C6-BBA0-09082BE04D27" 
Title="Esamatic.SharePoint.DelegateControls"
Description="Specifica lo UserControl da inserire nel Delegate Control 'EsamaticControl' specificato nella Master Page. Lo user control deve essere memorizzato nella folder CONTROLTEMPLATES della Hive." 
Scope="Farm" 
Hidden="FALSE" 
Version="1.0.0.0">
    <ElementManifests>
        <ElementManifest Location="elements.xml"/>
    ElementManifests>
Feature>

Ora definiamo il comportamento della feature configurando in modo opportuno il file “elements.xml”:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    
    <Control Id="EsamaticControl" Sequence="90" ControlSrc="~/_ControlTemplates/EsamaticUserControl.ascx" />
Elements>

In questo modo abbiamo specificato quale controllo dovrà essere caricato nel Delegate control.

Da notare l’attributo “Sequence” del tag Control: se per uno stesso delegate control vengono associati più controlli questo attributo determina quale sarà caricato. Il controllo con il valore minore è quello caricato.

Affinché il Delegate Control possa funzionare correttamente, dopo l’attivazione  della feature sopra specificata, è necessario copiare il file dello usercontrol “EsamaticUserControl.ascx” nella cartella CONTROLTEMPLATES della HIVE ( %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\CONTROLTEMPLATES ).

Per semplificare il deploy della feature e dello user control nella cartella opportuna costruiamo una Solution:

<Solution xmlns="http://schemas.microsoft.com/sharepoint/" SolutionId="6EF2E38F-9E52-4260-8BF2-D60AC63C45A8">
    <FeatureManifests>
        <FeatureManifest Location="Esamatic.SharePoint.DelegateControls\feature.xml" />
    FeatureManifests>
    <TemplateFiles>
        <TemplateFile Location="CONTROLTEMPLATES\EsamaticUserControl.ascx" />
    TemplateFiles>
Solution>

Il file sopra riportato, opportunamente compilato con makecab.exe, genererà un pacchetto .wsp che una volta installato copierà i file ed installerà la feature.

E’ possibile passare parametri al delegate control mediante l’attributo “MyParam”.

L’attributo AllowMutipleControls="true" consente di caricare più controlli contemporaneamente nel Delegate Control. I controlli child saranno prdinati in base al valore specificato nel campo SequenceId.

I Delegate Control sono largamente diffusi in SharePoint, alcuni casi di controlli gestiti mediante i Delegate Control:

  • SmallSearchInputBox
  • AdditionalPageHead (l’attributo AllowMultipleControl è impostato a true)
  • GlobalSiteLink0, GlobalSiteLink1
by Andrea Soldano on 3/29/2011