SERIE: IL CLIENT SIDE RENDERING DI SHAREPOINT 2013
- Introduzione al Client Side Rendering di SharePoint 2013
- Ridefinire la visualizzazione di un campo tramite il Client Side Rendering - Parte 1
- Utilizzare i namespace Javascript nella definizione di template per il Client Side Rendering
- Ridefinire la visualizzazione di un campo tramite il Client Side Rendering - Parte 2
- Ridefinire la modalità di inserimento di valori in un campo tramite il Client Side Rendering
- Gestire la modalità "Quick edit" all'interno di un display template
- Come applicare un plugin JQuery su un display template
- Aggiungere un tooltip per aiutare l'inserimento di valori tramite il Client Side Rendering
- Specificare più file Javascript all’interno della proprietà JSLink
- Utilizzare file CSS nei display template del Client Side Rendering
- Modificare il rendering delle righe di una lista tramite il Client Side Rendering
- Modificare l'intera visualizzazione di una lista tramite il Client Side Rendering
- Applicare il plugin MixItUp su liste SharePoint 2013 tramite il Client Side Rendering
- Provisioning di display template (questo post)
- Ridefinire il rendering di un custom field tramite il Client Side Rendering
Siamo quasi alla fine della serie e, come promesso, oggi vedremo le tecniche che abbiamo a disposizione per installare i nostri display template all'interno di SharePoint in maniera automatica.
Come abbiamo visto nei precedenti post, per fare in modo che il motore del Client Side Rendering di SharePoint 2013 applichi il nostro display template a liste o campi, è necessario valorizzare la proprietà JSLink con l'URL del file Javascript contenente la definizione del display template. Vi ricordo che la proprietà JSLink è stata aggiunta in tutte le web part di default di SharePoint.
Effettuare questa operazione a mano è sicuramente la via giusta se abbiamo scritto un display template per una specifica esigenza (es: per una specifica lista), mentre risulta un'operazione veramente scomoda se va fatta su più liste e totalmente impensabile se vogliamo fare in modo che ogni lista creata con un particolare template venga configurata con il nostro display template.
Provisioning tramite Server Object Model
Bene, vediamo una prima tecnica che abbiamo a disposizione. Questa prima tecnica sfrutta il Server Object Model di SharePoint 2013 per installare in automatico un display template all'interno di tutte le viste e tutte le form di una specifica lista.
Ho deciso di inserire questo codice all'interno di una farm solution, contenente sia un feature receiver che gli oggetti necessari al provisioning di una lista (nel mio caso sempre una lista di task).
Ecco il codice del feature eceiver.
public class ProvisioningEventReceiver : SPFeatureReceiver { private const string JS_LINK_URL = "~sitecollectionlayouts/D4S/Scripts/TaskPercentComplete.js"; public override void FeatureActivated(SPFeatureReceiverProperties properties { SPWeb web = properties.Feature.Parent as SPWeb; if (web != null) { SPList list = web.GetList("Lists/MyTasks"); UpdateListForm(list.Forms[PAGETYPE.PAGE_EDITFORM].Url, web); UpdateListForm(list.Forms[PAGETYPE.PAGE_NEWFORM].Url, web); UpdateListForm(list.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url, web); for (int i = 0; i < list.Views.Count; i++) { SPView view = list.Views[i]; view.ViewFields.Add("PercentComplete"); view.JSLink = JS_LINK_URL; view.Update(); } } } private void UpdateListForm(string url, SPWeb web) { SPLimitedWebPartManager webPartManager = web.GetLimitedWebPartManager(url, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared); ListFormWebPart formWebPart = webPartManager.WebParts[0] as ListFormWebPart; if (formWebPart != null) { formWebPart.JSLink = JS_LINK_URL; webPartManager.SaveChanges(formWebPart); } } }
<View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/15/content/images/generic.png?rev=23" Url="AllItems.aspx"> <Toolbar Type="Standard" /> <XslLink Default="TRUE">main.xsl</XslLink> <JSLink>~sitecollectionlayouts/D4S/Scripts/CustomContentTypeRendering.js</JSLink> <RowLimit Paged="TRUE">30</RowLimit> <ViewFields> <FieldRef Name="LinkTitle"></FieldRef> </ViewFields> <Query> <OrderBy><FieldRef Name="ID"></FieldRef></OrderBy> </Query> <ParameterBindings> <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" /> <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" /> </ParameterBindings> </View>
<?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <!-- QUESTO LINK NON VIENE PRESO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--> <ContentType ID="0x0100EBFEC1154AB94CDB82A0E138287E8B5E" Name="Custom content type" Group="Dev4Side" Description="" Inherits="TRUE" JSLink="~sitecollectionlayouts/D4S/Scripts/CustomContentTypeRendering.js" Version="0"> <FieldRefs> </FieldRefs> </ContentType> </Elements>