Partager via


Bloc de construction : Colonnes et types de champs

Dernière modification : jeudi 8 juillet 2010

S’applique à : SharePoint Foundation 2010

Dans cet article
Modèle objet pour les colonnes et les types de champs
Code XML utilisé pour les colonnes et les types de champs
Domaines relatifs aux colonnes et au développement de types de champs
Plus d’informations sur les colonnes et le développement de types de champs

Cette rubrique fournit une vue d’ensemble des types de colonnes et de champs en tant que blocs de construction de développement dans Microsoft SharePoint Foundation.

ConseilConseil

Le terme « champ » a deux significations assez proches quant au développement avec SharePoint Foundation. Il se réfère parfois à une colonne dans une liste, mais lorsqu’on parle d’un seul élément de liste, le terme « champ » a une signification similaire à celle de « cellule », qui correspond à l’intersection d’une colonne et d’une ligne d’une table. En partie pour cette raison, les termes « colonne » et « champ » sont virtuellement synonymes dans le contexte du développement SharePoint Foundation. Par exemple, un objet qui représente une colonne est un objet de la classe SPField ou d’une classe qui en est dérivée.

Dans SharePoint Foundation, non seulement les colonnes contiennent des données d’un type particulier, mais elles sont elles-mêmes une sorte de type car la même colonne peut être utilisée sur plusieurs listes avec des données différentes. Une colonne peut être conservée de façon persistante dans une galerie de colonnes de site. Une colonne de site de la galerie peut être ajoutée à n’importe quelle liste du site, par programmation ou via l’interface utilisateur. Une colonne peut aussi être ajoutée à un type de contenu, par programme ou via l’interface utilisateur, par exemple par un concepteur de type de contenu.

Certaines colonnes de site sont intégrées dans SharePoint Foundation : Adresse, Anniversaire, Nom de l’assistant(e) et URL. Chaque colonne appartient à l’un ou l’autre d’un petit ensemble de sortes de types, souvent appelés « types de champs ». Par exemple, les types des champs Adresse, Anniversaire, Nom de l’assistant(e) et URL sont respectivement Texte multiligne, Date et heure, Une seule ligne de texte et Lien hypertexte. La liste complète des types de champs est spécifiée par les valeurs de l’énumération SPFieldType. Voici quelques-unes des valeurs les plus importantes :

  • Booléen - Un champ qui accepte seulement comme valeurs true (vrai) ou faux.

  • Calculé - Un champ dont la valeur est calculée au moment de l’exécution, à partir d’une formule mathématique.

  • Choix – Un champ qui ne peut avoir qu’une seule valeur et cette valeur doit faire partie d’une liste énumérée finie de valeurs. Il existe également un type de champ Choix multiples qui autorise plusieurs valeurs provenant de la liste.

  • Calculé - Un champ dont la valeur dépend de la valeur d’un autre champ du même élément de liste. Il s’agit généralement de la valeur d’une opération logique effectuée sur un ou plusieurs autres champs.

  • Recherche - Un champ qui est similaire à un champ Choix, mais la liste des valeurs possibles provient d’une colonne d’une autre liste.

  • Texte - Un champ qui accepte une seule ligne de texte. Il existe aussi un type Texte multiligne.

Voici quelques-unes des opérations les plus intéressantes que vous pouvez effectuer avec des champs, par programmation ou avec du marquage XML :

  • Lire et écrire la valeur d’un champ particulier dans un élément de liste particulier.

  • Ajouter et supprimer des colonnes dans des listes.

  • Ajouter et supprimer des colonnes dans des galeries de colonnes de liste.

  • Changer la façon dont les champs s’affichent sur les formulaires Nouvel élément de liste, Modifier l’élément de liste et Afficher l’élément de liste.

  • Changer la façon dont les colonnes s’affichent en mode Liste.

  • Créer un type de champ personnalisé.

  • Créer un ou plusieurs contrôles de rendu personnalisés pour afficher le champ de différents types de pages et de formulaires.

  • Créer un ou plusieurs contrôles de rendu pour mobile pour afficher le champ sur des appareils mobiles.

  • Exclure des colonnes non souhaitées des résultats d’une requête.

  • Effectuer une jointure de deux tables dans une requête lorsqu’une table a une colonne Recherche qui effectue une recherche dans l’autre table.

Modèle objet pour les colonnes et les types de champs

Notes

Cette rubrique se réfère explicitement à des classes du modèle objet serveur de SharePoint Foundation. Le modèle objet client a des classes parallèles pour la plupart de ces classes serveur. Une règle générale, mais pas universelle, est que lorsque le nom de la classe serveur commence par « SP », la classe objet parallèle a le même nom mais sans le préfixe « SP ».

Indexeurs SPListItem

Une des tâches de codage les plus courantes dans le développement SharePoint Foundation est de lire et d’écrire dans un champ d’un élément de liste. Pour faire cela, obtenez une référence à l’objet SPListItem qui représente l’élément de liste puis utilisez un de ses indexeurs (Item) pour référencer un champ particulier. Il existe un indexeur qui accepte un objet Int32, un autre qui accepte un objet String et un troisième qui prend un objet Guid. Ce dernier peut être utilisé pour obtenir le champ par sa propriété Id. Vous pouvez passer le nom interne du champ ou son nom d’affichage avec l’indexeur String.

SPField et ses dérivés

Chaque type de champ est représenté par une classe qui dérive de SPField. Par exemple, SPFieldBoolean représente des champs de type Booléen et SPFieldChoice représente des champs de type Choix. Toute colonne spécifiée dans la galerie de colonnes de site d’un site Web est un objet de l’une de ces classes. Les propriétés de la classe différencient les différentes colonnes d’un type de champ spécifié. Par exemple, la colonne Anniversaire et la colonne Date d’échéance sont toutes deux des objets de la classe SPFieldDateTime, mais ils diffèrent entre autres quant à la valeur de la propriété Title. Parmi les membres de la classe SPField, il existe une propriété ListsFieldUsedIn() qui signale quelles listes incluent la colonne. Elle a une méthode EnforceUniqueValues qui garantit que deux cellules de la colonne n’ont pas la même valeur, ainsi que les propriétés Filterable et Sortable.

Un membre important de la classe SPField est la méthode Update(). Elle doit être appelée pour enregistrer les modifications apportées à la colonne.

ConseilConseil

Certains membres de chaque classe dérivée de SPField peuvent suggérer que leurs objets représentent un champ particulier d’un élément de liste, c’est-à-dire une entité qui, en mode Liste, correspondrait à une cellule particulière de la colonne. Par exemple, il existe une méthode GetFieldValue(String) et une méthode HasValue(Object). Il existe aussi une méthode FieldRenderingControl qui détermine comment le champ est rendu lorsqu’un élément de liste unique est rendu dans un formulaire, tel qu’un formulaire Nouveau ou Modifier. S’il peut être utile de penser à un objet dérivé de SPField de cette façon lorsque vous travaillez avec ces membres, gardez à l’esprit que l’objet n’a aucune propriété détenant la valeur d’un champ d’un élément de liste particulier, et que le fait d’appeler la méthode SPField.Update() n’enregistre pas les modifications apportées à une telle valeur. (L’objet dans la propriété FieldRenderingControl n’a pas de membre tel que celui-là, en particulier la propriété ItemFieldValue.) De façon similaire, GetFieldValue(String) n’obtient pas réellement une valeur ; elle convertit une valeur qui est lui passée en tant que paramètre. De plus, HasValue(Object) indique simplement si un objet qui lui est passé a la valeur null. Bien sûr, l’intention est que la valeur passée à l’une ou l’autre méthode soit la valeur du champ dans un élément de liste particulier, mais c’est la responsabilité du programmeur d’utiliser les méthodes de cette façon. Le principal moyen de lire et d’écrire les données d’un champ particulier dans un élément de liste particulier est d’utiliser un indexeur avec un objet SPListItem.

Vous pouvez créer vos propres types de champs personnalisés en dérivant une nouvelle classe de SPField ou d’une classe héritant de celle-ci. Pour plus d’informations, voir Procédure : créer une classe de champ personnalisé.

Notes

Toutes les classes héritant de SPField ne peuvent pas être utilisées en tant que classe de base pour votre classe de types de champs personnalisés. Consultez Procédure : créer une classe de champ personnalisé pour obtenir une liste des classes pour lesquelles Microsoft prend en charge la dérivation.

BaseFieldControl et ses dérivés

Le rendu d’un champ dans un élément de liste particulier sur le formulaire Nouvel élément et Modifier l’élément (et parfois le formulaire Afficher) est généralement géré par un objet d’une classe dérivée de BaseFieldControl. Par exemple, un objet SPFieldBoolean est rendu par un objet de la classe BooleanField et l’objet SPFieldUrl est rendu par un objet de la classe UrlField.

Un objet qui instancie un contrôle de rendu contient dans sa propriété Field une référence à l’objet champ qu’il rend. Ce dernier contient une référence à son contrôle de rendu dans sa propriété FieldRenderingControl. Comme le suggèrent ces références réciproques, les deux objets sont partenaires. L’objet dérivé de SPField gère la configuration des colonnes, tandis que le contrôle de rendu dérivé de BaseFieldControl gère l’interaction avec les utilisateurs et le rendu des champs des éléments de liste dans l’interface utilisateur.

Un objet de contrôle de rendu est conservé synchronisé avec le champ de la base de données de contenu par les propriétés Value et ItemFieldValue, la méthode UpdateFieldValueInItem() et le gestionnaire OnLoad(EventArgs). Sur le formulaire de modification, la propriété ItemFieldValue a, dans la base de données de contenu, la valeur du champ de l’élément de liste particulier qui est rendu dans le formulaire. Sur le formulaire Nouveau, ItemFieldValue a une valeur par défaut. Le gestionnaire OnLoad(EventArgs) affecte à la propriété Value la valeur de la propriété ItemFieldValue. Si un utilisateur définit ou modifie la valeur sur le formulaire, la méthode UpdateFieldValueInItem() affecte à la propriété ItemFieldValue la valeur de la propriété Value.

Vous pouvez créer un contrôle de rendu de champ personnalisé en dérivant une nouvelle classe de la classe BaseFieldControl ou d’une classe héritant de celle-ci. Pour plus d’informations, voir Procédure : créer un contrôle de rendu de champ.

Modèles de rendu

La plus grande partie du travail de création et de composition d’un contrôle de rendu de champ, y compris la création de ses contrôles enfants, est effectuée par un modèle de rendu. À chaque contrôle de rendu est associé au moins un modèle de rendu. Un objet RenderingTemplate est défini en tant qu’élément RenderingTemplate dans un fichier ascx du dossier %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES. Le modèle de rendu est référencé par sa valeur d’ID dans la propriété TemplateName de l’objet de contrôle de rendu. Comme le modèle de rendu effectue la majeure partie du travail de rendu, la méthode CreateChildControls() doit faire bien moins de choses que ce qu’elle ferait dans une classe de contrôle Microsoft ASP.NET classique. En général, elle fournit seulement une finition aux contrôles enfants. Par exemple, elle peut attribuer une valeur par défaut à un contrôle enfant si le champ est rendu sur le formulaire Nouvel élément, ou bien attribuer la valeur actuelle du champ à un contrôle enfant sur le formulaire Modifier l’élément.

Vous pouvez créer des modèles de rendu personnalisés pour les utiliser avec vos contrôles de rendu personnalisés. Pour plus d’informations, voir Procédure : créer des modèles de rendu de champ.

SPMobileBaseFieldControl et ses dérivés

Le rendu des champs sur les versions pour appareil mobile des pages SharePoint Foundation est géré par des classes qui dérivent de SPMobileBaseFieldControl. Par exemple, un objet SPFieldBoolean est rendu par un objet de la classe SPMobileBooleanField. Vous pouvez créer vos propres contrôles de rendu de champ pour mobile qui dérivent de l’une de ces classes.

En gros, ces classes fournissent la même fonctionnalité pour les formulaires mobiles que ce que les classes dérivées de BaseFieldControl fournissent pour les formulaires non destinés aux mobiles. Cependant, il existe quelques différences dans l’architecture :

  • L’arborescence d’héritage des classes dérivées de SPMobileBaseFieldControl remonte à la classe Control de ASP.NET au lieu de la classe Control. De plus, dans la partie SharePoint Foundation de l’arborescence, les fonctions qui sont héritées des classes TemplateBasedControl et FormComponent dans les contrôles de rendu pour non-mobiles sont combinées dans la classe SPMobileComponent pour les contrôles de rendu pour mobiles.

  • Les contrôles de rendu pour mobiles ont leur propre ensemble de modèles de rendu et, si vous avez créé un modèle de rendu personnalisé à utiliser avec des pages pour non-mobiles, il vous sera probablement nécessaire de créer un autre modèle pour utiliser sur une page pour mobile.

  • Les contrôles de champ de rendu personnalisés que vous créez pour des contextes de mobile s’appuient davantage sur la méthode CreateChildControls() du contrôle pour rendre un champ, et donc moins sur le modèle de rendu, que dans le cas de contrôles de rendu de champ personnalisés que vous créez pour des contextes de non-mobile. De plus, lors de la création de contrôles de rendu de mobile personnalisés, vous ne remplacerez pas souvent la méthode CreateChildControls() elle-même. Au lieu de cela, vous allez généralement remplacer une pu plusieurs des quatre méthodes qui sont appelées par CreateChildControls(): CreateControlForDisplay(), CreateControlForEdit(), CreateControlForNew() et CreateControlForView().

  • Un objet qui instancie un contrôle de rendu de mobile contient dans sa propriété Field une référence à l’objet de champ qu’il rend. Cet objet contient une référence à son contrôle de rendu de mobile dans sa propriété FieldRenderingMobileControl. Les membres impliqués dans la synchronisation de la base de données de contenu et du contrôle de rendu sont légèrement différents dans le cas de classes dérivées de SPMobileBaseFieldControl de ce qu’ils sont dans les classes dérivées de BaseFieldControl, comme décrit plus haut.

    Pour plus d’informations sur le rendu des champs sur des pages pour mobiles, voir Procédure : personnaliser le rendu des champs sur les pages mobiles.

Classes de valeurs de champs personnalisés

Si vous créez un type de champ personnalisé qui contient des données complexes, il peut être nécessaire de créer une classe de valeurs de champs personnalisés. Certains des types de champs intégrés requièrent des types de valeurs complexes spéciales. Par exemple, les objets du type de champ SPFieldLookup prennent des valeurs d’un type spécial qui sont représentées par la classe SPFieldLookupValue. Pour plus d’informations sur la création de classes de valeurs de champs personnalisés, voir Procédure : créer une classe de valeurs de champs personnalisée.

ViewFieldsOnly et jointures

Lorsque vous utilisez un objet SPQuery pour représenter une requête Langage CAML (Collaborative Application Markup Language), vous pouvez utiliser les propriétés ViewFields et ViewFieldsOnly pour garantir que votre requête ne doit pas extraire des champs non nécessaires de la base de données de contenu. Si vous utilisez le fournisseur LINQ to SharePoint pour effectuer des requêtes de données de listes, le mot clé LINQ select peut être utilisé dans le même but. Il existe aussi une propriété Joins qui permet à votre requête d’effectuer une jointure de deux listes ou plus. Vous pouvez aussi tirer parti du fait que le fournisseur LINQ to SharePoint prend en charge le mot clé join. Pour plus d’informations, voir Jointures de listes et projections.

Code XML utilisé pour les colonnes et les types de champs

Une quantité substantielle de marquage XML est impliquée dans la définition des colonnes et des types de champs.

Définitions des types de champs

La définition détaillée d’un type de champ est fournie par l’élément Field qui fait partie du schéma de liste principal. Pour plus d’informations, voir Field, élément (List). Lorsqu’un champ est déployé dans le cadre d’un Composant fonctionnel, ce même élément est utilisé dans le fichier de manifeste pour le Composant fonctionnel. Pour plus d’informations, voir Définitions de champ.

« Champ Type XML » et feuilles de style XSLT

Pour qu’ils soient affichés, les champs doivent aussi être inscrits auprès de SharePoint Foundation dans des fichiers nommés selon le modèle fldtypes*.xml situés dans %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\XML. Le format du fichier est Champ Type XML. Ce marquage dans ces inscriptions constitue une définition de type de champ plus simple. Il indique certaines caractéristiques de base d’un type de champ et identifie l’assembly et la classe gérée du type de champ. (Un accès en lecture seule à une définition de type de champ est disponible dans le modèle objet via la classe SPFieldTypeDefinition .)

Dans les affichages de liste, les valeurs des champs sont restituées par une feuille de style XSLT. Les en-têtes en haut de chaque colonne sont également restitués par une feuille de style XSLT. Vous pouvez créer des feuilles de style XSLT pour des champs personnalisés ou pour remplacer le rendu standard de champs existants. Toutes les feuilles de style sont persistantes dans %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL.

Contrôles utilisateur ASP.NET

Les contrôles utilisateur ASP.NET, qui sont définis dans des fichiers ascx, peuvent être utilisés avec deux objectifs dans le développement des types de champs. Premièrement, pour le rendu des champs sur les formulaires Affichage, Nouveau et Modifier qui est effectué avec un contrôle utilisateur appelé contrôle de rendu (voir BaseFieldControl et ses dérivés plus haut) et un modèle de rendu. Un modèle de rendu est défini avec un élément <ModèleRendu> dans un fichier ascx situé dans le dossier %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates. Il est représenté dans le modèle objet par la classe RenderingTemplate. Cette classe vous fournit une couche d’abstraction facile à utiliser, située tout en haut du système ASP.NET des contrôles utilisateur existant sous forme de modèles. Pour plus d’informations sur les modèles de rendu et leur relation avec les contrôles de rendu, voir Modèles de rendu. Deuxièmement, lorsqu’un type de champ lui-même possède des propriétés de variable dont les valeurs diffèrent dans les diverses listes qui comprennent le champ, vous créez un contrôle d’édition de propriété en tant que contrôle utilisateur dans un fichier ascx. Pour plus d’informations à propos de cette tâche, voir Rendu des propriétés de type de champ personnalisés.

Types de jointures dans le schéma de requête

Le Schéma de requêteLangage CAML (Collaborative Application Markup Language) inclut un Élément Join (Afficher) qui vous permet d’effectuer des jointures avec des listes dans une requête CAML à condition qu’une des listes ait une colonne Recherche qui effectue une recherche dans une colonne de l’autre liste. Cet élément rend également possible l’utilisation de jointures implicites et explicites dans une requête LINQ qui utilise le fournisseur LINQ to SharePoint.

Domaines relatifs aux colonnes et au développement de types de champs

Bloc de construction : listes et bibliothèques de documents

Bloc de construction : types de contenu

Plus d’informations sur les colonnes et le développement de types de champs

Vous pouvez trouver des informations complètes et détaillées sur l’utilisation des colonnes et des types de champs dans vos projets de développement dans la section Le développement SharePoint Foundation en détail des nœuds pour Formulaires de liste, Colonnes et Types de champ personnalisés. Pour des informations sur le développement de champs de rendu pour les appareils mobiles, voir Procédure : personnaliser le rendu des champs sur les pages mobiles.

La lecture de la valeur d’un champ particulier dans un élément de liste particulier est une des Principales tâches de programmation SharePoint. Pour plus d’informations, voir Procédure : lire la valeur d’un champ d’un élément de liste.

Pour des informations détaillées sur les requêtes de données dans SharePoint Foundation, voir Requêtes et extraction de données.