Domanda

Sono nuovo a JavaScript e Xpages qui. Sto aggiornando una vecchia applicazione Notes a Xpages. Nella mia xpage ho un campo, un pulsante Salva e un controllo dei messaggi di errore. Il campo viene utilizzato per salvare il valore di un percorso / nome NSF che l'utente digitato per essere utilizzato in seguito (E.G: //Sas/address.nsf). Come posso convalidare se esistono quel percorso / database? Il precedente LotusScript è come questo (utilizza 2 campo, uno per ottenere il percorso del server, l'altro per ottenere il percorso DB. Ma per la Xpage corrente, il requisito è utilizzare 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
.

Nel campo nella XPage, ho aggiunto un validatore validatoExpression. Nella proprietà di Expression, calcolo i seguenti SSJS:

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

Nella proprietà del messaggio del validatore, ho inserito "Impossibile trovare il database".

L'errore che continuo a ricevere è:

    .
  • l'espressione non è valida.
  • espressione non ha restituito un valore booleano.

Un modo per risolvere questo problema? È l'uso sbagliato del validatore? Ho già testato con database e database locale su altri server. Nessuno sembra funzionare. Tutti quei database ho provato ho avuto diritti di accesso a loro.

È stato utile?

Soluzione

Dovresti probabilmente utilizzare SessionAssigner per aprire il database come firmatore della Xpage - anziché come anonimo (se non si è registrati).Inoltre, prendere in considerazione l'aggiunta di provare / cattura attorno al tuo dbdir.opendatabase () per catturare errori aprendo un database con un percorso non valido.

Inoltre, si noti che il validatore di validateexpression deve restituire un booleano vero o falso.Nel tuo caso DBDIR.OpenDatabase () restituirà NULL se il database non può essere aperto, il che significa che DB.ISOPEN () non funzionerà poiché non funzionerà poiché non può funzionare su un oggetto nullo.

È possibile considerare l'utilizzo del validatore personalizzato che deve restituire un messaggio di errore (e non un booleano vero o falso).

Spero che questo possa aiutarti a completare la convalida.

Altri suggerimenti

Utilizzare il blocco Try / Catch per tentare di aprire il database.Se tutto è ok, restituisci true nel blocco Try.Il blocco di cattura restituirà False, cosa gestirà la maggior parte dei possibili fallimenti: server errato, connessione interrotta, percorso non valido, nessun accesso, e così via.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top