Procédure : créer une classe de valeurs de champs personnalisée

Dernière modification : lundi 5 avril 2010

S’applique à : SharePoint Foundation 2010

Dans cet article
Constructeurs utilisés avec les classes de valeurs de champ personnalisées
Utilisation de la directive [Serializable]
Accès aux valeurs de champs personnalisées à partir de la classe de champs personnalisée

Si vous créez une classe de champs personnalisée qui requiert une structure particulière pour les données de champ et que cette structure n'est pas prise en charge par la classe de champs parente dont dérive votre classe de champs personnalisée, vous pouvez créer une classe de valeurs de champs pour contenir vos données de champs.

Notes

Votre type de données personnalisé peut être une structure, ou « struct », ainsi qu’une classe ; mais dans un souci de simplicité pour l’instruction, le Kit de développement SDK de Microsoft SharePoint Foundation 2010 suppose qu’une classe est toujours utilisée.

Votre classe de valeurs de champs personnalisée ne doit pas nécessairement dériver d'une classe spécifique. C'est le cas même pour les classes de champs personnalisées qui dérivent de classes de champs déjà dotées de classes de valeurs de champs associées. Par exemple, si vous créez une classe de champs personnalisée qui hérite de la classe SPFieldMultiColumn, une classe de valeurs de champs de cette classe ne doit pas nécessairement hériter de la classe SPFieldMultiColumnValue.

Nous vous recommandons d'utiliser cette convention d'affectation de noms pour vos classes de valeurs personnalisées :

nom_type_champValeurChamp

TargetDateFieldValue et RegularExpressionFieldValue sont des exemples de classes correctement nommées. (Les classes de valeurs spéciales fournies avec SharePoint Foundation ont été créées avant cette convention d’affectation de noms et suivent le format SPFieldnom_type_champValue, tel que SPFieldMultiColumnValue.)

Constructeurs utilisés avec les classes de valeurs de champ personnalisées

Une classe de valeur de champ personnalisée doit implémenter au moins deux constructeurs, et généralement seulement deux. À quelques rares exceptions près, un constructeur n'a pas de paramètre et l'autre a un paramètre String. Le deuxième constructeur convertit String en une valeur de type personnalisé. Si le type personnalisé est complexe, alors String doit avec une structure pouvant être analysée.

Si la classe est dérivée à partir d'une des classes SPFieldnom_type_champValeur, les conducteurs appellent uniquement le constructeur de base. Voici un exemple de constructeurs de classes de valeurs standard lorsque la classe de valeurs dérive d'une autre classe :

public RegularExpressionFieldValue()
  : base() { }

public RegularExpressionFieldValue(string value)
  : base(value) { }
Public Sub New()
    MyBase.New()
End Sub

Public Sub New(ByVal value As String)
    MyBase.New(value)
End Sub

Dans certains cas, vous pouvez avoir besoin de constructeurs supplémentaires. Par exemple, si votre type personnalisé repose sur un champ de tableau interne, vous pouvez avoir un constructeur qui utilise un paramètre Int32 pour initialiser la taille du tableau, mais aucun membre spécifique du tableau. Vous pouvez également avoir besoin de paramètres supplémentaires pour vos deux constructeurs de base. Par exemple, si les valeurs de votre type personnalisé inclut un composant relatif au contexte, vous pouvez alors ajouter un paramètre SPContext ou éventuellement un paramètre SPWeb ou SPSite. Voir les constructeurs des classes SPFieldnom_type_champValeur pour obtenir des exemples.

Utilisation de la directive [Serializable]

Presque toutes les déclarations de classes de valeurs de champs doivent se voir ajouter la directive [Serializable] afin que leurs objets puissent être sérialisés. Cela signifie que vous devez également ajouter cette directive à la déclaration de votre classe de valeurs de champs personnalisée. En revanche, ceci n’est pas nécessaire lorsque les valeurs d’objets de la classe sont relatives au contexte de sorte qu’il est impossible de conserver ou restaurer les valeurs d’objets explicitement et de manière significative. SPFieldLookupValue est un exemple de classe de valeurs de champs dont la déclaration n’utilise pas la directive [Serializable] : les valeurs de ce type sont toujours temporaires.

Lorsque vous marquez votre classe avec la directive [Serializable], vous devez implémenter la méthode ToString pour convertir la valeur du champ en un format de chaîne qui est utilisé pour le stockage des données. (Mais vous ne devez pas nécessairement remplacer la méthode lorsque votre classe hérite d'une autre classe de valeurs de champ.)

Notes

Les classes SPFieldnom_type_champValue qui peuvent être sérialisées et qui sont fournies avec SharePoint Foundation remplacent toutes la méthode ToString au lieu d’implémenter la classe ISerialization. Nous vous recommandons de suivre ce format : n’implémentez pas l’interface ISerialization.

Pour plus d'informations sur SerializableAttribute, voir SerializableAttribute.

Accès aux valeurs de champs personnalisées à partir de la classe de champs personnalisée

Les classes de champs personnalisées nécessitant des classes de valeurs de champs personnalisées doivent généralement remplacer une ou plusieurs méthodes et propriétés de la classe SPField, en particulier celles qui lisent et écrivent les objets de valeurs de champs personnalisées.

Notes

Pour la plupart de ces membres, l'implémentation dans SPField est sans utilité ; par exemple, GetFieldValue retourne simplement ce qui lui a été transmis, et GetValidatedString appelle simplement la méthode ToString de la classe de valeurs (qui ne contient aucune logique de validation). Pour cette raison, si votre classe de type de champ est dérivée directement de SPField, vous devez fournir des valeurs de remplacement pour les membres que vous devez utiliser dans ce but. Nous recommandons que, dans la mesure du possible, vous dériviez votre classe de champs personnalisée de l'une des classes dérivées de SPField.

  • DefaultValue Retourne, sous forme de chaîne, une valeur par défaut qui peut être utilisée pour le champ lorsqu'un élément de liste spécifique n'a pas de valeur dans ce champ.

  • DefaultValueTyped Retourne une valeur par défaut qui peut être utilisée pour le champ lorsqu'un élément de liste spécifique n'a pas de valeur dans ce champ.

  • FieldValueType Retourne le type de valeur de champ.

  • GetFieldValue Convertit la chaîne spécifiée en objet de valeur de type champ. Votre objet de champ personnalisé doit retourner l'objet de valeur de champ personnalisé lorsque la méthode M:Microsoft.SharePoint.SPField.GetFieldValue(System.String) est invoquée. SharePoint Foundation retourne cet objet lorsque la méthode SPListItem.this["field name"] est appelée. Souvent, le remplacement de cette méthode, après avoir vérifié que String n'est ni vide ni null, a uniquement besoin d'appeler le constructeur de la classe de valeur de champ personnalisée qui accepte un paramètre de chaîne (voir ci-dessus).

  • GetFieldValueAsText Retourne la valeur de données du champ sous forme de chaîne.

  • GetFieldValueAsHtml Retourne la valeur de données du champ sous forme de chaîne, au format HTML. Cette valeur est le plus souvent utilisée pour restituer la valeur du champ directement dans une page. Elle est par exemple utilisée dans la page d’historique des versions d’un élément de liste. Cependant, cette valeur de champ HTML n’est pas utilisée dans le formulaire d’affichage. Le rendu des champs de ce formulaire est généralement le même que celui des affichages de listes, c’est-à-dire qu’il est restitué à partir de l’élément Langage CAML (Collaborative Application Markup Language)DisplayPattern dans le fichier fldtype*.xml du type de champ.

  • GetValidatedString Cette méthode valide l'objet de valeur de type de champ et le convertit en une chaîne sérialisée. À son tour, cette méthode peut utiliser la méthode ToString de l'objet de valeur du champ pour convertir cet objet en une chaîne.

  • PreviewValueTyped Retourne une valeur d'aperçu des données de champ, pour un affichage au moment de la création en mode d'affichage et d'édition.

Voir aussi

Tâches

Procédure pas à pas : création d'un type de champ personnalisé

Concepts

Types de champ personnalisés

Procédure : créer une classe de champ personnalisé

Validation des données du champ personnalisé