C# et Sharepoint

C# et Sharepoint - C#/.NET managed - Programmation

Marsh Posté le 05-04-2006 à 11:37:22    

Voila, je dois pouvoir à partir de mon application C# accéder à SharePoint. (WebService).  
J'ai trouvé sur le site de microsoft un WebService "SPFile" à ajouter à Sharepoint pour pouvoir accéder à la Document Library.
 
Dés que je tente d'accéder à mon site sur Sharepoint, j'ai droit à une erreur comme quoi l'url n'a pas peu être resolue. Cette erreur peut peut être venir de la config du serveur et plusieurs personnes travaillent dessus actuellement. Donc à voir
 
Donc voila, est ce que quelqu'un à déjà bosser en C# avec SharePoint? Franchement, la doc est très faible et peu d'exemple de programmation. Si quelqu'un aurait sous la main un exemple pour accéder à la document library (ajout/suppression/listing) je lui en serais très reconnaissant.

Reply

Marsh Posté le 05-04-2006 à 11:37:22   

Reply

Marsh Posté le 05-04-2006 à 15:48:07    

Code :
  1. GetConnectionString => http://portail/sites/NomSite
  2. SPSite _site = new SPSite(GetConnectionString);
  3. _site.CatchAccessDeniedException = false;
  4. SPWeb _web = _site.OpenWeb();
  5. SPListCollection doclists = _web.GetListsOfType(SPBaseType.DocumentLibrary);
  6. doclists.IncludeRootFolder = true;
  7. return doclists[DisplayName];


 
Cet exemple te permet d'acceder à n'importe quelle liste d'un site wss quelconque
Après tu peux encapsuler l'ensemble dans un webService. Je sais qu'il y a aussi une collection de webService sous Sharepoint, mais je ne retrouve plus comment y accéder...
 
edit : http://www.microsoft.com/downloads [...] laylang=en
section platform / microsoft windows sharepoint services /reference / webservice


Message édité par alien_nan le 05-04-2006 à 15:51:36
Reply

Marsh Posté le 05-04-2006 à 20:57:53    

merci bcp je regarderais ça
 
les web services se trouve dans vt_bin il me semble... mais ne sont guere fameux puisqu'il retourne une XMLNODE. merci pour le parsing. :D  
 
enfin je te remercie pour cette piste. Car je suis vraiment dans la merde à ce niveau la...

Reply

Marsh Posté le 10-04-2006 à 17:15:43    

je t'ai envoyé un mail.  
 
Je suis dans la panade.  
 
Faut il peut être avoir un client sharepoint pour pouvoir accéder à la lib?
Moi j'ai piqué la dll (Microsoft.Sharepoint.dll) sur le server et je l'ai mis sur mon pc de travail. Mais j'ai une erreur de sécurité.
 
Peux tu m'en dire plus?

Reply

Marsh Posté le 03-05-2006 à 22:47:42    

moi23372 a écrit :

je t'ai envoyé un mail.

 

Je suis dans la panade.

 

Faut il peut être avoir un client sharepoint pour pouvoir accéder à la lib?
Moi j'ai piqué la dll (Microsoft.Sharepoint.dll) sur le server et je l'ai mis sur mon pc de travail. Mais j'ai une erreur de sécurité.

 

Peux tu m'en dire plus?

 


Salut
 
Je viens de voir ton poste, et j'ai le même problème !
Aurais-tu résolu ton problème ??
 
Merci d'avance
 
 

Reply

Marsh Posté le 18-05-2006 à 12:21:06    

Bonjour, je dois également réaliser ce type de connection. Mon but est de réaliser un composant capable de récupérer un document créé par le biai de  Sharepoint et de le transmettre en XML à mon application en C# (en vue d'un traitement).
 
Autrement dit si je pouvais me connecter à la document library et retourner un XML Node, cela serait magnifique!! J'ai pris soin d'importer les dll de Sharepoint, à savoir :
- Microsoft.Sharepoint.Security.dll
- Microsoft.Sharepoint.Dsp.dll
- Microsoft.Sharepoint.Library.dll
- Microsoft.Sharepoint.dll
 
Voici mon code de test, basé sur ce que alien_nan a écrit précédemment.
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.SharePoint.Dsp;
  5. using Microsoft.SharePoint.Library;
  6. using Microsoft.SharePoint.Security;
  7. using Microsoft.SharePoint.WebControls;
  8. using Microsoft.SharePoint;
  9. using System.Web;
  10. using System.IO;
  11. namespace RécupérationContenu
  12. {
  13.     class Program
  14.     {             
  15.         static void Main(string[] args)
  16.         {
  17.             SPSite MonSPsite = new SPSite("http://mondomaine:8098/" );
  18.             MonSPsite.CatchAccessDeniedException = false;
  19.             SPWeb MonSPweb = MonSPsite.OpenWeb();
  20.             SPListCollection doclists = MonSPweb.GetListsOfType(SPBaseType.DocumentLibrary);
  21.             Console.WriteLine("Récupération de la SPListCollection" );
  22.             try
  23.             {
  24.                 doclists.IncludeRootFolder = true;
  25.             }
  26.             catch (Exception ex)
  27.             { Console.WriteLine("\nErreur : " + ex.Message); }
  28.             try
  29.             {
  30.                 Console.WriteLine(doclists[0].Title.ToString());
  31.             }
  32.             catch (Exception ex)
  33.             { Console.WriteLine("\nErreur : " + ex.Message); }
  34.             Console.ReadLine();
  35.         }
  36.     }
  37. }


 
Une erreur m'est retournée (1 fois par try/catch forcément) : "Retrieving the COM class factory for component with CLSID BDEADEBD-C265-11D0-BCED-00A0C90AB5OF} failed due to the following error : 80040154"
 
Sachant que je ne suis pas admin de la machine sur laquelle est installé sharepoint, est ce une erreur de sécurité ? (>> COM).
 
N'étant pas encore à l'aise avec C#/WSS, une interraction de ce type est elle réalisable ?  
 
Je suis un peu à court d'idée pour réussir à récupérer mes documents. Quelqu'un pourrait me remettre sur la voie ?
(J'ai sans aucun doute oublié qqch^^).  
 
Merci


Message édité par ADJ Design le 18-05-2006 à 14:40:11
Reply

Marsh Posté le 19-05-2006 à 12:01:52    

Salut,
Moi dans le cadre de mon projet, on a abandonné Sharepoint. Il existe un Web Service SPFile.asmx à installer sur le serveur Sharepoint qui doit normalement permettre la gestion de la document library. Cependant, je ne suis jamais parvenu à le marché.  
 
Concernant l'erreur COM, normal, tu ne peux pas, problème de sécurité, faut que tu sois sur la machine.
Tu peux imaginer de créer toi même ton Web Service pour Sharepoint, cependant, c'est vachement lourd à faire aussi. C'est trop blackbox à mon gout

Reply

Marsh Posté le 22-05-2006 à 16:54:22    

=> effectivement un pb de droit.
 
Tout les dévs que j'ai fait était installé sur le serveur , donc pas de souci à ce niveau la. Sinon, tu fais un web service qui attaque les libs et qui présente l'info que tu souhaites aller chercher

Reply

Marsh Posté le 23-05-2006 à 11:50:15    

Bon un petit pas en avant. J'ai continué mon exploration sur le web pour consulter les travaux de nos amis anglophones. J'arrive à récupérer des éléments créés. Ici je vous donne le code pour récupérer : Les sites crés, Les listes de collections.
 
Première étape, les Web Services.
Dans Visual Studio, Click droit sur Reference, Add WebRéférence, et entrer l'addresse du site réalisé avec sharepoint : http://monsite:monport/
Tous les webservices ainsi que les méthodes seront "importés" dans l'application.
 
Notez bien le nom de la référence web, c'est très important, et remplacez dans mon code 'nomReferenceWeb' par le nom de votre référence web !!
 
Ensuite le code, dsl il est très mal commenté, mais il est simple en même tps ^^  
- 1 Méthode pour récupérer les sites créés et leur url
- 1 Méthode pour récupérer les collections de liste
- 1 Méthode pour exporter le Node créé en un fichier XML.
- Et un main !!
 
 
 
 

Code :
  1. using System;
  2. using Microsoft.SharePoint.Dsp;
  3. using Microsoft.SharePoint.Library;
  4. using Microsoft.SharePoint.Security;
  5. using Microsoft.SharePoint.WebControls;
  6. using Microsoft.SharePoint;
  7. using SharePointServices;
  8. using System.Web;
  9. using System.Xml;
  10. using System.Net;
  11. namespace RécupérationContenu
  12. {
  13.     class ClassTest
  14.     {
  15.         private static XmlNode ListCollection(string url, string UserName, string Password, string Domain)
  16.         {
  17.             string currentSite = url;
  18.             string suffix = @"/_vti_bin/Lists.asmx";
  19.             XmlNode n = null;
  20.             try
  21.             {
  22.                 nomReferenceWeb.ListsSoap l = new nomReferenceWeb.ListsSoap();
  23.                 l.PreAuthenticate = true;
  24.                 l.Credentials = new System.Net.NetworkCredential(UserName, Password, Domain);
  25.                 l.Url = url + suffix;
  26.                 n = l.GetListCollection();
  27.             }
  28.             catch (Exception)
  29.             {
  30.                 Console.WriteLine("Erreur d'identification" );
  31.             }
  32.             return n;
  33.         }
  34.         private static XmlNode WebCollection(string url, string UserName, string Password, string Domain)
  35.         {
  36.             string currentSite = url;
  37.             string suffix = @"/_vti_bin/webs.asmx";
  38.             XmlNode n = null;
  39.             try
  40.             {
  41.                 nomReferenceWeb.WebsSoap w = new nomReferenceWeb.WebsSoap();
  42.                 w.PreAuthenticate = true;
  43.                 w.Credentials = new System.Net.NetworkCredential(UserName, Password, Domain);
  44.                 w.Url = url + suffix;
  45.                 n = w.GetWebCollection();
  46.             }
  47.             catch (Exception)
  48.             {
  49.                 Console.WriteLine("Erreur d'identification" );
  50.             }
  51.             return n;
  52.         }
  53.         private static void nodeToFile(XmlNode n)
  54.         {
  55.             XmlDocument document = new XmlDocument();
  56.             document.LoadXml("<XML></XML>" );
  57.            
  58.             XmlNode newElem;
  59.             newElem = document.ImportNode(n, true);
  60.            
  61.             XmlElement root = document.DocumentElement;
  62.             root.AppendChild(newElem);
  63.            
  64.             XmlTextWriter fileOut = new XmlTextWriter("d:/test.xml", System.Text.Encoding.UTF8);
  65.             fileOut.Formatting = Formatting.Indented;
  66.             document.WriteTo(fileOut);
  67.             fileOut.Flush();
  68.             fileOut.Close();
  69.         }
  70.         static void Main(string[] args)
  71.         {
  72.             Console.WriteLine("Affichage des résultats" );
  73.             XmlNode XN;
  74.             XN = WebCollection("http://monsite:monport/", "monLogin", "monPWD", "nomDomaine" );
  75.             foreach (System.Xml.XmlNode sn in XN.ChildNodes)
  76.             {
  77.                 Console.WriteLine(sn.Attributes["Title"].Value + " - " + sn.Attributes["Url"].Value);
  78.             }
  79.             XN = ListCollection("http://monsite:monport/", "monLogin", "monPWD", "nomDomaine" );
  80.             nodeToFile(XN);
  81.             Console.WriteLine("Terminé" );
  82.             Console.ReadLine();
  83.         }
  84.     }
  85. }


 
Il n'y a aucune révolution dans ce code, cependant, cela peut permettre à certains de comprendre comment réaliser une interraction entre c# et Sharepoint. Il suffit maintenant de parcourir la MSDN en recherchant le nom des webservices, comme cela vous pouvez récupérer le contenu souhaité, ou encore réaliser de opérations de maintenance.
 
Des liens qui m'ont aidé pour les webservices (j'espère que cela ne sera pas censuré, mon but n'est pas de faire de la pub pour quiconque, mais de documenter ma recherche)
Liste des webservices : http://www.c-sharpcorner.com/Code/ [...] ointWS.asp
Pratique pour vérifier graphiquement login, mdp, domaine, ... : http://blogs.leadit.be/files/sharepointexplorer.zip
 
Mon but est maintenant de créer des groupes utilisateurs avec sharepoint, de créer des articles pour ces groupes et de les récupérer au format XML. J'espère ne pas avoir trop de problème... On verra !!


Message édité par ADJ Design le 23-05-2006 à 15:01:22
Reply

Marsh Posté le 30-05-2006 à 15:57:48    

Après avoir exploré le sujet une fois de plus, pour retrouver mes articles et mes listes, il suffit d'utiliser le Webservice "Lists Service" de Sharepoint.  
Il contient plusieurs méthodes, dont :  
 
- GetCollection(...) pour retrouver toutes mes collections
- GetListItems(...) pour retrouver les articles à partir d'une collection.
 
Penser à utiliser les requête SOAP, cela permet de récupérer les articles selon certains critères (des requêtes quoi !!)
 
Télécharger le Sharepoint SDK, il contient plein d'info et d'exemples ^^


Message édité par ADJ Design le 30-05-2006 à 15:58:14
Reply

Marsh Posté le 30-05-2006 à 15:57:48   

Reply

Marsh Posté le 08-06-2006 à 11:44:28    

Je suis bloqué une fois de plus avec Sharepoint... voilà, je dois utiliser 2 web Services que je n'arrive pas à importer sous Visual Studio 2005.
Il s'agit des services webs suivants :
 
- Site Data Service
- Imaging Service
 
J'ai beau importer mes web Services de Sharepoint en faisant : "Add Web Référence", mais malheureusement, il en importe 8, mais pas ceux là... Une idée ??
 
Evidemment ces web Services vont me permettre d'extraire et d'analyser des éléments sur mes sites, et télécharger des images, entre autre...
 
Comment peut on les ajouter ??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed