Question

Je suis nouveau sur Javascript et XPages ici.Je mets à niveau une ancienne application de notes vers xpages.Dans ma page XPage, j'ai un champ, un bouton Enregistrer et un contrôle des messages d'erreur.Le champ est utilisé pour enregistrer la valeur d'un chemin/nom NSF que l'utilisateur a saisi pour être utilisé ultérieurement (par exemple ://SAS/adresse.nsf).Comment puis-je valider si ce chemin/base de données existe ?Le lotusscript précédent est comme ceci (il utilise 2 champs, un pour obtenir le chemin du serveur, l'autre pour obtenir le chemin de la base de données.mais pour la page xpage actuelle, l'exigence est d'utiliser un seul champ) :

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

Dans le champ de la page xpage, j'ai ajouté un validateur validateExpression.Dans la propriété expression, je calcule le SSJS suivant :

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

Dans la propriété de message du validateur, j'ai mis "Impossible de trouver la base de données".

L'erreur que je reçois constamment est la suivante :

  • L'expression n'est pas valide.
  • L'expression n'a pas renvoyé de valeur booléenne.

Aucun moyen de réparer cela?Est-ce une mauvaise utilisation du validateur ?J'ai déjà testé avec une base de données locale et une base de données sur un autre serveur.Aucun ne semble fonctionner.Toutes ces bases de données que j'ai essayées, j'avais des droits d'accès.

Était-ce utile?

La solution

Vous devez probablement utiliser SessionAssigner afin d'ouvrir la base de données comme signataire de la XPage - au lieu d'aussi anonyme (si vous n'êtes pas connecté).En outre, envisagez d'ajouter essayer / attraper votre dbdir.opendatabase () afin de prendre des erreurs ouvrant une base de données avec un chemin non valide.

Aussi, remarquez que le validateur ValidateExpression doit renvoyer un Booléen True ou False.Dans votre cas, dbdir.opendatabase () retournera NULL si la base de données ne peut pas être ouverte - ce qui signifie que dB.isopen () ne fonctionnera pas à fonctionner car elle ne peut pas fonctionner sur un objet NULL.

Vous pouvez envisager d'utiliser le validateur CustomValidator qui doit renvoyer un message d'erreur (et non un booléen vrai ou faux).

J'espère que cela peut vous aider à compléter la validation.

Autres conseils

Utilisez le bloc try/catch pour tenter d’ouvrir la base de données.Si tout va bien, retournez simplement true dans le bloc try.Le bloc Catch renverra false, ce qui gérera la plupart des échecs possibles :mauvais serveur, connexion interrompue, chemin invalide, aucun accès, etc.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top