Vor kurzen Stand ich vor dem Problem, das ich aus dem SharePoint Daten auslesen musste. Relativ schnell habe ich gefunden, das der SharePoint Webservices anbietet. Da es sich um den SharePoint 2007 handelt, ist die Webservice schnittstelle etwas eingeschränkt und lässt sich nur via XML/SOAP ansprechen und nicht via WCF (nach meinen erkenntnissen).
Mein erster Gedanke war eben, im VS2008 Rechtsklick, neuen Dienstverweis. Aber mit Dienstverweis habe ich leider nicht zum laufen bekommen. Deswegen habe ich dann den Webverweis genommen.
Lists _ClientLists = new Lists(); Guid _ListGuid = new Guid("Meine GUID von der Liste"); //URL zum Webservice _ClientLists.Url = ConfigurationSettings.AppSettings["WSListURL"];// "http://server/webseite/_vti_bin/Lists.asmx"; //WindowsLogin nutzen _ClientLists.UseDefaultCredentials = true; XmlDocument xmlDoc = new System.Xml.XmlDocument(); XmlNode listQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); XmlNode listViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); XmlNode listQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", ""); //Optionen stehen im MSDN-Link listQueryOptions.InnerXml = "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>" + "<DateInUtc>TRUE</DateInUtc>"; //Spalten/Felder die aus der Liste geladen werden sollen listViewFields.InnerXml = @"<FieldRef Name='ID' /> <FieldRef Name='Name' /> <FieldRef Name='Nutzen' /> <FieldRef Name='Internet' />"; //Query - um die Abfrage etwas einzuschränken, zB nur freigegeben Daten auslesen, .... listQuery.InnerXml = @" <Query> <Where> <And> <Eq> <FieldRef Name='Internet' /> <Value Type='Boolean'>TRUE</Value> </Eq> <Eq> <FieldRef Name='Nutzen' /> <Value Type='Choice'>Ja</Value> </Eq> </And> </Where> </Query>"; //Result von Webservice XmlNode items; try { //GetListItems ist Methode, um alle Items/Zeilen aus der Liste zuholen //_ListGuid - ist der Listenname //null - ViewName //listQuery - von oben //listViewFields - von oben //10000 - Anzahl der Zeilen //listQueryOptions - von oben //null - WebId - ging auch ohne! items = _ClientLists.GetListItems(_ListGuid.ToString(), null, listQuery, listViewFields, "10000", listQueryOptions, null); //Da die eigentlichen Zeilen erst im ersten ChildNote sind var all = items.ChildNodes.Item(1); //XMLDocument in Linq-to-XML parsen XDocument linqDoc = XDocument.Parse(all.OuterXml); //da die Query von oben nicht nicht klappt, hier noch mal. var all2 = linqDoc.Root.Elements().Where(e => e.Attribute("Nutzen").Value == "Ja" && e.Attribute("ows_Internet").Value == "1"); //Zeilen durch gehen und verarbeiten var enu = all2.GetEnumerator(); while (enu.MoveNext()) { //Daten verarbeiten //Daten auslesen var id = enu.Current.Attribute("ows_ID").Value; } } catch (System.Web.Services.Protocols.SoapException ex) { }
Jetzt kann man in der While-Schleife beliebt die Daten verarbeiten, in eine DB schreiben, XML-Files oder einfach nur anzeigen.
Viel Spaß damit, wenn noch jemand Tipps hat, dann bitte als Comment Posten – Vielen Dank
Links:
Da frage ich mich beim Lesen von blog.norbi-net.de schon, ob man doof ist. Danke für eure Erklärungen