Freitag, 29. August 2008

Toolbar in WebPart programmatisch ausblenden

Hier wieder ein schönes Beispiel, was für Potential für Zeitverschwendung in SharePoint steckt:
Über die Oberfläche ist es relativ simpel, die Toolbar in einem Webpart zu verstecken, wie der folgende Screenshot zeigt.



Einfach auf "Freigegebenes Webpart bearbeiten" klicken und bei Symbolleistentyp "Keine Symbolleite" auswählen. Abspeichern und Fertig.

Das ganze jetzt programmatisch in die Solution mit hineinzunehmen sollte doch wohl kein Aufwand sein. Ist es auch nicht... - wenn man weiß, wo man hinfassen muss.

Und das herauszufinden kostet Zeit.
Denn das SDK und selbst die MSDN sind da leider unvollständig. Erst ein Kommentar aus der Community brachte Licht ins Dunkel: *click*

Um also in einem Webpart - in meinem konkreten Fall das ListView-Webpart auf eine Aufgabenliste mit Gantt-View - die Symbolleiste auszublenden bedarf es folgender Anpassungen:


in der schema.xml der Liste

<views>
.....
<View Type="GANTT" DisplayName="Gantt" Url=&quotGantt.aspx" Level="1" BaseViewID="13" ContentTypeID="0x" ImageUrl="/_layouts/images/generic.png" WebPartZoneID="Main">
<Toolbar Type="None"></Toolbar>
.....
</View>
.....
</views>

in der onet.xml

<modules>
<module name="DefaultConfig" url="Lists/WebsitesList" list="101">
<file url="BlankPortalPage.aspx" name="Kalender.aspx" type="GhostableInLibrary">

<view list="Lists/TaskList" name="Gantt" displayname="Gantt" type="GANTT" baseviewid="13" webpartzoneid="Top" webpartorder="2">
<!--[CDATA[ <webpart xmlns="http://schemas.microsoft.com/WebPart/v2" iwp="http://schemas.microsoft.com/WebPart/v2/ListView"> <assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</assembly> <typename>Microsoft.SharePoint.WebPartPages.ListViewWebPart</typename> <frametype>None</frametype> <title>Kalender</title> </webpart> ]]-->
</view>
</file>

</module>

</modules>


Dadurch werden sowohl im View als auch im WebPart die Symbolleisten nicht mehr angezeigt. Der Nachteil daran ist, dass über die Oberfläche die Toolbar aber nicht mehr manuell wiederangezeigt werden kann.

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.

DCOM-Fehler im Windows Eventlog und wie man sie wegbekommt

Seit kurzem benutze ich ein anderes Image, welches aber von jemand anderem aufgesetzt wurde, in meinem Hyper-V, da es das 64-Bit-Image irgendwie zerstört hat. Macht aber nichts, da es sowieso ein Graus war, darauf zu arbeiten.

Scheinbar wurde da beim Einrichten von SharePoint irgendeine Einstellung vergessen oder übersehen denn ich konnte mit meinem Benutzer zwar SiteCollections anlegen aber dann keine Subwebs - im Eventlog erschien dann u.a. folgende Fehlermeldung:



Anscheinend fehlen den Benutzern spbdeveloper, spwepappdeveloper und spfarmwa Berechtigungen auf eine Applikation zuzugreifen. Eine Suche nach der CLSID {61738644-F196-11D0-9953-00C04FD919C1} brachte mich auf diese Website, die den entscheidenden Hinweis lieferte: *click*

Für den Komponentendienst IIS WAMREG admin Service müssen die drei SharePoint-Benutzer lokale Zugriffsrechte haben, der folgende Screenshot zeigt den Klickweg dazu:



Der Komponentendienst in der Systemsteuerung unter Verwaltung -> Komponentendienste zu finden.

Wurden die Berechtigungen gesetzt, muss der IIS neugestartet werden.

Dienstag, 26. August 2008

...wie sich manche Meinungen gleichen...

Vgl: Consultants Digest

…ich habe mir gerade einmal Twitter Stream Graphs zu verschiedenen BI Schlagworten angeschaut. Ist schon interessant, wie sich einige Dinge gleichen (siehe Text am unteren Ende der Bilder). Die Art der Visualisierung finde ich nebenbei bemerkt auch sehr gelungen.

Erster Versuch - PerformancePoint

Performance Point

Performance Point

Zweiter Versuch - SharePoint

SharePoint

SharePoint

Dritter Versuch - SSrS (SQL Server Reporting Services)

SQL Server Reporting Services

SQL Server Reporting Services