SharePoint Standard Ribboneinträge entfernen

In meinem letzten Blogpost habe ich gezeigt, wie einfach man die SharePoint-Oberfläche verändern kann und einen Hyperlink in das SiteActions-Menü integriert. Dies ist auch umgekehrt möglich, d.h. es können nicht nur neue Einträge hinzugefügt, sondern auch Vorhandene entfernt werden, um gezielt Bereiche oder Funktionalitäten für den Webanwender unerreichbar zu machen.

In diesem Beitrag wird an einem Beispiel erläutert, wie es möglich ist, einen Bereich (Gruppe “CustomizeList”) innerhalb des SharePoint Standard Ribbons (Menübandes) komplett auszublenden. Dies kann über verschiedene Wege erreicht werden: a) deklarativ mittels Custom Action, b) als User Control (.ascx) mit serverseitigem Code oder c) via CSS in der ASPX-Seite oder Masterpage.
Hinweis: Die Struktur des Ribbons (inkl. aller Gruppen und Buttons) ist in der XML-Datei C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\GLOBAL\XML\CMDUI.XML deklariert (Link bezieht sich auf SharePoint 2010, für SharePoint 2013 ist im Pfad statt der Versionsnummer 14 die 15 zu verwenden). Aus dieser XML-Datei lassen sich die Bezeichnungen/IDs jedes Ribbon-Eintrags finden.

Folgende Bilder zeigen das originale Ribbon des Beispielszenarios vor der Änderung image
und das angepasste Ribbon, ohne die Gruppe “Customize List” nach der Änderung.
image

  • Hide Custom Action
    • Zunächst ist in Visual Studio ein neues leeres SharePoint-Projekt anzulegen.
    • Anschließend wird ein neues Feature hinzugefügt im Solution Explorer über Rechtsklick auf den “Feature” Ordner –> Add Feature. Dieses sollte am besten direkt entsprechend aussagekräftig benannt werden (per Doppelklick auf das Feature öffnet sich der Feature Designer).
    • Nun kann die eigentliche Custom Action hinzugefügt werden. Rechtsklick auf den fettgedruckten SolutionName –> Add –> New Item –> Empty Element.
    • In der neu angelegten Elements.xml muss nun folgender Code eingefügt werden:
      <?xml version="1.0" encoding="utf-8"?>
      <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
        <CustomAction Id="RemoveCustomizeListGroup" Location="CommandUI.Ribbon">
          <CommandUIExtension>
            <CommandUIDefinitions>
              <CommandUIDefinition Location="Ribbon.List.CustomizeList" />
            </CommandUIDefinitions>
          </CommandUIExtension>
        </CustomAction>
      </Elements>
    • Anschließend kann die Solution getestet und deployt werden. Nach erneutem Refresh der Listenansicht haben sich die Änderungen direkt ausgewirkt.
  • User control (Server Code)
    • Auch hier ist zunächst in Visual Studio ein neues leeres SharePoint-Projekt anzulegen.
    • Die Assemply “Microsoft.Web.CommandUI.dll” muss als Referenz hinzugefügt werden. References –> Add –> Browse –> C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI
    • Nun muss ein User Control (*.ascx) hinzugefügt werden via Solution Explorer –> Add –> New Item –> User Control (ascx).
    • Im Solution Explorer taucht nun ein sogenannter mapped folder, der Ordner “ControlTemplates” mit einem Unterordner mit dem SolutionName auf. Darin Liegt die ascx-Datei und darunter eine .cs Datei (C#).
      image 
    • In dieser Code behind Datei wird nun in der Page_Load Methode folgendes Codesnippet eingefügt:
      SPRibbon ribbon = SPRibbon.GetCurrent(this.Page); 
      if (ribbon != null) 
      { 
          ribbon.TrimById("Ribbon.List.CustomizeList"); 
      } 
    • Damit die SPRibbon-Klasse verwendet werden kann, muss noch eine Referenz inkludiert werden:

      using Microsoft.SharePoint.WebControls;
    • Jetzt kann die Solution deployt werden.
    • Um das Control verwenden zu können, muss es an entsprechender Stelle (in einer aspx-Seite oder der Masterpage) eingebunden werden. Dazu z.B. im SP Designer die Masterpage öffnen und oben im <Register…> Bereich die Referenz setzen mittels:
      <%@ Register TagPrefix="HRB" TagName="HideRibbonButton" src="~/_controltemplates/HideRibbonButtonUserControlSolution/HideCustomizeListGroup.ascx" %>
    • Anschließend kann das Control z.B. direkt zu Beginn des Body-Bereichs eingebunden werden:

      <HRB:HideRibbonButton id="HideRibbonButton" runat="server"></HRB:HideRibbonButton>
    • Die Änderungen der Masterpage sollten dem folgenden Bild entsprechen:
      image
    • Jetzt kann die Masterpage gespeichert werden. Nach erneutem Refresh der Listenansicht im Browser ist der “CustomizeList” Bereich im Ribbon verschwunden.
  • CSS
    • Diese Methode ist recht schnell umgesetzt, dazu muss die aspx-Page oder Masterpage zunächst mit einem Editor geöffnet werden (z.B. SharePoint Designer).
    • Nun wird im ASP-Code im Bereich <PageHead>  einfach folgendes Script eingefügt. Kurzer Syntaxausflug: Die “\” sind wichtig, damit der Webserver die darauf folgenden Punkte nicht als CSS-Klassenselektor interpretiert – die CSS ID der Gruppe lautet nämlich “#Ribbon.List.CustomizeList”. Da das danach folgende “ms-cui-group” jedoch eine CSS-Klasse darstellt, steht dort davor kein “\”.
      <style type="text/css">#Ribbon\.List\.CustomizeList.ms-cui-group{display:none;}</style>
    • Im Beispiel wurde die Standard Listenansicht (AllItems.aspx) angepasst, so dass sich die Änderung am Ribbon in dem Fall nur auf die bezogene Liste auswirkt.
      image
    • Nachdem die Page gespeichert und die Listenansicht im Browser einmal aktualisiert wurde, sollten sich die Änderungen bereits ausgewirkt haben. 
Kommentare sind geschlossen