接触SharePoint已经有一段时间了,但是对Moss 提供的WebService的使用还是比较少的。今天有客户需求做信息同步,将信息同步到moss中。故此使用WebService 的方式来实现。

Moss自带了WebService,通常情况下是跨服务器的访问,因为同一服务器上不同网站可以简单的通过提升权限代码就可以访问数据。

实现上述功能 需要调用 Lists 服务  对项目添加 “http://<server-url>/_vti_bin/Lists.asmx” web引用 ,并将此命名空间命名为SPListsWS

为了方便以后使用,故封装几个方法,实现增,删,改功能。

        /// <summary>/// 调用MossWebService为列表执行增删改(不带附件)/// </summary>/// <param name="ListName">列表名称</param>/// <param name="ListItemID">列表项ID,如果是增,可填写任意字符串</param>/// <param name="FieldAndValue">存储sharepoint 列表字段的键值对</param>/// <param name="Cmd">执行的操作 New Update Delete  不区分大小写</param>public XmlNode MossListComand(string ListName, string ListItemID, Hashtable FieldAndValue, string Cmd){SPListsWS.Lists listService = new SPListsWS.Lists();//listService.Credentials = System.Net.CredentialCache.DefaultCredentials;listService.Credentials = new System.Net.NetworkCredential(adminName, adminPWd, domainName);listService.RequestEncoding = Encoding.UTF8;StringBuilder strBatch = new StringBuilder();switch (Cmd.ToLower()){case "new":            //ID在增加操作时只是个唯一标记,可以随便指定,并不对应到实际//listitem的ID。                                strBatch.Append("<Method ID='1' Cmd='New'><Field Name='ID'>New</Field>"); break;case "update":            //Update中<Field Name='ID'>的ID为要更新项的实际的ID了,因为要靠这个来唯一指定一条记录strBatch.Append("<Method ID='1' Cmd='Update'><Field Name='ID'>" + ListItemID + "</Field>");                               break;case "delete":            //<Field Name='ID'>的ID为要删除项项的实际的ID了,因为要靠这个来唯一指定一条记录                    strBatch.Append("<Method ID='1' Cmd='Delete'><Field Name='ID'>" + ListItemID + "</Field>"); break;}foreach (string key in FieldAndValue.Keys){strBatch.Append("<Field Name='" + key + "'>" + FieldAndValue[key].ToString() + "</Field>");}strBatch.Append("</Method>");XmlDocument xmlDoc = new XmlDocument();XmlElement elBatch = xmlDoc.CreateElement("Batch");elBatch.SetAttribute("OnError", "Continue");    //指定出错后是返回还是继续下一步elBatch.InnerXml = strBatch.ToString();XmlNode ndReturn = listService.UpdateListItems(ListName, elBatch);return ndReturn;}

跟据功能需求,要求记录新增项的ID,下面的方法实现了为Moss插入一条记录,并返回新增项的ID

/// <summary>/// 调用MossWebService为列表执行增加操作并返回新增项ID(不带附件)/// </summary>/// <param name="ListName">列表名称</param>/// <param name="ListItemID">列表项ID,如果是增,可填写任意字符串</param>/// <param name="FieldAndValue">存储sharepoint 列表字段的键值对</param>/// <returns>新增项ID</returns>public string MossListComandForNew(string ListName, string ListItemID, Hashtable FieldAndValue){XmlNode node = MossListComand(ListName, ListItemID, FieldAndValue, "New");string NewId = string.Empty;NewId = GetNewListItemID(node);return NewId;}/// <summary>/// 根据返回的Xml得倒新增加记录的ID/// </summary>/// <param name="ListItems"></param>/// <returns></returns>private string GetNewListItemID(XmlNode ListItems){string newListItemID = string.Empty;IEnumerator ienum = ListItems.GetEnumerator();XmlNode current, dataRow = null;bool isFind = false;while (ienum.MoveNext()){current = (XmlNode)ienum.Current;if (current.Name == "Result"){dataRow = current;ienum = dataRow.GetEnumerator();while (ienum.MoveNext()){current = (XmlNode)ienum.Current;if (current.Name == "z:row"){newListItemID = current.Attributes["ows_ID"].Value;isFind = true;break;}}if (isFind)break;}}return newListItemID;}

当然执行增删改功能后都会返回一个xml文本,这里我只取ID,同样也可以取到列表项的其他信息。

上面是对列表的增删改。对列表的查询功能也作了简单的封装

(这里借鉴了 沙舟的一篇文章http://www.cnblogs.com/Hary/archive/2009/02/04/1383933.html做了简单的修改。)

  public string  UserName { get; set; }public string  PassWord { get; set; }public string  DomainName { get; set; }public  DataSet GetItems(string ListName,string CamlStr,string Fields,string rowLimit){SPListWs.Lists listsWS = new SPListWs.Lists();//listsWS.Credentials = System.Net.CredentialCache.DefaultCredentials; //该句在编译环境可以代替下一句,但是跨服务器应用肯定要用下一句listsWS.Credentials = new NetworkCredential(UserName, PassWord, DomainName);XmlDocument doc = new System.Xml.XmlDocument();doc.LoadXml("<Document><Query>" + CamlStr + "</Query><ViewFields>" + Fields + "</ViewFields><QueryOptions /></Document>");XmlNode listQuery = doc.SelectSingleNode("//Query");XmlNode listViewFields = doc.SelectSingleNode("//ViewFields");XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");Guid g = GetWebID();XmlNode items = listsWS.GetListItems(ListName, string.Empty, listQuery, listViewFields, rowLimit, listQueryOptions, g.ToString());NameTable nt = new System.Xml.NameTable();XmlNamespaceManager nsMgr = new XmlNamespaceManager(nt);nsMgr.AddNamespace("w", "http://schemas.microsoft.com/office/word/2003/2/wordml");XmlNode y = items.SelectSingleNode("*", nsMgr);DataSet ds = new DataSet();if (y != null){XmlReader xmlReader = new XmlTextReader(y.InnerXml, XmlNodeType.Element, null);ds.ReadXml(xmlReader);}return ds;}private  Guid GetWebID(){SPData1.SiteData siteDataWS = new SPData1.SiteData();siteDataWS.Credentials = new NetworkCredential(UserName, PassWord, DomainName);SPData1._sWebMetadata webMetaData;SPData1._sWebWithTime[] arrWebWithTime;SPData1._sListWithTime[] arrListWithTime;SPData1._sFPUrl[] arrUrls;string roles; string[] roleUsers; string[] roleGroups;uint i = siteDataWS.GetWeb(out webMetaData, out arrWebWithTime, out arrListWithTime, out arrUrls, out roles, out roleUsers, out roleGroups);Guid g = new Guid(webMetaData.WebID);return g;} 

调用的小例子

            this.UserName = "******";this.PassWord = "******";this.DomainName = "**";string listname = "工作动态";string camlStr = @"  <OrderBy><FieldRef Name='Created' Ascending='False' /></OrderBy>";camlStr += @"      <Where><Gt><FieldRef Name='ID' /><Value Type='Counter'>3</Value></Gt> </Where>";string Fields = "<FieldRef Name='ID' /><FieldRef Name='Title' /><FieldRef Name='Created' />";string rowLimit = "10";DataSet ds = GetItems(listname, camlStr, Fields, rowLimit);

在上面的查询方法参数中GetItems 中 QueryOptions  可以通过设置得到一些其他的信息

XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");

在Lambert Qin的博客中有针对QueryOptions使用的介绍

http://www.cnblogs.com/lambertqin/archive/2012/11/30/2796470.html

转载于:https://www.cnblogs.com/fly-in-sky/archive/2013/06/14/3135972.html

对 SharePoint WebService 的调用相关推荐

  1. 使用wsdl2java命令生成webservice本地调用代码

    使用wsdl2java命令生成webservice本地调用代码 如果没有设置环境变量,就要先进入cxf的bin目录 例子: wsdl2java -d . http://localhost:7890/h ...

  2. 浅谈WebService的调用转

    0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...

  3. C++、C#写的WebService相互调用

    首先感谢永和兄提供C++的WebService服务器端及客户端,并且陪我一起熬夜:然后是火石和我做接口的兄弟,虽然都不知道你叫什么,如果没有你的合作,东西也没那么快完成. 一.由于公司运营火石的< ...

  4. .net webservice studio调用方法传参_springboot整合WebService简单版

    一.什么是webservice 这里给大家分享一下我们的专栏<Java 进阶集中营>,每天都会给大家分享一个最新的java技术内容,有优秀的技术讯息,也欢迎分享在我的专栏里. JAVA 进 ...

  5. 用WebService实现调用新浪的天气预报功能

    用WebService实现调用新浪的天气预报功能 用WebService实现天气预报的查询 这是获取天气Web服务代码,转自书上. 1.请在网站根目录下添加一个"Web服务",命名 ...

  6. python发送soap报文_python用http发送soap报文进行webservice接口调用

    最近学习了python用http发送soap报文进行webservice接口调用,从网上找了些资料,为了方便下次温习,在此留下代码片段,也望高手指点: #!/usr/bin/env python # ...

  7. WebService 远程调用方法汇总

    WebService 远程调用方法汇总 一.Web Service 二.REST 三.RPC 一.Web Service webservice 即web服务,它是一种跨编程语言和跨操作系统平台的远程调 ...

  8. vue 调用webservice_浅谈WebService的调用

    0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...

  9. WebService客户端调用常见5种方式

    之前系统中使用到了webservice进行第三方通信,这里总结一下常见的5种客户端调用方式. 在此之前我们先简单搭建一个webservice服务端项目,发布一个webservice服务.我这里使用sp ...

最新文章

  1. 如何获取当前C#程序所有线程的调用栈信息 ?
  2. python vtk_VTK在python环境下的安装和调用
  3. 软件唯有开源才是出路?
  4. c语言糖果游戏,幼儿园小班糖果游戏教案
  5. 七牛底层架构再完善 让服务从单一走向多元
  6. 桌面计算机图标怎么调出来,我把桌面上的一个图标隐藏了如何显示出来
  7. python微信群管理开禁言_微信群主怎么禁言别人?微信群怎么让群员禁言?
  8. 自定义富媒体广告:NativeX SDK 5.0发布!
  9. 【微信小程序】获取Bmob后端云数据库某一数据表的所有记录
  10. html导出excel
  11. 易企秀如何生成图片_易企秀如何制作圆形照片
  12. 计算机趣事 英语作文,寒假趣事英语作文(通用10篇)
  13. java计算机毕业设计网上拍卖系统源码+系统+数据库+lw文档+mybatis+运行部署
  14. ssh密钥-帮助文档
  15. 两个主要问题将决定微信支付成败
  16. 红外图像非均匀矫正——一点矫正
  17. 性能测试___基本概念(1)
  18. windows7系统声卡问题
  19. Parameter 0 of method linkDiscoverers in org.springframework.hateoas.config.HateoasConfiguration req
  20. 【教程】Spire.PDF教程:如何给PDF添加背景颜色和平铺背景图

热门文章

  1. ecshop mysql 报错_ecshop数据库操作函数
  2. java循环树_for循环输出树木的形状【java】
  3. linux并发控制方法,linux系统并发控制
  4. 用户视图切换为Linux视图,视图_ITPUB博客
  5. python自动化办公设置_python自动化办公之 python操作Excel
  6. android 行居中,android自己定义换行居中CenterTextView
  7. 获取所有task_Asp.Net Core 轻松学-多线程之Task快速上手
  8. 高质量linux c编程指南,《linux c编程指南》学习手记5
  9. 如何查看oracle死鎖,怎么查看oracle是否有死鎖
  10. 如何利用大数据进行价值兑现才是正经事