2009-01-28 9 views
2

Je suis à la recherche d'un moyen d'obtenir par programmation les catégories définies dans le répertoire du site d'un portail. Autant que j'ai pu voir les catégories sont représentées comme des champs du type "choix" avec des valeurs multiples, l'utilisateur peut choisir le formulaire.SharePoint: Obtenir les catégories du répertoire du site par programmation

Mon problème est, comment pourrais-je distinguer les champs de catégorie des champs normaux comme "titre" ou "auteur". En fait, je ne veux pas coder les noms de catégories mais je veux les charger dynamiquement. Je pense qu'il doit y avoir certains critères car le composant WebPart standard sur la page du répertoire du site charge également les catégories dynamiquement.

Malheureusement, je ne pouvais pas trouver beaucoup d'informations sur ce problème.

Bye Flo

Répondre

1

Ok, je vois, je me suis exprimé pas clairement. Je sais comment obtenir le champ de formulaire de schéma de champ. Mais je pense qu'après votre post j'ai eu la réponse à ma question moi-même. Ce que je voulais savoir, c'est que je pouvais supposer que chaque champ du type "choix" dans la liste "sites" du répertoire du site représente une catégorie à laquelle un site pourrait être assigné? Donc chaque champ de catégorie doit être du type "choix"?

Pour obtenir toutes les catégories disponibles, je dois parcourir les champs de la liste et rechercher les champs en fonction du type "choix", non?

MISE À JOUR

En attendant, je pense avoir trouvé une réponse à ma question. Une colonne de la liste des sites Web est traitée comme une catégorie du répertoire du site Web si elle fait partie de la vue "catégories". En général, les colonnes de catégorie ne doivent pas forcément être du type 'choice', bien que d'autres types n'aient pas de sens dans ce contexte.

+0

Ah, je vous comprends. Je pense que c'est la seule façon d'y aller car ils ne sont pas stockés ailleurs. – Nat

+0

Les champs de type "Choise" n'existent pas dans SharePoint, sauf si vous les avez créés vous-même. C'est "Choice" ;-) Et pourquoi le code désordonné avec tout ce parsing XML? Il y a une classe sympa appelée SPFieldChoice. Il suffit de convertir le SPField en SPFieldChoice et d'énumérer la propriété Choices. – LeonZandman

1

Obtenez une référence à SPWeb. Utilisez SharePoint Manager (pas strictement nécessaire, mais l'application est utile) pour obtenir les détails du champ que vous voulez.

Ce code peut obtenir la liste à partir des champs xmlSchema. Note: le xml commenté est l'apparence de SchemaXml de mon propre champ Catégorie.

public static ArrayList GetCategory(SPWeb web) 
{ 
    ArrayList result = new ArrayList(); 

    /*   <?xml version="1.0" encoding="utf-16"?> 
    <Field ID="{6DF9BD52-550E-4a30-BC31-A4366832A87D}" Type="Choice" Group="_Hidden" Name="Category" DisplayName="Category" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Category"> 
     <CHOICES> 
     <CHOICE>(1) Category1</CHOICE> 
     <CHOICE>(2) Category2</CHOICE> 
     <CHOICE>(3) Category3</CHOICE> 
     </CHOICES> 
     <Default>(2) Category2</Default> 
    </Field>*/ 
    try 
    { 
     SPField catField = web.Fields[new Guid("6DF9BD52-550E-4a30-BC31-A4366832A87D")]; 
     XmlDocument Doc = new XmlDocument(); 
     Doc.LoadXml(catField.SchemaXml); 
     XmlNodeList Choices = Doc.SelectNodes("Field/CHOICES/CHOICE"); 
     foreach (XmlNode Choice in Choices) 
     { 
      result.Add(Choice.InnerText); 
     } 
    } 
    catch (Exception ex) 
    { 
     result.Add("Failed: " + ex.Message); 
    } 
    return result; 
} 
Questions connexes