2009-07-24 6 views
1

J'ai une définition de liste personnalisée (schema.xml) J'ai configuré des colonnes de site (via une fonctionnalité) et de nombreux types de contenu via une fonction, tout cela fonctionne bien. J'ai une définition de liste (schema.xml) et j'ai mis les types de contenu en haut dans l'ordre dans lequel je veux qu'ils apparaissent (en supposant que le type de contenu par défaut sera la valeur par défaut - ce que je veux)Type de contenu par défaut et type de contenu à l'aide de dossiers dans une liste Sharepoint

NOTE: J'ai mis

EnableContentTypes="true" 

voici un extrait de mon schema.xml

<ContentTypes> 
    <!-- Folder based content type --> 
    <ContentTypeRef ID="0x0120006ad66a4924644ac98d371a0e069c5d99" /> 
    <!-- Item Based Content Type --> 
    <ContentTypeRef ID="0x0100a18ddd58b9384567bc776a3c5889ea77" /> 
    <!-- ..... more content types ... --> 
</ContentTypes> 

le problème que j'ai est que quand une liste est provisionné le type de contenu en fonction du dossier est toujours deuxième dans la liste, et par conséquent n'est jamais le défaut dans la liste, le seul moyen ic un make it par défaut est de supprimer toutes les autres déclarations de type de contenu qui trient en quelque sorte l'objet d'avoir plusieurs types de contenu. Est-ce un ordre en raison de la façon dont la liste est provisionnée ou est-ce que je manque quelque chose caché profondément dans le SDK, toute aide acceptée avec reconnaissance

Répondre

1

En utilisant un FeatureReceiver vous pouvez définir les listes RootFolder.UniqueContentTypeOrder à une liste ordonnée de ContentTypes qui sera puis déterminez l'ordre des boutons.

Vous pouvez également ignorer ContentTypes que vous ne souhaitez pas être disponible même s'ils sont définis dans la liste. Il est commun de combiner ceci avec un récepteur d'événement qui définit l'ordre des boutons (UniqueContentTypeOrder) des dossiers ajoutés, pour guider les gens dans une certaine structure comme les dossiers au niveau supérieur et sans dossiers imbriqués (ou seulement x niveaux profonds) ou ce que vous aimez .

+0

Merci, je pense que j'ai probablement passé trop de temps à me battre contre cela à partir d'une position purement déclarative. Je suis conscient de comment je peux faire fonctionner autrement mais une partie de moi veut vraiment comprendre pourquoi les types de contenu sont ordinaux sauf si l'un d'entre eux est basé sur le type de contenu du dossier, et aussi pourquoi il apparaît toujours deuxième dans la liste. d'autres types de contenu apparaissent après lui – Matt

+0

+1 pour le conseil sonore, espérant toujours un aperçu de comment cela est fait de manière déclarative – Matt

+0

ok, im marquant comme réponse, une fouille dans les assemblages montre qu'une grande partie de ce travail est soit en code obfusqué ou dans les appels SPrequest à owssvr.dll le résultat est que l'ordre, pour autant que je peux voir, n'est pas affecté par quelque chose de déclaratif. – Matt

1

Vérifiez le sac de propriétés. La liste sur laquelle vous travaillez a probablement une propriété appelée "vti_contenttypeorder", avec les identifiants de type de contenu dans l'ordre dans lequel ils apparaîtront lorsque vous les réorganiserez via l'interface utilisateur.

0

... sur @Renan answer - définissez votre type de contenu par défaut de manière déclarative. Créez un module, nommez-le et ajoutez-le à la fonction de périmètre Web contenant votre instance de liste. Le fichier Elements.xml devrait contenir les éléments suivants:

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <PropertyBag Url="<!--URL of your list instance here-->" ParentType="Folder" RootWebOnly="FALSE" AlwaysCreateFolder="TRUE" xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Property Name="vti_contenttypeorder" Value="<!--Your custom Content Type ID here-->" Type="string" /> 
    </PropertyBag> 
</Elements> 
Questions connexes