xpagesはデータベースが存在することを検証します
-
12-12-2019 - |
質問
私はここでjavascriptとxpagesを初めて使用します。古いnotesアプリケーションをxpagesにアップグレードしています。私のxpageには、フィールド、保存ボタン、およびエラーメッセージコントロールがあります。このフィールドは、ユーザーが後で使用するために入力したnsfパス/名前の値を保存するために使用されます(例:://SAS/アドレス。nsf)。そのパス/データベースが存在するかどうかを検証するにはどうすればよいですか?前のlotusscriptは次のようなものです(1つはサーバーパスを取得するために、もう1つはdbパスを取得するために2つのフィールドを使用します。ただし、現在のxpageの場合、要件は1つのフィールドのみを使用することです):
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
Xpageのフィールドに、validateExpressionバリデータを追加しました。Expressionプロパティで、次のSSJSを計算します:
var dbdir:NotesDbDirectory = session.getDbDirectory(null);
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath"));
return db.isOpen();
バリデータのメッセージプロパティに、「データベースが見つかりません」と入力しました。
私が得続けているエラーは次のとおりです:
- 式が無効です。
- 式はブール値を返しませんでした。
これを修正する方法はありますか?バリデーターの使い方が間違っていますか?私はすでにローカルデータベースと他のサーバー上のデータベースでテストしています。どれも動作しないようです。私が試したすべてのデータベースには、それらへのアクセス権がありました。
解決
匿名として代わりにデータベースをXPageの署名者として開くためにSessionAssignerを使用する必要があります(ログインしていない場合)。また、無効なパスを持つデータベースを開くエラーをキャッチするために、DBDIR.OpenDatabase()の周囲の試し/キャッチを追加することを検討してください。
また、ValidateExpressionバリデータがBoolean TrueまたはFalseを返す必要があることに注意してください。データベースを開くことができない場合は、DBDIR.OpenDatabase()がNULLを返します。
エラーメッセージを返す必要があるCustomValidatorバリデータを使用することを検討することができます(Boolean TrueまたはFalseではなく)
これがあなたが検証を完了するのを助けることができることを願っています
他のヒント
データベースを開こうとする試みのために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
}