在Javascript中调用WSS

    前段时间做一个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 }
posted @ 2009-03-24 11:48  Jaxu  阅读(4501)  评论(5编辑  收藏  举报