SharePoint SubSite Diagram

Als SharePoint Entwickler übernehme ich teilweise auch den Support von SharePoint Plattformen. Um schnell einen Überblick zu bekommen, habe ich mir ein kleines Tool geschrieben, welches mir alle SubSites der Farm, sowie deren Listen, auflistet.

Das ist auch sehr praktisch um eine rekursive suche  über SharePoint zu machen. Die Software die ich dazu geschrieben habe, füllt die Informationen in ein Treeview Steuerelement.

Einleitung

Das Script  kann man von jedem Client starten, sofern er  Zugriff auf SharePoint besitzt. Von Vorteil sind Administratoren Rechte. Auf dem Client muss das .Net Framework 3.5 installiert sein.

LoadSharePointDiagram

Die Funktion “LoadSharePointDiagram” braucht die SharePoint Url als Parameter. Mit dieser wird erst einmal der Clientcontext erstellt und das Root Web Object “geladen” bzw. es wird ein Query dafür erstellt. Die Ausführung des Query kommt erst in der nächsten Methode.

/// <summary> void LoadSharePointDiagram(string sharepointurl) { TreeNode rootnode = this.tvSharePointSubSites.Nodes.Add(sharepointurl); rootnode.ImageIndex = 0; clientctx = new SP.ClientContext(sharepointurl); SP.Web web = clientctx.Web; ListSubWebs(web, rootnode); }

ListSubWebs

Die ListSubWebs Methode führt nun das vorher definierte Query aus  und fügt das SubWeb dem Treeview Control hinzu. Diese Methode wird nun, über eine Iteration durch alle SubWebs, rekursiv ausgeführt. Somit wird jedes SubWeb des vorherigen SubWebs aufgelistet.

Falls die Checkbox “cbLoadListst” aktiviert ist, wird pro SubWeb die Methode “GetLists” angestossen.

/// <summary> void ListSubWebs(SP.Web web, TreeNode parentnode) { clientctx.Load(web); clientctx.Load(web.Webs); clientctx.ExecuteQuery(); TreeNode currentNode = parentnode.Nodes.Add(web.Title); currentNode.ImageIndex = 1; currentNode.Tag = web; foreach (SP.Web subweb in web.Webs) { ListSubWebs(subweb, currentNode); } if (cbLoadLists.Checked) { GetLists(web, currentNode); } }

GetLists

GetLists führt ein weiteres Query aus um die Listen des SubWebs zu laden und iteriert danach durch diese.

/// <summary> void GetLists(SP.Web web, TreeNode parentnode) { clientctx.Load(web.Lists); clientctx.ExecuteQuery(); foreach (SP.List lst in web.Lists) { TreeNode listnode = parentnode.Nodes.Add(lst.Title); listnode.ImageIndex = 2; } }

Erweiterungen

Dieses Script ist aber nicht nur für einen Überblick gut, sondern auch um z.B. eine Liste zu finden, von der man nur die GUID kennt. Hier ein kleines Beispiel dazu:

Dieser Code habe ich in die “GetLists” Methode, in die Iteration, geschrieben. Zuerst lese ich die GUID Id aus dem momentan listen Objekt heraus und lese meine Id ebenfalls in einen String ein. Danach mache ich eine einfache If Abfrage und schon haben wir unser Element.

 string listguid = lst.Id.ToString(); string guidimlookingfor = "818CCD1F-9143-4DCB-8068-B8E66C1DE3FC".ToLower(); if (listguid == guidimlookingfor) { Console.WriteLine("match!"); } 

Abschluss

Ich entschuldige mich hiermit noch für die unschöne Logic und GUI Code Mischung und hoffe, dass der Quellcode trotzdem verstanden wird.

Vielen dank noch an Mark James für die Silk Icons, von denen ich mich bedient habe (CC).

Download

Quellcode

Binary