2016-03-29 5 views
0

Ich versuche, alle Bahnen und Sub-Webs dieser Bahnen unter einem Web zu durchlaufen. Wie durch alle Webs und Sub-Webs eines SharePoint-Web durchlaufen

My Parent web

http://EXAMPLE.com/parentweb (Dies ist eine Teilstelle kein Stammwebs)

Teilbahnen http://example.com/parentweb/subweb (Dies ist eines der Unterbahn, die nicht die Unterbahnen haben können oder nicht)

Das einzige, was ich ausprobiert habe, ist die Websitesammlung und die Schleife durch alle Webs, die viel länger ist, weil ich die einzige Unterseite kenne, die überprüft werden muss. Meine Websitesammlung verfügt über mehrere Unterwebsites. Ich möchte nicht alle Subs-Sites durchlaufen.

Dieser Code funktioniert, aber es dauert so viel Zeit und es eine Schleife durch alle Unterseiten, die müssen nicht überprüft werden

 using(SPSite site = new SPSite(“http://myserver/mysitecol”) 
      { 
       foreach(SPWeb web in site.AllWebs) 
       { 
       } 
      } 

Antwort

2

Sie die .Webs Eigenschaft eines SPWeb-Objekt verwenden, kann seine direkt zugreifen Kinderunterseiten.

using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    using(SPWeb parentweb = site.OpenWeb("subweb/subweb") 
    { 
     foreach(SPWeb web in parentweb.Webs) 
     { 

     } 
    } 
} 

Für den Zugriff auf all (einschließlich indirekten) Nachkommen Kind Websites unter einem Web, das Sie in jedem direkten Nachkommen rekursiv, dass .Webs Eigenschaft zugreifen konnten, aber es wäre einfacher mit der .AllWebs Eigenschaft der SPSite zu starten Websitesammlungsobjekt.

Die .WebsInfo Eigenschaft der SPWebCollection zurückgegeben von .AllWebs gibt Ihnen eine List<> von leichten SPWebInfo Objekte. Sie können diese leichtgewichtige Sammlung verwenden, um eine gefilterte Liste der von Ihnen betrachteten Webs zu erhalten, ohne die anderen SPWebs in der Sammlung instanziieren und entsorgen zu müssen.

string webUrl = "/mysitecol/subweb/subweb"; 
using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    List<SPWebInfo> websInfo = site.AllWebs.WebsInfo.FindAll(
     delegate(WebsInfo webInfo) 
     { 
      // filter to get us only the webs that start with our desired URL 
      return webInfo.ServerRelativeUrl.StartsWith(webUrl); 
     } 
    ); 
    foreach(SPWebInfo webInfo in websInfo) 
    { 
     using(SPWeb web = site.OpenWeb(webInfo.Id)) 
     { 

     } 
    } 
} 
+0

es wird den unmittelbaren Bahnen geben nicht nur die Unterbahnen der unmittelbaren Kinder Bahnen – user388969

+0

Gotcha. Nun, Sie könnten rekursiv auf die '.Webs'-Eigenschaft jedes untergeordneten Webs zugreifen, während Sie durchschleifen, aber ich vermute, dass es schneller ist, die' AllWebs.WebsInfo'-Eigenschaft auf dem 'SPSite'-Objekt zu verwenden. Ich werde meine Antwort aktualisieren. – Thriggle