Le Post Infeeny

Les articles des consultants et experts Infeeny

Archives Mensuelles: août 2013

Remplacer des fichiers existants dans une bibliothèque de documents sur SharePoint 2013 via une feature.

Introduction

Au cours de vos développements sur SharePoint, vous avez sûrement déjà voulu remplacer un fichier déjà présent dans une bibliothèque de documents. Et comme vous aimez faire les choses proprement, vous avez alors pensé à utiliser un Module dans une Feature et c’est alors que vous vous retrouviez confronté à une des limites des précédentes versions de SharePoint : il n’était pas possible de remplacer un fichier de manière déclarative, c’est-à-dire via l’element.xml de votre Module.

Seul l’attribut IgnoreIfAlreadyExists permettait de dire à SharePoint d’ignorer votre fichier si ce dernier existait déjà et donc de ne pas remplacer le fichier existant. Je n’ai jamais trouvé cet attribut très clair car en résumé : « on dit à SharePoint de ne pas faire quelque chose, qui de toute façon, ne sait pas faire« . 

Ci-dessous un exemple d’element.xml avec l’attribut IgnoreIfAlreadyExists :

elementXML

Au final, cela nous permettait surtout d’éviter l’erreur SharePoint suivante :

ErrorFileExists

Et si l’on souhaitait vraiment remplacer ce fichier ?

Et bien vous étiez bon pour un petit peu de code, le plus souvent en ajoutant un Event Receiver à votre Feature. Je vous passe ces quelques lignes de code dont vous n’aurez plus besoin de toute façon grâce à un tout nouvel attribut made in SharePoint 2013 !

L’attribut « ReplaceContent »

Une des nouveautés de SharePoint 2013 est donc justement de palier à cette précédente limitation. Il est maintenant possible de remplacer un fichier existant dans une bibliothèque de documents de manière déclarative via un module. Il suffit d’ajouter un ReplaceContent=”TRUE” de la même manière que vous spécifiez auparavant le IgnoreIfAlreadyExists= »TRUE ».

Ci-dessous un exemple en reprenant l’element.xml utilisé dans le premier paragraphe :

elementXML

De cette manière, SharePoint remplacera votre fichier si ce dernier existe déjà. Un seul point qui peut poser problème et sur lequel il faut être vigilant : si le fichier que vous tentez de remplacer est extrait par un autre utilisateur (en statut « check-out »), alors l’activation de votre feature vous renverra une erreur. Assurez-vous donc que rien ne perturbera le remplacement de votre fichier (workflow d’approbation ou extraction en cours par exemple).

Wissam BOUAYADI

Consultant SharePoint

MCNEXT