Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

Rinominare il campo "Title" utilizzando una list definition SharePoint personalizzata

Chi di voi usa le tecniche di provisioning di strutture e dati all'interno delle proprie applicazioni SharePoint, sa bene che quando si crea una nuova list definition basata sulla lista "Custom list" o che comunque contiene un qualsiasi content type che eredita dal content type "Item", vedrà comparire in automatico il campo "Title" all'interno della propria lista.
Il campo Title è quello su cui SharePoint basa molta della sua UI, infatti è il campo a cui è collegato il menu d'azione sul singolo elemento.

Molto spesso però questo campo può non essere necessario all'interno della nostre liste personalizzate, o quanto meno possiamo avere l'esigenza di vedere un campo, con le stesse funzionalità, ma con un nome differente. Questo perché quando andiamo a definire quelle che sono le strutture del modello di dati utili all'applicazione (le nostre liste), è molto facile che tali strutture non prevedano un campo chiamato "Titolo". Non pensate?

Bene, sappiate che non siamo vincolati a quel nome. Dall'interfaccia utente è sempre possibile rinominare quel campo scegliendo un altro nome, ma dovete sapere che possiamo farlo anche all'interno delle nostre applicazioni. In questo modo possiamo fornire all'utente finale, una lista già configurata come meglio ci piace.
Oltretutto, è veramente molto facile rinominare questo campo all'interno di una nostra list definition.

Se proviamo a creare una sola site column, un solo conten type (che eredita da "Item"), una nuova list definition basata su tale content type e proviamo ad aprire il file "Schema.xml" relativo alla nostra nuova list definition, troviamo una situazione di default cui dovremmo ormai essere abituati.
La definizione del nostre content type è stata copiata per intero, così come l'elenco dei campi del content type assieme al campo "Title".

Rinominare il campo Titlte utilizzando una list definition personalizzata

In figura vedete il file "Schema.xml" creato in automatico da Visual Studio 2012 una volta scelto di creare un nuovo elemento di tipo "List" e di associare a questo elemento il content type da noi precedentemente creato.
Se utilizzate Visual Studio 2010 e create un nuovo elemento di tipo "List from content type", l’unica differenza è che non viene copiata la definizione del campo "Title" all'interno della definizione di lista. Poco importa.

Per rinominare il campo "Title" sono sicuro che molti di voi cambierebbero semplicemente il valore dell'attributo "DisplayName" di tale campo con la nuova label scelta. Dite che funziona?

<Fields>      

<Field ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}"
Type="Text"
Name="Title"
DisplayName="Custom title"
Required="TRUE"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
StaticName="Title"
MaxLength="255"
/>
<Field ID="{2646e064-4304-48f5-aadc-e0a26b9baf20}"
Name="D4SRenameTitleSampleField"
StaticName="D4SRenameTitleSampleField"
DisplayName="Sample field"
Type="Text"
Required="FALSE"
Group="Dev4Side"
/>
</Fields>

E inveceeeeeeeee….. NO!
Se modifichiamo solamente quell’attributo, questo è il risultato.

Rinominare il campo Titlte utilizzando una list definition personalizzata

Come vedete, il campo Title rimane sempre con la sua label originale.
Perché? Perché SharePoint ha differenti definizioni del campo Title, come dicevamo ormai qualche anno fa.
Una che prevede il menu di azione ("LinkTitle"), una che prevede solo il link all'elemento ("LinkTitleNoMenu"), una che prevede solamente il testo ("Title") e se vogliamo rinominare il campo come si deve dobbiamo rinominare tutte e 3 queste definizioni.
Ecco quindi il codice XML che dobbiamo aggiungere all'interno della nostra list definition.

<Fields>

<Field ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}"
Type="Text"
Name="Title"
DisplayName="Custom title"
Required="TRUE"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
StaticName="Title"
MaxLength="255"
/>
<Field ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}"
Type="Computed"
StaticName="LinkTitle"
DisplayName="Custom title"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
Name="LinkTitle"
/>
<Field ID="{bc91a437-52e7-49e1-8c4e-4698904b2b6d}"
Type="Computed"
StaticName="LinkTitleNoMenu"
DisplayName="Custom title"
SourceID="http://schemas.microsoft.com/sharepoint/v3"
Name="LinkTitleNoMenu"
/>
<Field ID="{2646e064-4304-48f5-aadc-e0a26b9baf20}"
Name="D4SRenameTitleSampleField"
StaticName="D4SRenameTitleSampleField"
DisplayName="Sample field"
Type="Text"
Required="FALSE"
Group="Dev4Side"
/>
</Fields>

Così facendo abbiamo raggiunto il nostro obbiettivo.

Rinominare il campo Titlte utilizzando una list definition personalizzata

La cosa interessante è che in questo modo abbiamo rinominato solamente il campo "Title" per le liste create con questa nuova list definition, senza intaccare il campo "Title" a livello di site collection, che può continuare ad essere utilizzato con la label di default senza alcun problema.

Vi lascio il sorgente della soluzione che ho utilizzato per scrivere questo post:
- D4S.SP2013.RenameTitleSample.zip (172 KB)
blog comments powered by Disqus