0

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

4

1 回答 1

0

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

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

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

于 2013-07-31T10:51:02.530 回答