Pregunta

Soy nuevo en JavaScript y Xpages aquí. Estoy actualizando una aplicación de Notas antiguas a Xpages. En mi XPage tengo un campo, un botón Guardar y un control de mensajes de error. El campo se utiliza para guardar el valor de una ruta / nombre de NSF que el usuario se escribió para ser utilizado más adelante (por ejemplo, //sas/address.nsf). ¿Cómo valido si existe esa ruta / base de datos? El LotusScript anterior es así (utiliza 2 Campo, uno para obtener la ruta del servidor, la otra para obtener la ruta de DB. Pero para la XPágina actual, el requisito es usar solo un campo):

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

En el campo en la XPAGE, he agregado un validador de validación de Expresión. En la propiedad Expression, calculo los siguientes SSJS:

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

En la propiedad del mensaje del validador, pongo "No se puede encontrar la base de datos".

El error que sigo siendo es:

  • la expresión no es válida.
  • La expresión
  • no devolvió un valor booleano.

¿Alguna forma de arreglar esto? ¿Es el uso incorrecto del validador? Ya he probado con la base de datos local y la base de datos en otro servidor. Ninguno parece funcionar. Todas aquellas bases de datos que intenté tenían derechos de acceso a ellos.

¿Fue útil?

Solución

Probablemente debería usar SesaSSAsSigner para abrir la base de datos como el firmante de la XPAGE, en lugar de como anónimo (si no está conectado).Además, considere agregar intentos / capturar alrededor de su dbdir.opendatabase () para detectar errores que abren una base de datos con una ruta no válida.

TAMBIÉN, observe que el validador de EXPLESIÓN DE VALIDAPE debe devolver un Booleano Verdadero o Falso.En su caso dbdir.opendatabase () devolverá nulo si no se puede abrir la base de datos, lo que significa que db.isopen () no funcionará ya que no puede operar en un objeto nulo.

Podría considerar usar el validador de CustomValidator, que debe devolver un mensaje de error (y no un booleano verdadero o falso).

Espero que esto pueda ayudarlo a completar la validación.

Otros consejos

Utilice Block intente / captura para intentar abrir la base de datos.Si todo está bien, solo devuelve VERDADERO EN TRY BLOQUE.El bloque de captura volverá a ser falso, lo que manejará la mayoría de los fallos posibles: servidor incorrecto, conexión rota, ruta inválida, sin acceso, etc.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top