2010-12-13 10 views

Antwort

0

Ich geschehe jetzt mit dieser Sache zu tun haben ... das funktioniert. Ich habe den Code etwas heruntergedummt, um mich nur auf die Mechanik zu konzentrieren. Es ist hart an den Rändern, aber hoffentlich kommst du auf die Idee. Es funktioniert für mich.

Stellen Sie außerdem sicher, dass Sie eine Webreferenz mit der URL Ihrer Sharepoint-Site einrichten. Verwenden Sie diese als Ihre "Web-Referenz" unten.

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"); 
        } 
       } 
      } 
     } 
    } 
} 

Auch die SpFieldName Verfahren ist nicht eisengepanzerten. Es ist nur eine gute Schätzung für die meisten Feldnamen in einer Liste. Dies ist leider eine Entdeckungsreise. Sie müssen das XML verfügbar machen, um die tatsächlichen Feldnamen zu finden, wenn sie nicht übereinstimmen.

Gute Jagd.

Verwandte Themen