2010-12-29 3 views

Répondre

3

Il peut être fait comme ceci:

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(); 
     } 
    } 
    } 
} 

Cela trouver tous les types de contenu qui existent dans la collection de sites, mais rappelez-vous que tous les types de contenu seront disponibles dans la collection de sites. Par exemple: si vous avez un type de contenu 'Produit' qui existe dans un sous-site, le code ci-dessus le trouvera mais vous ne pourrez pas l'utiliser dans le web racine car il est défini à un niveau inférieur.

2

Essayez celui-ci: urWeb.AvailableContentTypes

+0

Inclut-il tous les ContentTypes installés disponibles/non sélectionnés et utilisés/non utilisés? –

+1

oui ... essayez-le et faites le moi savoir – Grace

+0

Le problème avec cette propriété est qu'elle ne vous donnera pas les types de contenu définis à un niveau inférieur. Il ne renvoie donc pas tous les types de contenu d'une collection de sites. Il vous donne les types de contenu définis dans un site Web spécifique et tous ses sites Web parents. –

4

Celui-ci va le faire pour tous les types de tous est dans un site de SPWeb. Notez que cela produira des doublons.

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

Je dois regarder tous les sites, pas seulement le rootweb! –

+0

@Anna Karin, je l'ai mis à jour pour faire tous les sites Web –

+0

Vous devez disposer de chaque SPWeb obtenu avec site.AllWebs –

Questions connexes