Molto spesso può capitare di volere togliere la possibilità agli utenti di eseguire delle specifiche azioni su una lista o in generale su qualche pagina di un particolare sito e, allo stesso tempo, di voler comunque mantenere un certo tipo di livello di autorizzazioni sull'oggetto in questione (lista, elemento, conten type, pagina, ecc...) per l'utente finale.
La maggior parte di queste azioni, dall'avvento di SharePoint 2010, sono disponibili attraverso la barra dei Ribbon e vengono visualizzate o nascoste in base ai permessi che ha l'utente corrente sull'oggetto che sta visualizzando o che ha selezionato.
Per tutte le azioni custom create da noi, o per alcune delle azioni presenti all'interno dell'Edit Control Block (il menu contestuale che appare sul campo "Title" di ogni elemento di una lista o di una document library), o quelle presenti all'interno del menu "Site actions" o, per esempio, all'interno della pagina "Site settings" di un sito SharePoint, abbiamo la possibilità di utilizzare l'elemento "HideCustomAction" posto all'interno di una specifica feature. A riguardo, c'è da dire che per nascondere alcune delle operazioni che si possono fare tramite l'Edit Control Block, l'unico modo di farlo è modificare un file Javascript o che, in generale, l'elemento HideCustomAction non è che funzioni poi così tanto bene, ma questo è tutto un altro discorso.

Infatti, tale elemento NON è da utilizzare se voglio nascondere qualcosa dalla barra dei Ribbon di SharePoint 2010.
Per nascondere un elemento, un gruppo o addirittura un tab dalla barra dei Ribbon per uno specifico template di lista, per un content type, per uno specifico ProgID o per una singola tipologia di file, non dobbiamo far altro che creare una nuova custom action (utilizzando l'elemento "CustomAction") e definire al suo interno l'inizio della definizione di un nuovo controllo per la barra dei Ribbon, specificando il medesimo identificativo del controllo che invece vogliamo togliere, all'interno dell'attributo "LocationID" dell'elemento "CommandUIDefinition". Lasciando poi vuota l'implementazione.
Ecco quindi il codice della nostra custom action, utile a nasconde il pulsante "New" da tutte le document library che utilizzando il content type "Document" (ID: 0x0101).

<?xml version="1.0" encoding="utf-8"?>

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction Id="PeppeDotNet.Ribbon.Documents.HideNewButton"
Location="CommandUI.Ribbon"
Title="Hides new button from document content type"
RegistrationId="0x0101"
RegistrationType="ContentType"
>
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition Location="Ribbon.Documents.New.NewDocument">
<!-- empty implementation -->
</CommandUIDefinition>
</CommandUIDefinitions>
</CommandUIExtension>
</CustomAction>
</Elements>

Così facendo, se effettuiamo il deploy della nostra soluzione ed attiviamo la corrispondente feature, vedremo che all'interno di una normale Document Library, non avremo più la possibilità di visualizzare il tasto "New".

Hide new button from Ribbon toolbar

L'identificativo per recuperare e quindi nascondere il tasto "New", come avete potuto vedere dal listato qui sopra, è il seguente:

Ribbon.Documents.New.NewDocument

Per recuperare questo identificativo, non dobbiamo far altro che consultare la documentazione oppure aprire e sfogliare per bene il file CMDUI.xml posto all'interno della directory:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\XML

Seguendo questa tecnica siamo in grado di sovrascrivere completamente la barra dei Ribbon di SharePoint 2010 secondo le nostre necessità. Se volessimo infatti fornire agli utenti finali in una nuova interfaccia grafica o una nuova funzionalità per il tasto "New" di una Document Library, non dobbiamo far altro che nasconderlo utilizzando la tecnica appena vista e scrivere una nuova custom action per mettere un nuovo controllo (nel nostro caso un bottone) al suo posto, in grado di fornire delle operazioni personalizzate utili ai nostri scopi.

<?xml version="1.0" encoding="utf-8"?>

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomAction Id="PeppeDotNet.Ribbon.Documents.Replace.HideNewButton"
Location="CommandUI.Ribbon"
Title="Hides new button from document content type"
RegistrationId="0x0101"
RegistrationType=""
>
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition
Location="Ribbon.Documents.New.NewDocument"
/>
</CommandUIDefinitions>
</CommandUIExtension>
</CustomAction>
<CustomAction Id="PeppeDotNet.Ribbon.Documents.Replace"
Location="CommandUI.Ribbon"
Title="Replace new button from document content type"
RegistrationId="0x0101"
RegistrationType="ContentType"
>
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition Location="Ribbon.Documents.New.Controls._children">
<Button Id="PeppeDotNet.Ribbon.Documents.Replace.New"
LabelText="Custom new document"
Image32by32="/_layouts/$Resources:core,Language;/images/formatmap32x32.png"
Image32by32Top="0"
Image32by32Left="-64"
ToolTipTitle="$Resources:core,cui_ButNewDocument;"
ToolTipDescription="$Resources:core,cui_STT_ButNewDocument;"
TemplateAlias="o1"
Sequence="1"
/>
</CommandUIDefinition>
</CommandUIDefinitions>
</CommandUIExtension>
</CustomAction>
</Elements>

Ecco il risultato finale:

Hide new button from Ribbon toolbar

Bello no ? :)
Se volete provare con mano, ecco qua i sorgenti che ho utilizzato per fare le mie prove:
- PeppeDotNet.SP2010.Ribbon.zip



TAGS: [SharePoint] [SharePoint 2010] [Ribbon]
Commenti(6) - Posted @ 2/3/2011 11:45:02 AM - Categoria: Sharepoint - Permalink - Share on twitter | facebook


COMMENTI
Autore: Daniele - scritto il 4/27/2011 10:19:09 AM
Se io voglio inserire un comand all'interno del nuovo bottone,dove vado poi a definire il comandUIHandlers relativo al nuovo bottone?All'interno della seconda custom Action?

Ed inoltre se devo richiamare del codice Javascript presente in file .js all'interno della seconda customAction come posso fare?

Grazie

Daniele

Autore: Peppe - scritto il 4/27/2011 10:23:42 AM
Ciao Daniele.
Si, se vuoi definire il command del nuovo bottone lo devi scrivere all'interno della seconda custom action.
Per richiamare codice Javascript presente in file .js in base alla customAction ti basta semplicemente creare due funzioni differenti e richiamarle nelle due customAction differenti.
Il file .js poi lo puoi inserire sotto la directory /14/TEMPLATE/LAYOUTS così da poterlo poi inserire all'interno della pagina o tramite un'altra custom action o modificando la master page.

Autore: Daniele - scritto il 4/27/2011 11:08:43 AM
Grazie del suggerimento Peppe......

quindi se io vorrei modificare 2 bottoni consecuitivi all'interno della ribbon scambiando il primo con il secondo e viceversa dovrei utilizzare questo metodo?.....quindi creare prima una CustomAction per nascondere il bottone ed una seconda per sostituirlo?.....

Grazie

Daniele

Autore: Peppe - scritto il 4/27/2011 11:42:56 AM
Esatto! Per modificare la posizione di due button non ci sono altri metodi se non toglierli e riscriverli utilizzando un nuovo valore per l'attribute sequence.
Conta poi che puoi riutilizzare i command dei bottoni già esistenti. Se apri il file CMDUI.xml trovi tutti i riferimenti che ti servono sia ai nomi dei bottoni, che ai loro valori di sequenza, che ai nomi dei rispettivi comandi.

Autore: Salvo - scritto il 5/5/2011 9:41:47 PM
Ciao Peppe,
ho la necessità di modificare il control FontBackground nel Gruppo Ribbon.EditingTools.CPEditTab,vorrei che venisse mostrato nel ColorPicker soltanto il colore grigio.La mia idea era di nascondere quello standard ed aggiungerne uno custom al suo posto utilizzando la stessa immagine.Il problema che ho riscontrato è che il template che viene utilizzato in questo gruppo non è Flexible2 quindi non può essere modificato.Me lo confermi? Il significato di Flexible e Flexible2 è quello che ho capito io?
Grazie in anticipo
Salvo

Autore: Peppe - scritto il 5/9/2011 9:35:02 AM
Ciao Salvo.
Mah guarda.. la differenza tra Flexible e Flexible2 da quanto ho capito io sta proprio nel rendering. Uno permette la visualizzazione di un rendering flessibile a fronte di ridimensionamenti della pagina. L'altro no.
Non credo che centri niente con la sovrascrittura dei controlli nella Ribbon.
Ma tu hai provato a sovrascriere il conrtollo FontForeground e ti ha dato errore ?

Peppe

INSERISCI UN COMMENTO

Nome *
Indirizzo e-mail
(non verrà pubblicato)
Commento *