【问题标题】:How to make @DbLookup in XPages verify the existence of a value in another database?如何让 XPages 中的 @DbLookup 验证另一个数据库中是否存在某个值?
【发布时间】:2013-06-04 17:10:31
【问题描述】:

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

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

我的问题是尝试将 lRep 的值分配给“firstNameLabel”时发生错误。 lRep 正在从 dbLookup 返回一个空值,即使“名字”字段下的记录存在,键为“P301993”。此 dbLookup 应该找到返回单个“名字”的结果。然而,事实并非如此。

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

【问题讨论】:

  • 我认为代码应该像lRep = (typeof lRep == "string") ? "No result" : lRep;。您是否错过了在实际代码或此处复制的代码中分配 lRep 值?
  • 不,那没用。问题是 dbLookup 不起作用。它正在产生错误。
  • 你遇到了什么错误?
  • Toby 很难描述这个错误,因为我真的没有任何调试信息,因为它是服务器端的 javascript。当我尝试运行代码并将 lRep 的值输出到标签中时,我在 Web 浏览器中收到“Webiste 无法显示此页面”错误。这令人难以置信的沮丧。
  • 要获得更具体的错误,请在应用程序属性中打开“显示 Xpage 运行时错误页面”。

标签: xpages lotus-notes


【解决方案1】:

除非您的格式在复制和粘贴中丢失,否则您的代码存在缺陷。这不是 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 在同一个数据库中进行查找?
  • XPage 具有与 Java 代理相同的安全约束。您在服务器文档中是否有足够的权限来执行“从其他数据库获取值”?默认为否!

【讨论】:

  • ...正如@Fredrik Norling 指出的那样:在查看之前确保您的物品具有价值
  • 感谢您的回复。我试过这个,但不幸的是,即使我正确输入了一个应该用 dbLookup 找到的值,resultLabel 仍然输出“失败”。
  • 然后从头开始反向构建代码。第 1 步:使用完全硬编码的 dblookup 计算文本。第 2 步:硬编码变量 第 3 步:从文本框中获取条目。这将向您显示查找返回的内容。然后第 4 步更改为 typeof 的结果。你得到了什么?
【解决方案2】:

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

【讨论】:

  • 你能重新发布你的代码吗?正如 Naveen 和 Stefan 所说,最初的那个是行不通的。 lRep 将返回查找的值,即 ukcNumber 在成功的情况下。
  • 嗯,有两个想法:查找视图是否已分类?如果是,请删除分类。第二:您确定您的视图是“干净的”,即是否可能存在另一个具有相同名称或别名的视图?
【解决方案3】:

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

编辑

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

【讨论】:

  • 我已经验证它确实包含一个值。不过建议不错。
  • 我尝试使用应用程序中的基本表单和 dbLookup 的 lotus notes 公式版本进行查找,它返回的结果没有错误。
【解决方案4】:

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

【讨论】:

  • 我已经尝试过了,但这并不能解决这里的问题。问题是 dbLookup 不适用于它应该适用的值。使用 dbLookup 的公式语言版本以常规形式工作的相同值。我需要 dbLookukp 工作并在应该的时候返回一个成功的结果。
  • 您在视图中查看的列的类型是什么?。是数字还是文字?
  • 列类型为'general'
  • 将第一列转换为文本,如-@Uppercase(@Text(UKCNumber))
  • 使用一些相同的代码创建两个数据库,但这些代码不起作用。压缩数据库并将其放置在此处,即保管箱或其他公共共享方式。我或其他人会看看
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 2021-02-14
  • 2018-03-11
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多