如何在XPages中使@DbLookup验证另一个数据库中是否存在值?

时间:2013-06-04 17:10:32

标签: xpages lotus-notes

我有一个XPage正在使用用户的输入执行@DbLookup并尝试在同一服务器上的另一个数据库中的视图中查找该值。

我已经确认视图实际上是按第一列排序的,因此@DbLookup是友好的。以下代码显示在XPage上按钮的服务器端Javascript OnClick事件处理程序中。

我的问题是尝试将lRep的值分配给'firstNameLabel'时发生错误。即使'FirstName'字段下的a记录存在密钥'P301993',lRep也会从dbLookup返回一个空值。这个dbLookup应该找到一个返回单个'FirstName'的结果。但事实并非如此。

var resultLabel = getComponent("firstNameLabel");
var dbName = new Array(@DbName()[0],"UKCSandbox.nsf");
var lRep = @DbLookup(dbName,"customerLookup","P301993","FirstName");
resultLabel.setValue(lRep.toString());

4 个答案:

答案 0 :(得分:4)

除非您的格式在复制和粘贴中丢失,否则您的代码存在缺陷。这不是Java,这是JavaScript。行结尾不重要,函数不作用于对象,但返回值。此外@DbLookupyou have exactly one match时返回一个字符串,因此检查字符串对您没有帮助。

您的代码应如下所示:

var ukcNumber = Registration.getItemValueString('UKCNumber').toUpperCase();
var resultLabel = getComponent("ukcNumberLabel");
var dbName = @DbName();
dbName[1] = "UKC\\UKCSandbox.nsf";

var lRep = @DbLookup(dbName,"customerLookup",ukcNumber,1);

resultLabel.setValue((lRep) ? "Success" : "Failed");

这对你有用吗?

更新:要检查的两件事:

  • 使用@DbName在同一个数据库中进行查找吗?
  • XPages与Java代理具有相同的安全性约束。您是否有足够的权限在服务器文档中执行“从其他数据库获取值”?默认为否!

答案 1 :(得分:2)

您是否尝试过让dblookup在xpages之外工作,即使用ScanEZ或Notes客户端?

答案 2 :(得分:2)

检查你的ukcNumber变量,使其包含一个值。

修改

检查以便用户有权在其他数据库中进行查找。 还可以在旧的Notes表单上尝试类似的代码,看看是否得到相同的结果。

答案 3 :(得分:0)

为什么不能在@DBLookup调用中使用关键字'[FAILSILENT]'。如果没有条目与您的密钥匹配,它将返回“”。 如果仍有问题,请使用SSJS / java代码查看它的分解位置。