EDIT: J’ai créé une API JavaScript pour Sharepoint qui gère la création de fichier. Vous pouvez la consulter là : http://aymkdn.github.com/SharepointPlus/symbols/%24SP%28%29.html#.createFile
Saviez-vous qu’il est possible de créer un document de toute pièce et de l’ajouter dans une librairie (« Shared Document ») de Sharepoint seulement avec Javascript ?
Pour cela nous utiliserons le web service « copy.asmx » avec la fonction « CopyIntoItems ».
Si vous pointez vers l’adresse http://votre_sharepoint/_vti_bin/copy.asmx?op=CopyIntoItems vous remarquerez qu’on vous fournit un certain nombre de détails quant aux informations qu’il faut envoyer. Malheureusement c’est plutôt très mal documenté, surtout pour Javascript…
Voici donc la solution pour créer un fichier, par exemple un fichier Excel (en .xls) dans lequel on va mettre un tableau HTML banal et qui sera enregistré (dans notre exemple) dans la librairie « http://votre_sharepoint/Shared Documents/ » (à noter que j’utilise jQuery pour la requête ajax).
// le contenu de notre fichier doit être encodé en Base64. Pour cela j'utilise la fonction disponible sur mon blog (http://blog.kodono.info/wordpress/2011/07/27/midi-code-encoder-decoder-en-base64-pour-javascript-programmation/) function encode_b64(a,b,c,d,e,f){b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";c='=';for(d=f='';e&=3,a.charAt(d++)||(b=';=',e);f+=b.charAt(63&c>>++e*2))c=c<<8|a.charCodeAt(d-=!e);return f} // Notre fonction qu'on va appeler "Upload" // txtContent est du plain text qui est donc le contenu de notre fichier // destinationUrl est l'URL complète vers la librairie où le fichier va être stocké (avec le nom du fichier à créer) function Upload(txtContent, destinationUrl) { var jsStream = encode_b64(txtContent); var soapEnv = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +"<soap:Body>" +"<CopyIntoItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">" +"<SourceUrl>http://null</SourceUrl>" +"<DestinationUrls><string>"+destinationUrl+"</string></DestinationUrls>" +"<Fields><FieldInformation Type='File' /></Fields>" +"<Stream>"+jsStream+"</Stream>" +"</CopyIntoItems>" +"</soap:Body>" +"</soap:Envelope>"; jQuery.ajax({ url: "http://votre_sharepoint/_vti_bin/copy.asmx", type: "POST", dataType: "xml", data: soapEnv, beforeSend: function(xhr) { xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems'); }, contentType: "text/xml; charset=\"utf-8\"" }); } Upload("<html><table><tr><th>Colonne 1</th><th>Colonne B</th></tr><tr><td>Total:</td><td>1500</td></tr></table></html>","http://votre_sharepoint/Shared Documents/test.xls");
Ensuite si vous cliquez sur le fichier « test.xls » nouvellement créé, votre navigateur va vouloir l’ouvrir avec Excel. Celui-ci va vous donner un warning, mais il suffit d’accepter et votre tableau va apparaitre dans votre Excel !
Bien sur on peut créer tout type de fichier (.txt, .jpg, .doc, etc) et avec le contenu que l’on souhaite.
Liens additionnels:
Salut,
Petite question,
Quelle version de jQuery as tu inséré dans ton code.
J’essaie de générer un document dans une librairie sharepoint nommé lib_docs dans un site et rien ne se passe.
Merci d’avance.
-Guillaume B
GuillaumeB> n’importe… Là c’était du 1.6.x, mais ça marche très bien avec la 1.7.x
Sinon tu peux utiliser l’API SharepointPlus que j’ai créé : http://aymkdn.github.com/SharepointPlus/symbols/%24SP.html#.createFile (la version 3 avec pas mal de changements est bouclée, il ne me reste plus qu’à la poster dans quelques jours)
Wow, sérieusement excellent travail la dessus, j’ai hate de voir la version 3 de ton api parce que c’est excellent.
Merci beaucoup !