SharePoint Listen via WebService auslesen

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:

Ein Gedanke zu “SharePoint Listen via WebService auslesen

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


− 6 = 2

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>