前段时间做一个MOSS的项目,boss要求在一个List Item新建的页面上增加用户身份验证,符合条件的用户可以进入,不符合条件的用户转到Accessdenied页面。因为整个项目建立在MOSS平台上,并且客户不允许在服务器上部署dll,所以不能写C#代码,所有的前台展示都需要在脚本中来完成(真是变态啊)。
好在WSS给我们提供了内容丰富的WebService,我们只需要通过js去调用就行了,这跟使用Ajax基本没什么区别。虽然需求很简单,通过js调用Lists.GetListItems()方法,查找User Information List中的用户,然后再加一些判断就可以了,但是我想到在js中调用WSS提供的方法也是一个会经常使用到的东西,所以在这里整理了一下代码,也作为一个js调用WSS的通用代码,以后直接拿过来用就可以了。
首先是核心部分,这跟Ajax的核心代码基本相同,都是先构造一个XMLHttpRequest或者ActiveXObject对象,然后就是XML的发送和接收。
SPAPI_Core
然后就是写WSS中各个方法的调用接口。WSS中提供的方法特别多,这里只列出了常用的一部分,以后遇到其它的可以类似再添加。
Lists类下的所有方法
SPAPI_Lists
UserGroup类下的部分常用方法
SPAPI_UserGroup
顺便给出一个调用的例子:
1
var
rootUrl
=
window.location.protocol
+
"
//
"
+
window.location.host;
2 var contractId = getUrlParam( " ID " );
3 var contractName = getContractNameById(rootUrl, contractId);
4 alert(contractName);
5
6 function getContractNameById(baseUrl, id)
7 {
8 var lists = new SPAPI_Lists(baseUrl);
9 var items = lists.getListItems(
10 ' Contract ' ,
11 '' ,
12 ' <Query><Where><Eq><FieldRef Name="ID"/><Value Type="Counter"> ' + id + ' </Value></Eq></Where></Query> ' , // query
13 ' <ViewFields><FieldRef Name="Title"/></ViewFields> ' ,
14 1 , // rowLimit
15 '' // queryOptions
16 );
17
18 if (items.status == 200 )
19 {
20 var rows = items.responseXML.getElementsByTagName( ' z:row ' );
21
22 if (rows.length == 1 )
23 {
24 return rows[ 0 ].getAttribute( ' ows_Title ' );
25 }
26 else
27 {
28 return null ;
29 }
30 }
31 else
32 {
33 return null ;
34 }
35 }
36
37 function getUrlParam(name)
38 {
39 var query = window.location.search.substring( 1 );
40 var pairs = query.split( " & " );
41 var argname = "" ;
42 var val = "" ;
43 for ( var i = 0 ; i < pairs.length; i ++ )
44 {
45 var pos = pairs[i].indexOf( ' = ' );
46 if (pos == - 1 )
47 {
48 continue ;
49 }
50 argname = pairs[i].substring( 0 , pos);
51 val = pairs[i].substring(pos + 1 );
52 val = decodeURIComponent(val);
53 if (argname == name)
54 {
55 return val;
56 }
57 }
58 return null ;
59 }
2 var contractId = getUrlParam( " ID " );
3 var contractName = getContractNameById(rootUrl, contractId);
4 alert(contractName);
5
6 function getContractNameById(baseUrl, id)
7 {
8 var lists = new SPAPI_Lists(baseUrl);
9 var items = lists.getListItems(
10 ' Contract ' ,
11 '' ,
12 ' <Query><Where><Eq><FieldRef Name="ID"/><Value Type="Counter"> ' + id + ' </Value></Eq></Where></Query> ' , // query
13 ' <ViewFields><FieldRef Name="Title"/></ViewFields> ' ,
14 1 , // rowLimit
15 '' // queryOptions
16 );
17
18 if (items.status == 200 )
19 {
20 var rows = items.responseXML.getElementsByTagName( ' z:row ' );
21
22 if (rows.length == 1 )
23 {
24 return rows[ 0 ].getAttribute( ' ows_Title ' );
25 }
26 else
27 {
28 return null ;
29 }
30 }
31 else
32 {
33 return null ;
34 }
35 }
36
37 function getUrlParam(name)
38 {
39 var query = window.location.search.substring( 1 );
40 var pairs = query.split( " & " );
41 var argname = "" ;
42 var val = "" ;
43 for ( var i = 0 ; i < pairs.length; i ++ )
44 {
45 var pos = pairs[i].indexOf( ' = ' );
46 if (pos == - 1 )
47 {
48 continue ;
49 }
50 argname = pairs[i].substring( 0 , pos);
51 val = pairs[i].substring(pos + 1 );
52 val = decodeURIComponent(val);
53 if (argname == name)
54 {
55 return val;
56 }
57 }
58 return null ;
59 }
本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/archive/2009/03/24/1419913.html,如需转载请自行联系原作者