2010-08-05 4 views

Répondre

2

Essayez comme ceci:

private void SetFieldRequired(SPList list, string field, string contentType, bool required) 
{ 
    SPField fieldInList = list.Fields[field]; 
    fieldInList.Required = required;   
    fieldInList.Update(); 

    SPField fieldInContentType = list.ContentTypes[contentType].Fields[field]; 
    fieldInContentType.Required = required; 
    fieldInContentType.Update(); 
} 

Ne pas oublier d'ajouter une gestion des exceptions.

+2

Merci, j'ai changé votre code un peu et il semble fonctionner à merveille! la méthode mise à jour() doit être appelée sur le type de contenu pas le champ. SPField fieldInContentType = list.ContentTypes [contentType] .Fields.GetFieldByInternalName (field); fieldInContentType.Required = false; list.ContentTypes [contentType] .Update(); –

+0

Désolé pour l'erreur , Je n'ai pas testé ce code. :-) –

1

Si vous avez créé votre liste et le type de contenu par programmation (à l'aide de fichiers XML), il y a quelques endroits où vous devez faire le changement:

  1. Dans votre ContentType.CT.Columns Fichier .xml (définissez l'attribut Required = "FALSE" dans le fichier XML de votre élément Field).
  2. Dans votre ContentType.CT.xml (définir l'attribut requis = « FAUX » dans le fichier XML de votre élément FieldRef)
  3. Dans schema.xml de votre liste, si la section, trouvez votre champ et définissez l'attribut à faux.

Vous semblez avoir fait ces choses correctement. Cependant, le fichier schema.xml de la liste n'est utilisé que lorsque la liste est créée. Par conséquent, si vous avez modifié le fichier schema.xml et l'avez déployé, mais sans supprimer ni recréer la liste, vos modifications seront effectivement inutiles.

EDIT:

Si vous ne pouvez pas supprimer et recréer votre liste, vous devez écrire du code qui va le faire par programme (grâce à une fonctionnalité ou l'équivalent). Cela fera l'affaire:

using (SPSite site = new SPSite("http://yoursite")) 
    { 
     using (SPWeb web = site.RootWeb) 
     { 
      SPList list = web.Lists.TryGetList("Your List"); 
      if (list != null) 
      { 
       SPField fld = list.Fields[SPBuiltInFieldId.RequiredField]; 
       fld.Required = false; 
       fld.Update(); 
      } 
     } 
    } 
+0

Merci pour votre réponse ... mais nous avons déjà fait le "truc" dans le FeatureReceiver de la liste, dans la méthode FeatureActivated précisément, mais lors de l'ajout ou l'édition d'un élément de la liste, le champ est toujours requis :-( –

Questions connexes