在C#中可以通过Web Service的方式访问SharePoint网站,从而获取到SharePoint网站上的相关列表中的数据,具体操作如下(本文在VS2005中测试通过)
1. 打开VS2005,新建一个控制台程序
2. 添加Web Service服务的引用,SharePoint中列表的Web Service一般地址为"http://server-name/_vti_bin/Lists.asmx",其中的server-name为SharePoint网站所在的服务器的名称或者IP地址,添加后,将Web Service的名称命名为WebListService
3. 在项目中添加以下using的引用
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Xml; using System.Windows.Forms; using System.Drawing; using System.Web; using System.Threading;4. 编写连接SharePoint服务器的访问代码
static WebListService.Lists GetWebLists() { //初始化Lists类 WebListService.Lists webLists = new WebListService.Lists(); //设置用户名,密码 //这里面需要设置服务器管理员的密码以提升权限,否则会返回401错误 NetworkCredential ntc = new NetworkCredential("administrator", "pin"); //设置webLists的用户名,密码 webLists.Credentials = ntc; //设置URL webLists.Url = "http://server-name/_vti_bin/Lists.asmx"; //返回Lists类 return webLists; }
5. 编写获取列表中的Item内容,返回的将是XMLNode格式的内容
static XmlNode GetListItems(WebListService.Lists webLists, string listName) { XmlNode xmlNode = null; if (listName == null) { return null; } try { //第一个参数为列表的GUID //第二个参数为列表视图的GUID,如果为空,表示查询的是默认视图 xmlNode = webLists.GetListItems(listName, null, null, null, null, null, null); } catch (System.Exception ex) { Console.WriteLine("Error Msg: \n" + ex.Message); } return xmlNode; }6. 编写分析XMLNode的函数,并取得想要得数据
static void FindWebNewItem() { while (true) { WebListService.Lists webLists = GetWebLists(); string listName = "{A3E153B3-CF7A-4782-831E-FAB7AFD4FAEF}"; XmlNode xmlNode = GetListItems(webLists, listName); string listTitle = null; foreach (XmlNode node in xmlNode) { if (node.Attributes != null) { listTitle = xmlNode.OuterXml; XmlDocument doc = new XmlDocument(); doc.LoadXml(listTitle); doc.Save(Directory.GetCurrentDirectory() + "\\item.xml"); XmlReader xr = XmlReader.Create(Directory.GetCurrentDirectory() + "\\item.xml"); while (xr.Read()) { if (xr.LocalName == "row") { //获取相应的属性,根据实际情况进行修改 string strID = xr.GetAttribute("ows_FileRef"); string strTitle = xr.GetAttribute("ows_LinkTitle"); string strUser = xr.GetAttribute("ows_AssignedTo"); if (strUser != "") { continue; } //如果发现有新的问题,则弹出一个对话框,在上面填上指向该问题的网址 Form msg = new Form(); msg.Text = "发现新的问题..."; msg.Width = 500; msg.Height = 130; msg.StartPosition = FormStartPosition.CenterScreen; Label lbTitle = new Label(); lbTitle.Text = "标题: " + strTitle; lbTitle.Left = 10; lbTitle.Top = 10; lbTitle.Width = 450; lbTitle.Visible = true; msg.Controls.Add(lbTitle); LinkLabel llHttpAddress = new LinkLabel(); llHttpAddress.Text = "http://server-name/support/Lists/List/DispForm.aspx?ID=" + strID.Substring(0, strID.IndexOf(';', 0)); llHttpAddress.Left = 10; llHttpAddress.Top = 40; llHttpAddress.Width = 450; llHttpAddress.Visible = true; llHttpAddress.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(lblHttp_LinkClicked); msg.Controls.Add(llHttpAddress); msg.ShowDialog(); } } } } Thread.Sleep(1000*60); } }7. 添加响应第6步操作中的LinkLabel的鼠标单击响应函数
static private void lblHttp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { LinkLabel llHttpAddress = (LinkLabel)sender; System.Diagnostics.Process.Start(llHttpAddress.Text); Form form = (Form)llHttpAddress.Parent; form.Close(); }8. 编写Main函数
static void Main(string[] args) { ThreadStart ts = new ThreadStart(FindWebNewItem); Thread th = new Thread(ts); th.Start(); Console.ReadLine(); }9. 到此,就可以查询相应的数据内容了,是不是很简单?哈哈