我有 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 需要检查哪些因素吗?非常感谢!:)