Afin de bien comprendre les dépendances entre les bibliothèques de documents ainsi que pour comprendre un peu le fonctionnement des différentes “couches” de SharePoint, les SPFolder, SPList, SPListItem et les types SPContentType, SPContentTypeId, j’ai décidé de commencer par faire une Wep Part d’Upload d’un fichier à partir d’un ordinateur local vers un Sharepoint Foundation 2010.
Je voulais rendre la Web Part la plus facile d’utilisation possible, elle se compose donc ainsi :
Avec une gestion des erreurs que nous verrons par la suite.
Le principe :
Une fois bien compris, le principe est super simple, il faut récupérer le fichier par le biais d’un objet “FileUpload” que vous trouverez dans votre Toolbox. Puis le stocker dans avec un objet Stream et enfin l’envoyer sur le serveur en précisant l’adresse complète (fichier compris).
Ce qui donne en C# :
destUrl correspond à l’Url de destination, soit le regroupement de l’adresse du serveur + le répertoire de destination ainsi que le nom complet du fichier.
Dans mon exemple, je pré rempli l’adresse du serveur SharePoint, que l’on obtient par :
Au niveau de la DropDownList, je laisse le choix à l’utilisateur de choisir le répertoire de destination en lui proposant toutes les bibliothèques de documents du serveur.
Pour faire ça, il faut, lorsque l’on rempli la DropDownList, vérifier que le type de la librairie est bien de type document. Il existe différents types que l’on peut ainsi utiliser dans notre code, ce qui correspond à la classe SPBuiltInContentTypeId.
Pour informations :
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbuiltincontenttypeid_fields.aspx
On commence par déclarer le type de document que l’on souhaite :
Puis j’ai créé une petit fonction qui retourne vrai ou faux en fonction d’une SPList que l’on lui passe en paramètre:
Il ne reste plus que remplir notre DropDownList, pour cela, nous allons parcourir la SPList correspondant au répertoire choisi grâce à un foreach:
Voilà qui n’affichera que les bibliothèques de type “document”.
Bonus:
J’ai également trouvé une petite fonction permettant de vérifier que le répertoire de destination existe et dans le cas contraire il crée une nouvelle bibliothèque afin d’ajouter le fichier. Ce qui peut être pratique dans le cas ou vous laissez l’utilisateur taper la bibliothèque de destination :
Vous appelez cette fonction juste avant le “site.Files.Add(destUrl, contents);” et vous êtes sûr que la bibliothèque de destination existe.
N’oubliez pas d’utiliser des try/catch afin de ne pas faire bugger la Web Part, en effet, dans mon cas, j’ai rajouté un label qui affiche l’erreur (fichier déjà existant, problème d’ouverture, etc..) en la parsant afin de ne garder qu’une partie du message d’erreur.
En action :
Etape 1: Choix du fichier.
Etape 2: On appui la flèche pour placer le fichier ou alors on le nomme directement dans la dernière textbox :
Etape 3: On upload le fichier.
En cas d’erreur:
Voilà pour ma première Web Part, son intérêt, en outre le faite de mieux comprendre le fonctionnement des bibliothèques, est également de pouvoir mieux gérer les uploads, en autorisant que certains types de fichiers par exemple en passant par du code.
Code Source: