У меня есть 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? Большое спасибо! :)
Доступ к другой БД из 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
Установлен ли документ настроек на копии клиента db? –