【问题标题】:XPages cannot access databaseXPage 无法访问数据库
【发布时间】:2013-07-31 18:51:02
【问题描述】:

我有 2 个数据库,一个包含 XPage(移动 Web 应用程序,我们称之为数据库 A),另一个包含文档(数据库 b)。在我的测试单元中,一切正常。当我访问移动网络应用程序时,它可以完美地访问数据库 B 中的数据。但是当我将它们安装在客户端的服务器上时,Web 应用程序无法访问数据库 b。我检查了所有 ACL 条目,我认为这很好。页面中的错误:

执行 JavaScript 计算表达式时出错 脚本解释器错误,line=161,col=18:'ecrDB' 为空 在 [/sjs_common.jss].getCRViewDetails()

导致错误的脚本是:

函数 getCRViewDetails(){ 158: 159: var ecrDB:NotesDatabase = ECR().mainDB; 160:变量视图详细信息:数组=新数组(); 161: if(ecrDB.isOpen()){ //----- 这是错误行! 162: //var vw:NotesView = ecrDB.getView("草稿"); 163: 变量 vw:NotesView = ecrDB.getView(mainConstants.VIEW_MAIN); 164: var docs:NotesDocumentCollection = vw.getAllDocumentsByKey(session.getEffectiveUserName(), true) 165: //var doc:NotesDocument = vw.getFirstDocument(); 166:变量文档:NotesDocument = docs.getFirstDocument(); 167:当(文档!=空){ 168:查看详细信息.push([ 169:doc.getItemValueString(“项目标题”), 170: doc.getItemValueString("CRNumber"), 171: 文档.getUniversalID() 172:]); 173: //打印(doc.getItemValueString("ProjectTitle") + ">>" + doc.getItemValueString("CRNumber")); 174: //doc = vw.getNextDocument(doc); 175:文档=文档.getNextDocument(文档); 176:} 177:}

这就是我访问数据库 b (ECRDB) 的方式:

函数 ECR(){ 34: 35: //私有属性和方法------------------ 36: 37: //设置文件 38: var SetupDoc:NotesDocument = database.getProfileDocument("(Setup)",""); 39: 40: // 如果 sessionScope.ECRMainDBPath 已设置,则尝试连接到主数据库 41: if(sessionScope.containsKey("ECRMainDBPath") && sessionScope.containsKey("ECRDataRepPath")){ 42:试试{ 43: var ECRDB:NotesDatabase = session.getDatabase( 44: SetupDoc.getItemValueString("ECRMainServer"), 45: sessionScope.get("ECRMainDBPath"), 46:错误); 47: var DataRep:DataRepository = 新 DataRepository( 48: session.getDatabase(SetupDoc.getItemValueString("ECRMainServer"), 49: sessionScope.get("ECRDataRepPath"), 50:错误)); 51: 52: var ecrSettingsDoc:NotesDocument = ECRDB.getProfileDocument("eCRSettings",""); 53:}捕捉(e){ 54:打印(e.message); 55: print("错误:无法访问 eCR Main。请检查 Anonymous 是否至少为 Reader Access"); 56:ECRDB =空; 57:} 58:}否则{ 59: //TODO 把这个放在 init() 60: if(!(view.getPageName().equals("/login.xsp") || view.getPageName().equals("/selectDivision.xsp"))){ 61: context.redirectToPage("selectDivision.xsp"); 62:} 63:} 64: 65:返回{ 66:测试:“你好奥尔加!”, 67: 68: setupDoc : SetupDoc, //获取设置文档 69: 70:getSetupValue:函数(字段名){ 71:返回 this.setupDoc.getItemValueString(fieldName); 72:}, 73: 74: //获取 ECR 主数据库(内容数据库) 75:主数据库:ECRDB, 76: 77: //从主数据库中获取 eCRSettings 文档 78:主要设置:ecrSettingsDoc, 79: 80: //获取完整的数据库路径(带服务器) 81:getFullDBPath:函数(){ 82:返回 this.mainDB.getServer() + "!!" + this.mainDB.getFilePath(); 83:}, 84: 85: //获取数据仓库对象 86:getDataRep:函数(){返回DataRep; }, 87: 88: //get Data Repository //TODO 删除这个 89: //dataRep : DataRep.getDatabase(), 90: 91: //获取数据仓库的 URL 92: //getDataRepURLPath : DataRep.getURLPath, 93: 94:getDBURL:函数(){ 95:返回 context.getUrl().toString().split(view.getPageName())[0]; 96:}, 97: 98:getSplittedOrder:函数(){ 99:返回 this.mainSettings.getItemValueString("SplittedOrder"); 100:} 101:}; 102: }// ECR 声明结束

我不知道数据库可能存在什么问题。您能告诉我为了成功访问数据库 b 需要检查哪些因素吗?非常感谢! :)

【问题讨论】:

  • 从 XPage 访问另一个数据库可能有点挑剔。您可能必须使用sessionAsSigner.getDatabase 或更改服务器上的一些设置来获取数据库的句柄。看看thisthisthisthis
  • 客户端数据库副本上肯定存在设置文档吗?

标签: xpages lotus-notes lotus-domino access-control xpages-ssjs


【解决方案1】:

只有当此语句为真时,您的 ECRDB 变量才会初始化:

sessionScope.containsKey("ECRMainDBPath") && sessionScope.containsKey("ECRDataRepPath")

在调用 ECR() 函数之前仔细检查您的 sessionScope 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 2023-04-04
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多