Zur Zeit wird gefiltert nach: navigation
Filter zurücksetzen
SharePoint: Wie versteckt man einzelne Views im View Selector?
Eine interessante Herausforderung wurde kürzlich an uns herangetragen: Ein Kunde von uns hat eine SharePoint-Liste mit unterschiedlichen Ansichten erstellt. Die Toolbar soll in jeder Ansicht komplett zur Verfügung stehen, damit jeder Nutzer auch zwischen den einzelnen Ansichten über den View Selector (rechts oben) navigieren kann.

- Abbildung 1: View Selector (Standard)
Nun soll es aber auch Ansichten geben, die nur für Administratoren zu sehen sein sollen. Dafür muss das Auswahlmenü des View Selectors reduziert werden (in unserem Beispiel soll die Ansicht "Testview2" nur für Administratoren angezeigt werden). Dies ist mit Bordmitteln so nicht konfigurierbar.
Folgenden pragmatischen Lösungsweg haben wir vor- und eingeschlagen: Context-Menüs in SharePoint werden über JavaScript angesteuert. Daher kann man sie auch mittels JavaScript anpassen.
Um das zu erreichen ist zunächst auf der SharePoint-Seite, auf der sich das Listen-WebPart befindet, ein Content Editor-WebPart unter(!) der Liste einzufügen. Anschließend editiert man dieses WebPart und fügt den untenstehenden Code in der Source Code-Ansicht (Knopf "Edit Source ...") ein.
Um die gewünschten Ansichten ausblenden zu können ist der eingefügte Code noch etwas zu konkretisieren. Der Code enthält zum Beispiel eine Variable "menuItemNames", die einen Array von Werten umfasst. Am Ende sind im angegebenen Codebeispiel die Werte "aaa","explorer view","testview1","testview2","testview3" ergänzt. An diese Stelle müssen alle Ansichten in der Reihenfolge, in der sie im DropDown-Menü des View Selectors angezeigt werden, eingetragen werden.
Weiterhin enthält der Code eine Variable "menuItems". An deren Ende befinden sich die Einträge "View1" (korreliert mit dem Eintrag "aaa") bis "View5" (korreliert mit dem Eintrag "testview3"). Hier sind gemäß der Anzahl der vorhandenen Ansichten die entsprechenden Werte zu entfernen oder hinzuzufügen. Dabei wird der Nummer entsprechend hochgezählt (bei 5 Einträgen (ohne Default View) also View1 bis View5; bei 7 Einträgen bis View7).
Abschließend muss der Methodenaufruf ganz zu Beginn des Codes angepasst werden. Mittels hideListViewToolbarItems ("[View Name 1]", "[View Name 2]") bestimmt man, welche Einträge nicht mehr angezeigt werden sollen. Im angegebenen Code-Beispiel wird die Ansicht "Testview2" ausgeblendet. Es lassen sich auf diese Art und Weise beliebig viele Ansichten ausblenden.

- Abbildung 2: View Selector (nach der Anpassung)
Wenn der Code gespeichert und alles richtig eingestellt wurde, sind die gewünschten Einträge aus dem View Selector-Menü verschwunden.
Dieser pragmatische Ansatz hat Grenzen: Man sollte beachten, dass auf allen SharePoint-Seiten, auf denen die Liste angezeigt und bei denen die Auswahl an Ansichten reduziert sein soll, ein entsprechendes Content Editor-WebPart mit dem angepassten Code erstellt werden muss. Weiterhin eignet sich dieser Code nur für statische Ansichten. Sobald Nutzer in der Lage sind neue Ansichten (sowohl öffentliche als auch persönliche) zu erstellen, wird der Code so nicht mehr funktionieren. Gleiches gilt wenn die Default View gewechselt wird.
Bei komplexeren Anforderungen setzen wir dynamischere Lösungen für das Ausblenden von Ansichten ein, die jedoch den Rahmen dieses Blogs sprengen würden.
CODE:
<script type="text/javascript" langugage="javascript">
hideListViewToolbarItems("Testview2");
function hideListViewToolbarItems()
{
/// <summary>
/// </summary>
var menuItem;
var menuItemName;
var menuItemIndex=-1;
var menuItemNames=new Array("edit in datasheet",
"open with windows explorer",
"connect to outlook",'export to spreadsheet','view rss feed','alert me'
,"create column","settings:create view","list settings",
"document library settings","all documents",
"all items","modify this view",
"view:create view","new document",
"new item","new folder","upload document",
"upload multiple documents","aaa","explorer view","testview1","testview2","testview3");
var menuItems = new Array("EditInGridButton",
"OpenInExplorer","OfflineButton",
"ExportToSpreadsheet","ViewRSS",
"SubscribeButton","AddColumn",
"AddView","ListSettings","ListSettings","DefaultView",
"DefaultView","ModifyView","CreateView",
"New0","New0",
"NewFolder","Upload","MultipleUpload","View1",
"View2","View3","View4","View5");
var allMenuItems = document.getElementsByTagName('ie:menuitem');
for(var i = 0; i < hideListViewToolbarItems.arguments.length; i++ )
{
menuItemName= hideListViewToolbarItems.arguments[i].toLowerCase();
for (j=0; j < menuItemNames.length; j++)
{
if(menuItemNames[j]==menuItemName)
{
menuItemIndex = j;
break;
}
}
menuItem=menuItems[menuItemIndex];
for (var l = 0; l < allMenuItems.length; l++)
{
if(menuItemName.indexOf(":")!=-1)
{
menuItemName = menuItemName.split(":")[1];
}
if (allMenuItems[l].id.indexOf(menuItem)!=-1
&& allMenuItems[l].text.toLowerCase() == menuItemName)
{
// For FireFox Compatibility
var parentNodeOfMenuItem = allMenuItems[l].parentNode;
parentNodeOfMenuItem.removeChild(allMenuItems[l]);
break;
}
}
}
}
</script>
Der Code stammt ursprünglich von dieser Seite: www.codeproject.com
P.S.: Auf Basis dieses Codes ist es auch möglich die Einträge unter "Actions" und "Settings" in der Toolbar zu verstecken.
Globale und einheitliche Navigation in SharePoint
In SharePoint (hier Version 2007) wird die Navigation innerhalb einer Site Collection definiert. In einem Umfeld mit mehreren Site Collections hat das folgende Nachteile:
- Die Navigation ist inkonsistent (die aktuelle Site Collection wird zum Beispiel immer an erster Stelle angezeigt)
- Der Administrationsaufwand erhöht sich pro zusätzlicher Site Collection
- Der Aufwand um die Navigation über alle Site Collections einheitlich zu pflegen ist immens
Eine schlanke Lösung für diese Problematik besteht in der Ausnutzung des Delegate-Prinzips: Hierbei wird das Objekt, welches die Navigationsdaten liefert, dynamisch überschrieben. Eine Lösung besteht aus den folgenden Bestandteilen:
- Ein Feature auf Web Application-Ebene, welches einen neuen Navigation Provider registriert: Dieser verwendet als Basis für die Navigationsstruktur eine xml-Datei
- Ein Feature auf Web-Ebene, welches für das dynamische Überschreiben des Navigations-Objekts sorgt
Vorteile einer solchen Lösung:
- Die einheitliche Navigation muss nur noch an einer zentralen Stelle (in der xml-Datei) gepflegt werden
- Anpassungen an Masterpages, Themes etc. sind nicht notwendig
- Per Aktivierung/Deaktivierung des Web-Features kann jederzeit von der alten auf die neue Lösung umgeschaltet werden
- Die Lösung kann sowohl im Umfeld WSS 3.0/SharePoint Server 2007, als auch im Umfeld SharePoint Foundation/SharePoint 2010 angewendet werden


