Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

The Mit's Blog

En plus d'intégrer et skier, il sait même écrire !
(Blog de Renaud Comte)

Actualités


  • Ancien MVP SharePoint 8 ans ...
    Des projets .Net, SharePoint 2013 ou Office 365 ??

    Contactez-nous :

Archives

L’Upload sous SharePoint 2007, ASMX et WCF (ainsi que la vision SharePoint 2010)

image

image

Je viens juste de finir de coder un petit sample pour aider un partenaire à connecter son application à un stockage SharePoint.

Soit un smart client sur le desktop relié à un serveur WSS pouvant uploader différents fichiers métier sur des listes appropriées.

En codant avec eux, je suis retombé sur quelques points que je pense toujours intéressant de partager, si si.

 

A) Attention aux API SharePoint 2007

Certes, le Modèle Objet SharePoint est clair et concis

L’upload se fait facilement en quelques lignes :

source : http://vspug.com/apichot/2007/05/31/sharepoint-2007-upload-a-document-with-its-meta-data/

//Use the list as a folder
SPFolder folder = _web.GetFolder(_DestFolder);
SPFileCollection files = folder.Files;
//Get the file
FileStream fStream = File.OpenRead(pdfFile);
HashTable MetaDataTable = new HashTable();
MetaDataTable.Add("nom de colonne", "valeur");

//Set the destination url for SharePoint
string url = _DestUrlPath + _DestFolder + "/" + Path.GetFileName(pdfFile);
//Add document to the list with metadata, and overwrite an existing document
with the same name
SPFile currentFile = files.Add(url, fStream, MetaDataTable, true);
fStream.Close();

Mais il a le défaut de fonctionner uniquement … en local. Soit sur une des machines de la ferme SharePoint.

Rien ne sert de recopier la Dll Microsoft.SharePoint, elle ne fonctionne QUE sur la ferme, question de backoffice ….

Dés lors pour contourner le soucis, il vous reste 2 options

Il existe une troisième option, alternative et tout aussi séduisante : créer votre propre Web Service et derrière implémenter votre code API classique.

Le seul soucis : votre code n’est plus “externe”, il dépend d’un déploiement serveur qu’un admin peut toujours contester. Mais bon, c’est une option viable surtout si l’on connait le coté verbeux et non typé de nos amis ASMX SharePoint.

>>> Quid de 2010 ?

image

Effectivement, la question est différente, SharePoint 2010 possède désormais un modèle objet SharePoint complet pour les applications distantes 

Ce qui de suite facilite grandement le code !!!
Un sample étant toujours plus parlant qu’un long discours, le voila

source issue de http://blogs.msdn.com/sridhara/archive/2010/03/12/uploading-files-using-client-object-model-in-sharepoint-2010.aspx

ClientContext context = new ClientContext("http://spdevinwin");
Web web = context.Web;   

FileCreationInformation newFile = new FileCreationInformation();   
newFile.Content = System.IO.File.ReadAllBytes(@"C:\Work\Files\17580_FAST2010_S05_Administration.pptx");
newFile.Url = "17580_FAST2010_S05_Administration 4MB file uploaded via client OM.pptx";   
List docs = web.Lists.GetByTitle("Documents");  
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);  

context.Load(uploadFile);  
context.ExecuteQuery();  

Console.WriteLine("done");

Voir mieux encore par le HTTP DAV et le Client OM : 3 Lignes de code!!!!!

ClientContext context = new ClientContext("http://spdevinwin");  
using (FileStream fs = new FileStream(@"C:\Work\Files\17580_FAST2010_S03_Arch.pptx", FileMode.Open)) 
{
   Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/documents/17580_FAST2010_S03_Arch from client OM.pptx", fs, true);   
}

Bon je pense que vous sentez que j’ai déjà une petit préférence pour la nouvelle cuvée 2010 …

 

B) Rien ne vaut un bon wrapper pour ses Web Services

Certes SP2010 est plus que prometteur et RTM mais la vrai vie avec les vrais gens m’ont appris que beaucoup sont et resteront encore un bout de temps sous SharePoint 2007.

Et je les comprends ! MOSS est aussi un très bon produit, on ne peut le renier sous principe de la nouveauté !

Dés lors que faire … A vrai dire rien ne vous empêche de faire un peu de pattern genre “Facade”. Soit un sympathique wrapper cachant la complexité XML de ses Web Services et du manifest XML nécessaire au métadonnés

  • Votre code sera réutilisable aisément
  • Bien plus évolutif
  • pourra être mis à jour pour SP2010 en toute transparence.

Toujours dans le cas de l’upload, voici d’ailleurs un très bon sample d’upload avec metadata via Web Service SharePoint 2007 que je vous conseille de connaitre (et de comprendre )

http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html
(testé et validé dans ma propre VPC)

ce qui donne un code client :

DocLibHelper docLibHelper = new DocLibHelper();            
Dictionary<string, object> properties = new Dictionary<string, object>();            
properties.Add("Title", "Test Title");           
//Create or overwrite text file test.txt in 'Docs' document library creating folder 'Test Folder' as required.        
docLibHelper.Upload("http://localhost/Docs/Test Folder/test.txt", System.Text.Encoding.ASCII.GetBytes("Test text."), properties);

Un exemple à suivre :)

C) Les “Services references“ WCF et les ASMX de SharePoint 2007

On approche de la fin

En effet, avec VS 2008, vous avez le choix d’utiliser WCF plutôt qu’un simple proxy VS.Net sur SOAP.

image

Certes, la différence peut vous paraitre minime mais non, elle est importante !

WCF permet d’externaliser la configuration de la communication de votre code.

>>>> Finit par exemple, la gestion en dur des comptes ou du default credential par exemple et vive les .config

Dans le cas de SharePoint et ses ASMX, vous allez juste devoir rajouter dans votre application les fameux “endpoints” WCF et les “binding”.

Je ne vais pas détailler plus cette partie car cet article le fait largement mieux avec détails, sample, le tout en français SVP

SharePoint 2007 et WCF sur  Have A Nice Day.Net

Et si vous en voulez plus en anglais : http://petesullivan.spaces.live.com/blog/cns!96D0E96711D2A69E!187.entry

A noté : Si vous ne voulez pas vous embêter, il est toujours possible de passer par les références WS depuis l’interface WCF

 image

D) Vive la virtualisation pour tout tester en multiplatforme

==> Il est temps maintenant de conclure je pense, ce sujet de l’upload a été bien couvert.

Bonne réflexion et bon coding et si vous avez des questions, bien venez donc me voir aux WygDays 2010

Wygday 2010image

 

Renaud Comte aka TheMit (aie aie, les Generics sous VB.Net qd on a pas l’habitude …)
Member of WygTeam
http://www.wygwam.com

Mots clés Technorati : ,,,,,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: vendredi 30 avril 2010 18:42 par themit

Commentaires

brunews a dit :

Salut,

voila que tu fais de l'ASM maintenant, que va-t-il me rester ???

# avril 30, 2010 19:38

SteveB a dit :

J'ajouterai que si on n'a pas besoin des métadonnées, on peut executé une requette http PUT pour poser un dossier. Et si je me souviens bien, on peut utiliser la méthode System.Web.WebClient.UploadFile pour y arriver.

# mai 2, 2010 09:06
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01