2010-03-25 7 views
0

Dans MOSS2007, j'ai besoin de trouver et supprimer par exemple le type de contenu par défaut d'une liste (afin d'être remplacé par un personnalisé). La liste peut être sur plusieurs sites, les sites peuvent être en plusieurs langues et le nom de ce type de contenu peut être différent (ex: "Wiki Page" en EN, "Wikipagina" en NL etc.) Mon idée était de trouver le contenu tapez en utilisant l'Id ou le préfixe de Id (par exemple: la page wiki commence toujours par 0x010108). Y a-t-il une meilleure idée? Pouvons-nous entrer dans le code le nom des types de contenu en fonction de la langue?Obtenir le type de contenu dans le site localisé

private static SPContentType GetWikiPageContentTypeFromList(SPList list) 
    { 
     string wikiPageStartId = "0x010108"; 
     foreach (SPContentType contentType in list.ContentTypes) 
     { 
      string ctId = contentType.Id.ToString(); 
      if (ctId.StartsWith(wikiPageStartId)) 
      { 
       return contentType; 
      } 
     } 
     return null; 
    } 

Répondre

3

Vous pouvez utiliser SPBuiltInContentTypeId classe pour obtenir construit dans id type de contenu de. Alors pourquoi utiliser des noms si vous pouvez utiliser des identifiants, ce qui est beaucoup mieux?

cordes

localisées

Ofcourse, vous pouvez également utiliser des noms, mais vous devez utiliser SPUtility.GetLocalizedString. Examinez C: \ Program Files \ Fichiers communs \ microsoft partagé \ extensions serveur Web \ 12 \ Resources \ core.resx pour voir quels noms de ressources ont quelles valeurs.

string strWikiDocumentTitle = SPUtility.GetLocalizedString("$Resources:WikiDocument", "core", SPContext.Current.Web.Language); 

Type de contenu id et hiérarchie

Parlant ids, les types de contenu ont their own hierarchy et vous avez raison que les types de contenu tels que wiki et tous les types de contenu dérivés du wiki va commencer par 0x010108.

De toute façon, vous êtes sur la bonne voie.

//Returns best match, that is the content type that is Wiki document. If wiki document content type not in list, will return it's parent content type id. 
SPContentTypeId bestMatch = list.ContentTypes.BestMatch(SPBuiltInContentTypeId.WikiDocument); 
if (bestMatch.IsChildOf(SPBuiltInContentTypeId.WikiDocument)) 
{ 
    return list.ContentTypes[bestMatch]; 
} 

Une prise à propos de la liste Type de

Par ailleurs, le type de contenu du contenu qui est récupérerez pas exactement ID 0x010108, mais plutôt 0x010108xxxxxxxxxxxxxxxxx .... (il sera CHILD si le type de contenu wiki) , car lorsque vous ajoutez un type de contenu à la liste, il crée en réalité un nouveau type de contenu dérivé de son parent.

Vous pouvez donc supprimer ce type de contenu en toute sécurité si vous le souhaitez. Et si vous souhaitez modifier ce type de contenu, utilisez PARENT (propriété SPContentType.Parent) du type de contenu retourné pour modifier et appliquer les modifications à tous les types de contenu hérités ...

Questions connexes