0

私はここでjavascriptとxpagesを初めて使用します。古いメモ アプリケーションを xpages にアップグレードしています。私の xpage には、フィールド、保存ボタン、およびエラー メッセージ コントロールがあります。このフィールドは、後で使用するためにユーザーが入力した nsf パス/名前の値を保存するために使用されます (例: //SAS/address.nsf)。そのパス/データベースが存在するかどうかを検証するにはどうすればよいですか? 以前の lotusscript は次のようになっています (2 つのフィールドを使用します。1 つはサーバー パスを取得するため、もう 1 つは db パスを取得するためです。ただし、現在の 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 バリデーターを追加しました。式プロパティでは、次の SSJS を計算します。

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

バリデーターのメッセージ プロパティに、「データベースが見つかりません」と入力しました。

私が得ているエラーは次のとおりです。

  • 式が無効です。
  • 式はブール値を返しませんでした。

これを修正する方法はありますか?バリデーターの間違った使い方ですか?私はすでにローカルデータベースと他のサーバー上のデータベースでテストしています。どれも機能していないようです。私が試したすべてのデータベースには、それらへのアクセス権がありました。

4

2 に答える 2

1

匿名 (ログインしていない場合) ではなく、XPage の署名者としてデータベースを開くには、おそらく sessionAsSigner を使用する必要があります。また、無効なパスでデータベースを開く際のエラーをキャッチするために、dbdir.OpenDatabase() の周りに try/catch を追加することを検討してください。

また、validateExpression バリデーターはブール値の true または false を返す必要があることに注意してください。あなたの場合、データベースを開くことができない場合、 dbdir.openDatabase() は null を返します。つまり、null オブジェクトでは操作できないため、 db.isOpen() は機能しません。

エラーメッセージを返す必要がある customValidator バリデーターの使用を検討できます (ブール値の true または false ではありません)。

これが検証を完了するのに役立つことを願っています。

于 2012-05-22T06:50:12.120 に答える
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
}

于 2012-05-22T07:18:23.323 に答える