Chinaunix首页 | 论坛 | 博客
  • 博客访问: 962343
  • 博文数量: 232
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 2315
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-02 11:43
文章分类

全部博文(232)

文章存档

2009年(6)

2008年(22)

2007年(72)

2006年(85)

2005年(47)

我的朋友

分类: WINDOWS

2007-10-16 11:17:24

代码是从国外拷贝过来的,加了注释,做了一定改动,原理是通过Domino提供的URL Command,ReadViewEntries,将视图的内容XML化,最后解析该XML,如果是通过DbColumn,则将所有text的内容读取出来,然后,如果是DbLookup,则需要做分析,是否和指定的key匹配
 
  xml version="1.0" encoding="UTF-8" ?>
- <viewentries toplevelentries="3">
- <viewentry position="1" unid="568D6BAD059BC636482572E4004A2FE8" noteid="942" siblings="3">
- <entrydata columnnumber="0" name="$32">
  <text>admintext>
  entrydata>
  viewentry>
- <viewentry position="2" unid="73A3A420AE5EDA2B4825731B005F7964" noteid="952" siblings="3">
- <entrydata columnnumber="0" name="$32">
  <text>user1text>
  entrydata>
  viewentry>
- <viewentry position="3" unid="AEECFD48BB1762534825731B005F93EF" noteid="95E" siblings="3">
- <entrydata columnnumber="0" name="$32">
  <text>user4text>
  entrydata>
  viewentry>
  viewentries>
 
这个是xml的数据格式
 
对应的js代码如下,里面包含了注释和调用方法
function GetViewData(server, path, view, column, category, key)
{
 // web下获得视图数据,并解析
 // 调用方式
 // var a = DbLookup(")
 // 前面两个参数为空,表示当前数据库
 
 // 建立XMLDOM对象
 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 xmlDoc.async = false; // 同步模式
 
 // 形成服务器路径
 var pos = 0;
 currURL = (document.location.href).toLowerCase();
 if (Trim(server) == "") { // 如果传入的是空参数
  pos = currURL.indexOf('://');
  if (pos > 0 ){
   pos += 3;
   pos = currURL.indexOf('/', pos);
   server = currURL.substring(0, pos)
  }
 }
 // 形成数据库路径
 if(Trim(path) == "" ){
  if( pos > 0 ){
   newPos = currURL.indexOf('.nsf',pos);
   if (newPos > 0){
    path = currURL.substring(pos+1,newPos+4)
   }
  }
 }
 // Javascript 数组索引以0为基数,所以列数减1
 if( !isNaN(column) )
  column -= 1;
 
 // 打开url 
 var vurl = Trim(server)+"/" + Trim(path) + "/" + view + "?readviewentries&login=1&count=9999";
 if ((typeof (category) != "undefined") && (Trim(category) != ""))
  vurl +=  "&RestrictToCategory="+category;
 
 if ((typeof (key) != "undefined") && (Trim(key) != ""))
  vurl +=  "&startkey="+key;
 xmlDoc.load(vurl);
 // 如果没有结果,返回空
 if (xmlDoc.documentElement == undefined)
  return ""
 
 // 遍历结果,把内容放到数组中去
 var nodes = xmlDoc.documentElement.childNodes;
 var temp = new Array(nodes.length);
 var j = 0;
 // 如果有key,则需要和key比较
 if(typeof(key) != "undefined"){
  // 用在DbLookup
  for (var i = 0; i < nodes.length; i++){
   if(nodes.item(i).childNodes.item(0).text==key){
    temp[j] = nodes.item(i).childNodes.item(column).text;
    alert(temp[j])
    j++;
   }
   else{
    break;
   }
  }
 }
 else{
  // 用在DbColumn
  for (var i = 0; i < nodes.length; i++){
   temp[j] = nodes.item(i).childNodes.item(column).text;    
   j++;   
  }
 }
 
 // 结果用, 分隔,返回拼接的字符串
 var results = ""
 for (var i = 0; i < j; i++){
  if (i==0){
   results = temp[i];
  }
  else{
   results = results + ", " + temp[i];
  }
 }
 return results;
}
function DbLookup(server,path,view,column, category,key)
{
 // javascript版的DbLookup,有些需求取数据,但是又不想要刷新页面的时候可以用到
 // 调用方式:
 // 当前数据库
 // var a = DbLookup("","","LotusNotes",2, "category", "Keywords",)
 // 其他数据库
 // var a = DbLookup("")
 //
 //
 //
 return GetViewData(server, path, view, column, category, key)
}

function DbColumn(server,path,view,column, category){
 // javascript版的DbColumn
 // 调用方式:
 // 当前数据库
 // var a = DbColumn("","","LotusNotes",1, "category") 
 // 其他数据库
 // var a = DbColumn(", "category")
 //
 //
 //
 return GetViewData(server, path, view, column, category)
}
阅读(2796) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~