Colonne en lecture seule, mais visible

June 29, 2010

Pour un projet SharePoint j’ai été confronté au problème suivant : des colonnes devaient être calculées par un bout de code, non éditable par l’utilisateur mais par contre visible dans une vue ou dans la page de détail de l’élément.

Pour ce projet j’ai défini des ContentTypes personnalisés, avec des colonnes de sites dédiées.

En fouillant dans la documentation, je vois les attributs ReadOnly et ReadOnlyEnforced :

ReadOnly

 Optional Boolean. If TRUE, the field is not displayed in New or Edit forms but can be included in views. In addition, setting ReadOnly to TRUE hides the field from Site Settings pages for managing site columns and content types. Setting the Hidden attribute to TRUE completely hides the field from the UI. If you do not include this attribute, Windows SharePoint Services treats the column as if this attribute is set to False.

ReadOnlyEnforced :

 Optional Boolean. TRUE to specify that the user cannot change the field by any means and that it can only be changed by the system.

Je me dit Super! il suffit de passer ces attributs à True et le tour est joué !. Malheureusement, on est en plein SharePoint mystic undocumented attitude et la colonne est toujours bien là, visible et éditable.

Il existe toutefois une combinaison d’attributs qui permettent d’atteindre l’objectif.Par exemple, pour définir la colonne de site Référence, de type texte :

<Field Type="Text"
       DisplayName="Référence"
       Name="Reference"
       ReadOnly="True"
       ReadOnlyEnforced="True"
       ShowInDisplayForm="True"
       ShowInNewForm="False"
       ShowInEditForm="False"
       ID="{E9D147BC-6949-4af9-A563-0BDE896009CF}"
       SourceID="http://schemas.microsoft.com/sharepoint/v3" />

En gros, on précise manuellement le comportement souhaité, c’est à dire visible à l’affichage mais pas en édition.

A noter que les attributs ReadOnly et ReadOnlyEnforced ne sont, à ma conaissance qu’utilisés lorsque vous êtes dans une bibliothèque de document et que vous ouvrez un document dans Office…