2012-05-22 3 views
0

저는 javascript와 xpages가 새롭습니다. 이전 메모 응용 프로그램을 xpages로 업그레이드하고 있습니다. 내 xpage에는 필드, 저장 버튼 및 오류 메시지 컨트롤이 있습니다. 이 필드는 사용자가 나중에 사용하기 위해 입력 한 nsf 경로/이름의 값을 저장하는 데 사용됩니다 (예 : //SAS/address.nsf). 해당 경로/데이터베이스가 존재하는지 어떻게 확인합니까? 에서xpages 데이터베이스 유효성 확인

svr$= source.FieldGetText("ServerPath") 
dbsvr$= source.FieldGetText("DBPath") 
Dim db1 As New NotesDatabase(svr$ , dbsvr$) 

If Not db1.IsOpen Then 
Messagebox "Cannot find the database." 
Call source.GotoField("DBPath") 
continue = False 
Exit Sub 
End If 

:이 같은 이전 LotusScript와는 (.이 서버 경로를 얻기 위해이 필드를 사용하여 DB를 경로를 얻을 다른 하나는하지만 현재 xpage를 들어, 요구 사항은 하나 개의 필드 만 사용하는 것입니다) xpage의 필드, validateExpression validator를 추가했습니다. 표현 속성에서 다음 SSJS를 계산합니다.

var dbdir:NotesDbDirectory = session.getDbDirectory(null); 
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath")); 
return db.isOpen(); 

유효성 검사기의 message 속성에 "Can not find database"를 넣습니다. 나는 점점 계속 해요

오류 :

  • 표현이 유효하지 않습니다.
  • 표현식이 부울 값을 반환하지 않았습니다.

이 문제를 해결할 수있는 방법? 유효성 검사기를 잘못 사용 했습니까? 로컬 데이터베이스와 다른 서버의 데이터베이스로 이미 테스트를 마쳤습니다. 아무도 작동하지 않는 것 같습니다. 내가 시도한 모든 데이터베이스에는 그들에게 접근 권한이있다.

답변

1

당신은 아마 XPage의 서명자로 데이터베이스를 열기 위해 sessionAsSigner를 사용해야합니다 - 대신 익명의 (로그인하지 않은 경우). 또한 dbdir.OpenDatabase() 주위에 try/catch를 추가하여 유효하지 않은 경로로 데이터베이스를 여는 오류를 catch하는 것이 좋습니다.

는 또한, validateExpression 검사기는 부울 true 또는 false를 반환해야한다는 것을 알 수 있습니다. 귀하의 경우 dbdir.openDatabase()는 데이터베이스를 열 수 없으면 null을 반환합니다. 즉, db.isOpen()은 null 객체에서 작동 할 수 없으므로 작동하지 않습니다.

는 오류 메시지 (그리고 참 또는 거짓 부울)을 반환해야합니다 직접 CustomValidator 유효성 검사기를 사용하여 고려할 수 있습니다.

인증을 완료하는 데 도움이되기를 바랍니다.

0

데이터베이스를 여는 데 try/catch 블록을 사용하십시오. 모든 것이 정상이면 try 블록에서 true를 반환합니다. catch 블록은 잘못된 서버, 잘못된 연결, 잘못된 경로, 액세스 없음 등 대부분의 가능한 오류를 처리 할 false를 반환합니다.

try {
// open database here and touch some property, doc count, for example
return true;
} catch (e) {
return false; // failed to open database
}