2010-12-29 9 views

Antwort

3

Es kann wie folgt durchgeführt werden. Beispiel: Wenn Sie einen Inhaltstyp "Produkt" in einer Unterwebsite haben, wird der obige Code ihn finden, aber Sie können ihn nicht im Stammweb verwenden, da er auf einer niedrigeren Ebene definiert ist.

2

Versuchen Sie dieses: urWeb.AvailableContentTypes

+0

Enthält es alle verfügbaren installierten ContentTypes ausgewählt/nicht ausgewählt und verwendet/nicht verwendet? –

+1

ja ... versuchen Sie es und lassen Sie mich wissen – Grace

+0

Das Problem mit dieser Eigenschaft ist, dass es Ihnen nicht die Inhaltstypen, die auf einer niedrigeren Ebene definiert sind. Daher werden nicht alle Inhaltstypen aus einer Websitesammlung zurückgegeben. Es gibt Ihnen die Inhaltstypen, die in einem bestimmten Web und allen übergeordneten Webs definiert sind. –

4

Dieses es für alle Typen in allen SPWeb die in einer Website tun. Beachten Sie, dass dies zu Duplikaten führt.

public void ListContentTypes(string siteUrl) 
{ 
    try 
    { 
    using (SPSite site = new SPSite(siteUrl)) 
    { 
     using (SPWeb web = site.OpenWeb()) 
     { 
     ListContentTypes(web); 
     } 
    } 
    } 
    catch (Exception ex) 
    { 
    // add some proper error handling here 
    } 
} 

public void ListContentTypes(SPWeb web) 
{ 
    foreach (SPContentType ct in web.ContentTypes) 
    { 
    // do whatever you want to do with the content type here 
    } 

    foreach (SPWeb subWeb in web.Webs) 
    { 
    try 
    { 
     ListContentTypes(subWeb); 
    } 
    finally 
    { 
     if (subWeb != null) 
     { 
     subWeb.Dispose(); 
     } 
    } 
    } 
} 

alle Inhaltstypen Dies wird finden, die in der Websitesammlung vorhanden ist, aber denken Sie daran, dass nicht alle Inhaltstypen in der gesamten Websitesammlung zur Verfügung stehen werden:

public void GetContentTypes() 
    { 
     string siteUrl = "Add site url here"; 

     using (SPSite site = new SPSite(siteUrl)) 
     { 
       foreach (SPWeb web in site.AllWebs) 
       { 
        foreach (SPContentType item in web.ContentTypes) 
        { 
         Debug.WriteLine(item.Name); 
        } 
        foreach (SPList list in web.Lists) 
        { 
         foreach (SPContentType item in list.ContentTypes) 
         { 
          Debug.WriteLine(item.Name); 
         } 
        } 
        web.Dispose(); 
       } 
     } 
    } 
+0

Ich muss alle Webs schauen, nicht nur das Rootweb! –

+0

@Anna Karin, ich habe es aktualisiert, um alle Webs zu tun –

+0

Sie müssen jedes SPWeb mit site.AllWebs –

Verwandte Themen