SPServices介绍之三:使用SPSerivces对象调用Web Service

SPServices介绍之三:使用SPSerivces对象调用Web Service

分类: SPSerivces2014-09-21 04:23 304人阅读 评论(0) 收藏 举报

在上一篇文章SPServices介绍之二中,介绍了一些SPServices的基本方法,除了这些方法,SPServices的主要用处是使用Ajax方法调用SharePoint提供的Web Service。

先看一下语法:

[javascript] view plaincopy

  1. $().SPServices({
  2. operation: "operationname",
  3. [webURL: "/sitepath",]
  4. [option1: value1,]
  5. [option2: value2,]
  6. [async: false,]
  7. completefunc: function (xData, Status) {
  8. ...do stuff...
  9. }
  10. });

其中:

operation用来指定Web Service 方法的名字,例如最常用的Lists Web Services中的GetListItems方法,用来获取列表中的items。

webURL用来指定Ajax请求使用的url,默认是当前站点的url。

options(options1,options2等等)用来指定Web Servcie调用需要的参数,不同的Web Service有不同的参数,例如GetListItems服务,需要指定listName,viewName等等。

async用来指定Web Service的调用方式是异步还是同步的,默认Ajax的调用都是异步的,如果需要可以使用async: false来强制使用同步的方式调用Web Service

completefunc用来指定Web Service调用成功的回调函数。

举一个简单的例子,使用SPServices调用GetListItems方法:

[javascript] view plaincopy

  1. $().SPServices({
  2. operation: "GetListItems",
  3. webURL:"/",
  4. listName: "Tasks",
  5. async: false,
  6. completefunc: function (xData, Status) {
  7. if (Status == ‘success‘)
  8. {
  9. alert(xData.responseText);
  10. }
  11. }
  12. });

在我的环境中,运行以上代码的结果如下图所示。(Tasks列表中只有一条数据)

可以看到我们用了非常少的代码,就完成了对GetListItems方法的调用,并且可以在completefunc方法中处理返回结果。调用Web Service返回的xml数据被保存在xData.responseXML属性中,在SPSerives库中,提供了两个很好用的方法,来处理xml数据。

一个是用来解析xml数据的SPFilterNode

语法是:

[javascript] view plaincopy

  1. $(xData.responseXML).SPFilterNode(somenode)

可以使用这个方法分析GetListItems方法返回的xml数据,如下所示:

[javascript] view plaincopy

  1. $().SPServices({
  2. operation: "GetListItems",
  3. webURL:"/",
  4. listName: "Tasks",
  5. async: false,
  6. completefunc: function (xData, Status) {
  7. if (Status == ‘success‘)
  8. {
  9. $(xData.responseXML).SPFilterNode("z:row").each(function (index, item) { alert(index); alert(item); });
  10. }
  11. }
  12. });

这里使用SPFilterNode方法遍历每个z:row节点。

另一个方法是将xml数据转换为Json对象的SPXmlToJson

语法是:

[javascript] view plaincopy

  1. $(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({
  2. mapping: {},
  3. includeAllAttrs: false,    //是否包含z:row节点中的所有属性
  4. removeOws: true,           //是否需要移除Ows_前缀
  5. sparse: false              //如果是true,将不返回空的属性值<span style="font-family: Arial, Helvetica, sans-serif;">("")</span>
  6. });

这里需要说明的是mapping参数,这个属性允许你指定xml节点的属性和Json对象属性之间的匹配规则,例如你希望ows_Title这个z:row节点的属性,在Json对象中的名字是“NewTitle”,类型是string类型的,那么可以添加这样一个mapping:

[javascript] view plaincopy

  1. ows_Title: {mappedName: "NewTitle", objectType: "Text"}

其中mappedName指定了Json对象中的名字,objectType指定了转换之后的JS对象。SharePoint Field对象和JS对象的对应转换关系如下:

SPFieldType(字段类型) JavaScript Object Type(JS类型)
Counter int
Integer int
DateTime Date()
User User = {userId, userName}
UserMulti User数组
Lookup lookup = {lookupId, lookupValue}
LookupMulti lookup数组
Boolean true / false
MultiChoice string数字
Currency float
Text string

举例说明:

[javascript] view plaincopy

  1. $().SPServices({
  2. operation: "GetListItems",
  3. webURL:"/",
  4. listName: "Tasks",
  5. async: false,
  6. completefunc: function (xData, Status) {
  7. if (Status == ‘success‘)
  8. {
  9. var myJson = $(xData.responseXML).SPFilterNode("z:row").SPXmlToJson({
  10. mapping: {
  11. ows_ID: { mappedName: "ID", objectType: "Counter" },
  12. ows_Title: { mappedName: "NewTitle", objectType: "Text" },
  13. ows_Created: { mappedName: "Created", objectType: "DateTime" },
  14. },
  15. includeAllAttrs: true,
  16. removeOws: false
  17. });
  18. alert(myJson);
  19. alert(myJson[0].ID);
  20. alert(myJson[0].NewTitle);
  21. alert(myJson[0].Created);
  22. }
  23. }
  24. });

运行之后myJson对象的结构是这样的:

可以看到ows_ID已经map到ID这个属性上了,同样ows_Title也map到NewTitle这个属性上了,同样还有ows_Created,map到了Created属性。

除了以上的两个方法之外,SPServices还提供了一个更加方面的方法:SPGetListItemsJson

这个方法调用GetListItems这个Web Service方法,直接返回一个Json对象,非常方便使用,更省去了mapping的麻烦。

语法:

[javascript] view plaincopy

  1. $().SPServices.SPGetListItemsJson({
  2. webURL: "",
  3. listName: "",
  4. CAMLViewName: "",
  5. CAMLQuery: "",
  6. CAMLViewFields: "",
  7. CAMLRowLimit: "",
  8. CAMLQueryOptions: "",
  9. changeToken: "",
  10. contains: "",
  11. mapping: null,
  12. mappingOverrides: null,
  13. debug: false
  14. });

这个就不举例子了。

除了以上作为例子的GetListItems方法之外,SPService库还可以支持很多的Web Service调用,具体有哪些请参考:点击打开链接

时间: 2024-10-06 16:08:45

SPServices介绍之三:使用SPSerivces对象调用Web Service的相关文章

ORACLE存储过程调用Web Service

1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sql service,调用web service的方法这里就不做介绍了,本文主要用来介绍oracle存储过程调用Web Service的方法. 众所周知,在Web Service通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明

VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

在VB.NET调用Web Service提供的服务 技术qq交流群:JavaDream:251572072 下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS2010),通过添加引用的形式,添加到项目中来就可以应用了. 大家如果这个地方不会操场的话,可以问问我QQ:1606841559 当Web Service已经处于对外提供服务状态,VB.NET就可以通过HTTP"调用"来使用这些服务了.当然前提是要了解Web Service对外提供服务所对

php5调用web service

工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经包含了处理soap的模块,但是资料太少了,上php官网上查帮助,写的不是很容易理解,经过多次实践,终于搞清楚了,php调用web service还是非常简单的.下面用一个例子说明: extension=php_openssl.dll extension=php_soap.dll php.ini 这2

Android调用web Service

---恢复内容开始--- 继总结过web service后,再总结一下android中使用web service. 在android中使用web service需要使用到一个第三方开源的类库——ksoap2.他是一个SOAP Web Service客户端开发包.是android平台上高效.轻量级的SOAP开发包. 使用SOAP需要引入第三方的jar包:ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar.如何加入jar包就不在赘述.下面讲

Android---56---Android应用调用Web Service/号码归属地查询

使用Android应用调用Web Service 需要工具: ksoap2-android 下载地址:http://pan.baidu.com/s/1jGL6b10 build path将ksoap2-android 添加到项目工程中 先将ksoap2-android 包导入 libs目录下,右键build path -> add to build path 点击项目工程名,右键 build path -> configure build path 在ksoap2-android这个包前面打上

基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service

引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service.最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑.在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可

[Teamcenter 2007 开发实战] 调用web service

前言 在TC的服务端开发中, 可以使用gsoap 来调用web service. 如何使用 gsoap  , 参考 gsoap 实现 C/C++ 调用web service 接下来介绍如何在TC中进行开发. 开发的方式与环境搭建 在TC的CF端调用webservice , 可以把gsoap 产生和完成的代码打成一个  .lib 的文件(windows, 在linux 下是 .a 的文件) 这里使用的开发工具是 visual studio . 新建一个空的项目, 语言选 C++的就可以了 创建完成

通过ksoap2-android来调用Web Service操作的实例

import java.io.IOException; import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;

WinForm如何调用Web Service

今天看了李天平关于WinForm调用Web Service的代码,我自己模仿做一个代码基本都是复制粘贴的,结果不好使.郁闷的是,又碰到那个该死的GET调用Web Service,我想肯定又是Web.config需要配置,结果WinForm没有这个配置文件,奇怪,为什么人家的就好使,我写的就不好使呢. 上网搜吧,唉,找个两个多小时,基本都是和我一样的代码,互相转载.根本没人提代码好不好使,也没人提正确的用法.就在我要放弃的时候,终于发现原来是在 Web Service的Web.config里配置的