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

如何使XPages中的@DbLookup验证另一个数据库中是否存在值?,xpages,lotus-notes,Xpages,Lotus Notes,我有一个XPage,它使用用户的输入执行@DbLookup,并试图在同一服务器上的不同数据库中的视图中查找该值 我已经验证了视图实际上是按第一列排序的,因此@DbLookup是友好的。下面的代码出现在服务器端JavascriptOnClick事件处理程序中,用于我的XPage上的按钮 我的问题是,在尝试将lRep的值分配给“firstNameLabel”时发生错误。lRep正在从dbLookup返回空值,即使“FirstName”字段下的a记录存在且键为“P301993”。此dbLookup应查

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

我已经验证了视图实际上是按第一列排序的,因此@DbLookup是友好的。下面的代码出现在服务器端Javascript
OnClick
事件处理程序中,用于我的XPage上的按钮

我的问题是,在尝试将lRep的值分配给“firstNameLabel”时发生错误。lRep正在从dbLookup返回空值,即使“FirstName”字段下的a记录存在且键为“P301993”。此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());

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

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

编辑

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

除非您的格式在复制和粘贴过程中丢失,否则您的代码有缺陷。这不是Java,这是JavaScript。行尾很重要,函数不会作用于对象,而是返回一个值。另外,
@DbLookup
在运行时返回字符串,因此检查字符串对您没有帮助

您的代码应该如下所示:

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代理具有相同的安全约束。您在服务器文档中是否有足够的权限执行“从其他数据库获取值”?默认为否
为什么不能在@DBLookup调用中使用关键字“[FAILSILENT]”。如果没有与您的密钥匹配的条目,它将返回“”。

如果您仍然有问题,请使用SSJS/java代码查看它的分解位置。

我认为代码应该像
lRep=(typeof lRep=“string”)?“无结果”:lRep。您是否错过了在实际代码或此处复制的代码中分配
lRep
值?不,这不起作用。问题是dbLookup不起作用。它产生了一个错误。你得到了什么错误?托比,很难描述这个错误,因为我确实没有任何调试信息,因为它是服务器端javascript。当我试图运行代码并将lRep的值输出到标签中时,我在web浏览器中遇到了“Webiste无法显示此页面”错误。这令人难以置信地沮丧。要获得更具体的错误,请打开应用程序属性中的“显示Xpage运行时错误页…”。。。。正如@Fredrik Norling所指出的:在寻找答案之前,确保你的物品有价值。我尝试了这个方法,但不幸的是,即使我正确地输入了一个应该在dbLookup中找到的值,resultLabel仍会输出“Failed”。步骤1:使用dblookup完全硬编码的计算文本。步骤2:硬编码变量步骤3:从文本框中获取条目。这将显示查找返回的内容。然后,第4步将结果更改为typeof。你得到了什么?我已经验证了它确实包含一个值。不过,这是一个很好的建议。我尝试在应用程序和lotus notes formula版本的dbLookup中使用一个基本表单进行查找,它返回了一个没有错误的结果。我已经尝试过了,但这并不能解决这里的问题。问题是dbLookup不适用于它应该适用的值。使用dbLookup的公式语言版本在常规格式中工作的相同值。我需要dbLookukp工作并在应该的时候返回一个成功的结果。您在视图中查找的列的类型是什么?。它是数字还是文本?列类型是“常规”将第一列转换为文本,例如-@Uppercase(@Text(UKCNumber))使用一些相同的代码创建两个不起作用的数据库。压缩数据库,然后将其放入dropbox或其他公共共享方式。我或其他人会看一看你能重新发布你的代码吗?正如Naveen和Stefan提到的,原来的一个是行不通的。lRep将返回查找的值,即在成功的情况下返回ukcNumber。hmmm,两个想法:查找视图是否已分类?如果是,请删除分类。第二:您是否确定您的视图是“干净的”,即是否存在另一个具有相同名称或别名的视图?