mai
2009
Comme la question avait été posée sur le forum, une petite fonction pour gérer les pièces jointes a un Item.
Avec Sharepoint, les objets de type SPListItem ont une propriété en lecture seule Attachments, qui retourne un objet de type SPAttachmentCollection
Ajouter ou supprimer une nouvelle pièce jointe se fait assez simplement, du moment que l’on a un tableau de byte, soit :
byte[] content;
string name;
item.Attachments.AddNow(name, content);
// utiliser AddNow permets de ne pas avoir à appeler item.Update();
item.Attachments.DeleteNow(name);
// utiliser DeleteNow permets de ne pas avoir à appeler item.Update();
Attacher le contenu d’un fichier venant du site Sharepoint se fait aussi assez simplement :
string fileName = file.Name;
byte[] fileContent = file.OpenBinary();
La ou cela devient beaucoup plus rigolo, c’est lorsque l’on veut lister les attachments…
En effet, si on fais un foreach sur les attachements, on ne vas pas retourner des objets SPAttachment (par exemple), ni même SPFile, mais…le nom du fichier :-\
Apres un peu de recherche, ces items sont stockés dans un sous-répertoire de la liste, nommé Attachments, les fichiers étant exactement stockes dans un répertoire identifié par l’ID de l’item de la liste concerné. On peut donc y accéder ainsi :
SubFolders(listItem.ParentList.Title).
SubFolders(« Attachments »).
SubFolders(listItem.ID.ToString());
foreach (SPFile file in folder.Files) {
// manipulations diverses et variées sur les fichiers
}
(NB. : Ca a l’air trivial comme ca, mais à l’époque, ca m’a couté pas mal de cheveux )
1 Commentaire + Ajouter un commentaire
Articles récents
Archives
- janvier 2014
- septembre 2013
- août 2013
- mai 2013
- avril 2013
- janvier 2013
- août 2012
- juin 2012
- mai 2012
- avril 2012
- mars 2012
- novembre 2011
- septembre 2011
- août 2011
- juillet 2011
- juin 2011
- mai 2011
- avril 2011
- février 2011
- janvier 2011
- novembre 2010
- octobre 2010
- septembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
Tout d’abord, merci pour ces posts qui sont bien utiles pour appréhender les méandres des API Sharepoint…
Petite précision cependant sur ce post… Puisque le code proposé pour lister les pièces jointes d’une liste n’est tout bonnement pas fonctionnel en l’état.
En effet, les propriétés Folders et SubFolders d’un objet SPWeb n’acceptent pas l’utilisation de parenthèses (telle une méthode), mais plutôt de crochets (pour définir un index, ou une clé dans la liste des items de ce Folder). De plus, un SPSite comme semble l’indiquer le nom de la variable appelant la propriété Folders, ne contient pas de propriété Folders, au contraire d’un objet SPWeb…
Du coup, la bonne syntaxe est :
SPFolder folder = myWeb.Folders[« Lists »].SubFolders[listItem.ParentList.Title].SubFolders[« Attachments »].SubFolders[listItem.ID.ToString()];
Le parcours de la liste des SPFile du SPFolder reste identique.
Par ailleurs, je tiens à préciser que dans le cas de Users n’ayant qu’un droit de lecture sur la liste, on doit utiliser un SPSecurity.RunWithElevatedPrivileges sous peine de se voir refuser l’accès à la page concernée, par notre ami Sharepoint…