javascript版dblookup解析

javascript版dblookup解析

代码是从国外拷贝过来的,加了注释,做了一定改动,原理是通过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>admin</text>
  </entrydata>
  </viewentry>
- <viewentry position="2" unid="73A3A420AE5EDA2B4825731B005F7964" noteid="952" siblings="3">
- <entrydata columnnumber="0" name="$32">
  <text>user1</text>
  </entrydata>
  </viewentry>
- <viewentry position="3" unid="AEECFD48BB1762534825731B005F93EF" noteid="95E" siblings="3">
- <entrydata columnnumber="0" name="$32">
  <text>user4</text>
  </entrydata>
  </viewentry>
  </viewentries>


这个是xml的数据格式

对应的js代码如下,里面包含了注释和调用方法
程序代码程序代码

function GetViewData(server, path, view, column, category, key)
{
// web下获得视图数据,并解析
// 调用方式
// var a = DbLookup("http://server","folder/db.nsf","Keywords","LotusNotes",2)
// 前面两个参数为空,表示当前数据库

// 建立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("http://server","folder/db.nsf","LotusNotes",2,"category","Keywords")
//
//
//
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("http://server","folder/db.nsf","LotusNotes",1, "category")
//
//
//
return GetViewData(server, path, view, column, category)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值