0

У меня есть 2 базы данных, одна из которых содержит XPages (Mobile Web App, давайте позвоним эту базу данных A) и еще одну, содержащую документы (база данных b). В моей тестовой единице все работает нормально. Когда я обращаюсь к мобильному веб-приложению, он безупречно передает данные из базы данных B. Но когда я устанавливаю их на сервер клиента, веб-приложение не может получить доступ к базе данных b. Я проверил все записи ACL, и я думаю, что все в порядке. Ошибка на странице в:XPages не может получить доступ к базе данных

 
Error while executing JavaScript computed expression 
Script interpreter error, line=161, col=18: 'ecrDB' is null 
    at [/sjs_common.jss].getCRViewDetails() 

Скрипт, который вызывает ошибку является:

 
function getCRViewDetails(){ 
158: 
159: var ecrDB:NotesDatabase = ECR().mainDB; 
160: var viewDetails:Array = new Array(); 
161: if(ecrDB.isOpen()){ //----- HERE IS THE ERROR LINE! 
162:  //var vw:NotesView = ecrDB.getView("Drafts"); 
163:  var vw:NotesView = ecrDB.getView(mainConstants.VIEW_MAIN); 
164:  var docs:NotesDocumentCollection = vw.getAllDocumentsByKey(session.getEffectiveUserName(), true)  
165:  //var doc:NotesDocument = vw.getFirstDocument(); 
166:  var doc:NotesDocument = docs.getFirstDocument(); 
167:  while(doc != null){ 
168:   viewDetails.push([ 
169:    doc.getItemValueString("ProjectTitle"), 
170:    doc.getItemValueString("CRNumber"), 
171:    doc.getUniversalID() 
172:   ]); 
173:   //print(doc.getItemValueString("ProjectTitle") + ">>" + doc.getItemValueString("CRNumber")); 
174:   //doc = vw.getNextDocument(doc); 
175:   doc = docs.getNextDocument(doc); 
176:  } 
177: } 

Это, как я получить доступ к базе данных б (ECRDB): не

 
function ECR(){ 
    34: 
    35: //private properties and methods --------------------------------- 
    36: 
    37: //Setup document 
    38: var SetupDoc:NotesDocument = database.getProfileDocument("(Setup)",""); 
    39: 
    40: // try to connect to Main DB if the sessionScope.ECRMainDBPath has been set 
    41: if(sessionScope.containsKey("ECRMainDBPath") && sessionScope.containsKey("ECRDataRepPath")){ 
    42:  try{ 
    43:   var ECRDB:NotesDatabase = session.getDatabase(
    44:    SetupDoc.getItemValueString("ECRMainServer"), 
    45:    sessionScope.get("ECRMainDBPath"), 
    46:    false); 
    47:   var DataRep:DataRepository = new DataRepository(
    48:     session.getDatabase(SetupDoc.getItemValueString("ECRMainServer"), 
    49:     sessionScope.get("ECRDataRepPath"), 
    50:     false)); 
    51:   
    52:   var ecrSettingsDoc:NotesDocument = ECRDB.getProfileDocument("eCRSettings",""); 
    53:  }catch(e){ 
    54:   print(e.message); 
    55:   print("Error: Cannot access eCR Main. Please check if Anonymous is at least Reader Access"); 
    56:   ECRDB = null; 
    57:  } 
    58: }else{ 
    59:  //TODO put this in init() 
    60:  if(!(view.getPageName().equals("/login.xsp") || view.getPageName().equals("/selectDivision.xsp"))){ 
    61:   context.redirectToPage("selectDivision.xsp"); 
    62:  } 
    63: } 
    64: 
    65: return { 
    66:  test : "Hello Orga!", 
    67:  
    68:  setupDoc : SetupDoc, //get Setup Document 
    69:  
    70:  getSetupValue : function(fieldName){ 
    71:   return this.setupDoc.getItemValueString(fieldName); 
    72:  }, 
    73:  
    74:  //get ECR Main database (content database) 
    75:  mainDB : ECRDB, 
    76:  
    77:  //get eCRSettings doc from the Main DB 
    78:  mainSettings : ecrSettingsDoc, 
    79:  
    80:  //get full database path (with server) 
    81:  getFullDBPath : function(){ 
    82:   return this.mainDB.getServer() + "!!" + this.mainDB.getFilePath(); 
    83:  }, 
    84:  
    85:  //get Data Repositoy Object 
    86:  getDataRep : function(){ return DataRep; }, 
    87:  
    88:  //get Data Repository //TODO remove this 
    89:  //dataRep : DataRep.getDatabase(), 
    90:  
    91:  //get URL for Data Repository 
    92:  //getDataRepURLPath : DataRep.getURLPath, 
    93:  
    94:  getDBURL : function(){ 
    95:   return context.getUrl().toString().split(view.getPageName())[0]; 
    96:  }, 
    97:  
    98:  getSplittedOrder : function(){ 
    99:   return this.mainSettings.getItemValueString("SplittedOrder"); 
100:  } 
101: }; 
102: }// end of ECR declaration 

у меня нет другая идея, какова возможная проблема с базами данных. Можете ли вы рассказать мне, какие факторы необходимо проверить, чтобы успешно получить доступ к базе данных b? Большое спасибо! :)

+2

Доступ к другой БД из XPage может быть немного утомительным. Возможно, вам придется использовать 'sessionAsSigner.getDatabase' или изменить некоторые настройки на сервере, чтобы получить дескриптор базы данных. Посмотрите на [this] (http://stackoverflow.com/questions/11863496/unable-to-reference-a-view-in-another-database-from-xpinc), [это] (http: // stackoverflow .com/questions/10030470/how-to-use-dblookups-in-different-database), [this] (http://quintessens.wordpress.com/2010/05/17/xpages-unable-to-open- database-on-other-server /) и [this] (http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=B21BE03574FE36AD852578CB0066B5AD). – Naveen

+0

Установлен ли документ настроек на копии клиента db? –

ответ

0

Ваша переменная ECRDB будет инициализировать только если это утверждение верно:

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

DoubleCheck переменные sessionScope перед вызовом функции ECR().

Смежные вопросы