Posts mit dem Label QuickLaunch werden angezeigt. Alle Posts anzeigen
Posts mit dem Label QuickLaunch werden angezeigt. Alle Posts anzeigen

Montag, 2. März 2009

Gruppen in Quicklaunch-Navigation eintragen

Einer der Unterschiede von programmatisch angelegten Benutzergruppen zu denen, die über die Oberfläche erzeugt wurden, ist der, dass letztere in der Quicklaunch-Navigation angezeigt werden, erstere aber nicht.

Witzigerweise stehen diese Gruppen auch nicht per Default zur Verfügung, wenn man in "All People" versucht, einen Benutzer gleich einer Gruppe hinzuzufügen.

Abhilfe schafft hier das Property "vti_associategroups" vom Rootweb, dem man semikolonsepariert die IDs der Benutzergruppen zuweisen muss:


List quickLaunchGroupIDs = new List();
...
// create a new spGroup here and add its ID to the list
quickLaunchGroupIDs.Add(spGroup.ID.ToString());

rootWeb.AllProperties["vti_associategroups"] = string.Join(";", quickLaunchGroupIDs.ToArray());

rootWeb.Update();

Freitag, 29. August 2008

Berechtigungen für Quicklaunch-Elemente in der Navigation programmatisch vergeben

In unserem aktuellen Projekt ist es u.a. eine Anforderung, dass ein Element der Quicklaunchnavigation nur für bestimmte Benutzergruppen sichtbar ist.

Über die Oberfläche ist dies mit wenigen Klicks durchführbar:



Da die Gruppen, die hier berechtigt werden sollen, allerdings erst beim Erstellen eines neuen Subwebs via FeatureReceiver angelegt werden, muss die Berechtigung des Quicklaunches ebenfalls programmatisch erfolgen:


SPNavigationNodeCollection quickLaunch = web.Navigation.QuickLaunch.Navigation.QuickLaunch;

...

// new link: "Offene Aufgaben"
sb = new StringBuilder(Settings.openTasksUrl);
SPNavigationNode openTasksNode = new SPNavigationNode(Settings.openTasksTitle, sb.ToString());
quickLaunch.AddAsFirst(openTasksNode);
openTasksNode.Update();

openTasksNode = quickLaunch[0];

// set audience only to special groups
if (openTasksNode.Properties.ContainsKey("Audience"))
{
openTasksNode.Properties.Remove("Audience");
}

openTasksNode.Properties.Add("Audience", ";;;;" + Settings.groupNameTechnicansTitle + "," + Settings.groupNameCommercialsTitle + "," + Settings.groupNameBusinessManagerTitle);
openTasksNode.Update();

Im ersten Teil wird ein neues Objekt vom Typ SPNavigationNode erzeugt und der vorhandenen SPNavigationNodeCollection quickLaunch hinzugefügt. Diese kann einfach aus dem aktuellen web gezogen werden.

Da das SDK sich leider etwas ausschweigt was mögliche Properties eines SPNavigationNode-Objektes angeht, war etwas Recherchearbeit nötig und letztenendes das Debuggen und Abfragen eines vorhandenen SPNavigationNode-Objektes (mit über die Oberfläche gesetzten Gruppenberechtigungen) im Visual Studio-Debugger. In den Properties gab es unter anderem den Key "Audience" und seinen Value ";;;;Techniker,Kaufleute,Business Manager".

Das war also das Format, indem die Gruppen dem SPNavigationNode zugewiesen sein müssen.
Das Property wird für das SPNavigationNode-Objekt also gesetzt und dieses dann noch einmal geupdated.

Wichtig hierbei ist, dass die Gruppen irgendwie eindeutig benannt sind. SharePoint sucht nicht nur im Namen einer Gruppe sondern auch in deren Beschreibung. Gibt es mehrere Gruppen in denen z.B. in der Beschreibung "Kaufleute" auftaucht (z.B. "Benutzergruppe Kaufleute" und "Benutzergruppe Logistik Kaufleute"), kann SharePoint dies nicht mehr eindeutig zuordnen und im Zielgruppen-Editor wird derjenige Gruppeneintrag unterkringelt.

Freitag, 4. Juli 2008

Navigationselemente (QuickLaunch etc.) über die onet.xml bearbeiten

In unserem aktuellen Projekt sollen in einer SiteCollection sehr viele Subwebsites angelegt werden können. Nun erscheinen diese alle als Link im Quicklaunchmenü im Rootweb. Nach einiger vergeblicher Recherche im SDK bin ich auf dieses Blogpost gestossen: *click*

Genau das hatte ich gesucht! Meiner Meinung nach konnte es nicht angehen, dass Einstellungen an der Navigation, die über die Oberfläche vorgenommen werden können, nur über programmatische Lösung via ObjektModell realisiert werden können, wie mir das in div. SharePoint-Büchern vorgeschlagen wird und dieser Blogpost beschreibt genau die Parameter, die es gibt um über die onet.xml die Navigation zu manipulieren.

Um jetzt also zu verhindern, dass Subwebsites im Quicklaunch angezeigt werden, muss folgender XML-Code im -Block der onet.xml für das Rootweb eingetragen werden:


<Feature ID="541F5F57-C847-4e16-B59A-B31E90E6F9EA">
<properties xmlns="http://schemas.microsoft.com/sharepoint/">
<property key="InheritGlobalNavigation" value="false">
<property key="ShowSiblings" value="false">
<property key="IncludeSubSites" value="false">
</properties>
</Feature>


IncludeSubSites : (false/true) Hiermit wird de/aktiviert, ob Subwebsites im Quicklaunch des Rootwebs angezeigt werden sollen.
InheritGlobalNavigation: (false/true) De/aktiviert, ob die Navigation des Rootwebs auf die Subwebsite vererbt werden soll.
ShowSiblings: (false/true) Was man jetzt genau hier de/aktivieren kann, habe ich noch nicht so direkt herausgefunden. Ich nehme an, dass es sich hierbei um Websites auf der gleichen Ebene handelt, die über einen Navigationslink erreichbar sind. Wer hierzu etwas sagen kann, möge das bitte als Kommentar schreiben :-)