XPages SSJS - 在另一个数据库中创建文档

时间:2017-02-16 14:49:21

标签: xpages xpages-ssjs

我收到错误“异常发生,调用方法NotesDatabase.createDocument()null”为以下内容:

var db:NotesDatabase = session.getDatabase("", viewScope.targetDb);
if (db != null) {
   if(db.isOpen()){
   }else{
        db.open();
    }
} else {
}
var doc:NotesDocument = db.createDocument();

评论: 数据库db可用且“打开”。 用户在targetDb中拥有足够的权限来创建文档。

有什么问题?

根据Paul Stephen Withers的提示,我将db.isOpen更改为db.isOpen()。 现在db.open()给出错误“异常发生调用方法NotesDatabase.open()null”尽管我可以在viewScope变量中获取服务器,FilePath等。

3 个答案:

答案 0 :(得分:2)

更改

var db:NotesDatabase = session.getDatabase("", viewScope.targetDb);

var db:NotesDatabase = session.getDatabase(currentDatabase.getServer(), viewScope.targetDb);

这适用于网络和XPinC。

XPages与公式不同,它不喜欢服务器名称的空字符串定义,这与声明的文档相反(对于服务器参数NotesSession.getDatabase - javascript):]

  

数据库所在的服务器的名称。使用null来   指示会话的环境,例如,当前计算机

使用null或“”给出错误500,它会出现。

如果符合以下条件,问题中的代码将起作用:

  • 完全删除 if
  • viewScope.targetDb 变量具有正确指定的备注数据库文件路径,该路径与当前数据库位于同一服务器上
  • 当前用户可以访问目标数据库(通过ACL),具有“创建数据库权限”
  • 根据@Paul
  • ,目标数据库在Reader上方具有最大Internet名称和密码

答案 1 :(得分:1)

我怀疑原因是你正在检查db.isOpen。您应该检查db.isOpen()

值得注意的是session.getDatabase(String, String)不会返回null(除非您正在使用OpenNTF Domino API)。它返回一个未打开的Database对象。所以if语句是无关紧要的。最佳做法是将服务器名称传递给session.getDatabase() - 如果应用程序曾在XPiNC中与您当前的代码一起使用,那么您将获得不同的结果。

无论个人'用户访问,"最大的Internet名称和密码"在ACL的“高级”选项卡上将覆盖该值。如果最大互联网访问权限为“无访问权限”,则无法创建文档。但我怀疑这不是一个因素。

答案 2 :(得分:0)

专业提示 - 获取调试工具栏并使用该工具栏将消息打印到XPage调试工具栏,以查看正在进行的操作以及是否正在设置viewScope变量。另外,学习使用try catch块来捕获异常并将错误消息打印到调试工具栏。你会发现你的问题。 https://www.openntf.org/main.nsf/project.xsp?r=project/XPage%20Debug%20Toolbar