2010-12-13 5 views
0

Comment puis-je itérer des listes et des sous-sites SharePoint à partir d'un programme C#? Est-ce que le SharePoint.dll est requis à partir d'une installation SharePoint ou y a-t-il une DLL "client Sharepoint" disponible pour accéder à distance à ces données?Accès par programme aux listes et sous-sites SharePoint?

+0

Est-ce SharePoint 2007 ou 2010? –

Répondre

0

J'arrive à faire face à cette chose maintenant ... cela fonctionne. J'ai un peu baissé le code pour me concentrer uniquement sur la mécanique. C'est dur sur les bords, mais j'espère que vous avez l'idée. Cela fonctionne pour moi.

De même, veillez à configurer une référence Web à l'aide de l'URL de votre site Sharepoint. Utilisez cela comme votre "référence web" ci-dessous.

private <web reference> _Service; 
    private String _ListGuid, _ViewGuid; 

    private Initialize() 
    { 
     _Service = new <web reference>.Lists(); 
     _Service.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     _Service.Url = "https://sharepointsite/_vti_bin/lists.asmx"; 
    } 

    private String SpFieldName(String FieldName, Boolean Prefix) 
    { 
     return String.Format("{0}{1}", Prefix ? "ows_" : null, 
      FieldName.Replace(" ", "_x0020_")); 
    } 

    private String GetFieldValue(XmlAttributeCollection AttributesList, 
     String AttributeName) 
    { 
     AttributeName = SpFieldName(AttributeName, true); 
     return AttributesList[AttributeName] == null ? 
      null : return AttributesList[AttributeName].Value; 
    } 

    public void GetList() 
    { 
     string rowLimit = "2000"; // or whatever 

     System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
     System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
     System.Xml.XmlElement viewFields = xmlDoc.CreateElement("ViewFields"); 
     System.Xml.XmlElement queryOptions = 
      xmlDoc.CreateElement("QueryOptions"); 

     queryOptions.InnerXml = ""; 
     System.Xml.XmlNode nodes = _Service.GetListItems(_ListGuid, _ViewGuid, 
      query, viewFields, rowLimit, null, null); 

     foreach (System.Xml.XmlNode node in nodes) 
     { 
      if (node.Name.Equals("rs:data")) 
      { 
       for (int i = 0; i < node.ChildNodes.Count; i++) 
       { 
        if (node.ChildNodes[i].Name.Equals("z:row")) 
        { 
         XmlAttributeCollection att = 
          node.ChildNodes[i].Attributes; 
         String title = GetFieldValue("Title"); 
         String partNumber = GetFieldValue("Part Number"); 
        } 
       } 
      } 
     } 
    } 
} 

En outre, le procédé SpFieldName est non blindée. C'est juste une bonne idée, pour la plupart des noms de champs dans une liste. Ceci, malheureusement, est un voyage de découverte. Vous devez exposer le code XML pour trouver les noms de champs réels s'ils ne correspondent pas.

Bonne chasse.

Questions connexes