O banco de dados validado xpages existe
-
12-12-2019 - |
Pergunta
Sou novo em javascript e xpages aqui.Estou atualizando um aplicativo de notas antigo para o xpages.No meu xpage tenho um campo, um botão salvar e um controle de mensagens de erro.O campo é usado para salvar o valor de um caminho/nome nsf que o usuário digitou para ser usado posteriormente (por exemplo://SAS/endereço.nsf).Como posso validar se esse caminho/banco de dados existe?O lotusscript anterior é assim (usa 2 campos, um para obter o caminho do servidor e outro para obter o caminho do banco de dados.mas para o xpage atual, o requisito é usar apenas um 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
No campo do xpage, adicionei um validador validExpression.Na propriedade expressão, calculo o seguinte SSJS:
var dbdir:NotesDbDirectory = session.getDbDirectory(null);
var db:NotesDatabase = dbdir.openDatabase(document1.getItemValue("dbpath"));
return db.isOpen();
Na propriedade mensagem do validador coloquei "Não foi possível encontrar banco de dados".
O erro que continuo recebendo é:
- A expressão é inválida.
- A expressão não retornou um valor booleano.
Algum jeito de arrumar isso?É o uso errado do validador?Já testei com banco de dados local e banco de dados em outro servidor.Nenhum parece funcionar.Todos os bancos de dados que experimentei tinham direitos de acesso a eles.
Solução
Você provavelmente deve usar sessionAsSigner para abrir o banco de dados como assinante do XPage - em vez de anônimo (se você não estiver logado).Além disso, considere adicionar try/catch em torno de seu dbdir.OpenDatabase() para detectar erros ao abrir um banco de dados com um caminho inválido.
Além disso, observe que o validador activateExpression deve retornar um booleano verdadeiro ou falso.No seu caso, dbdir.openDatabase() retornará nulo se o banco de dados não puder ser aberto - o que significa que db.isOpen() não funcionará, pois não pode operar em um objeto nulo.
Você pode considerar usar o validador customValidator, que deve retornar uma mensagem de erro (e não um booleano verdadeiro ou falso).
Espero que isso possa ajudá-lo a concluir a validação.
Outras dicas
Use o bloco try/catch para tentar abrir o banco de dados.Se tudo estiver bem, basta retornar true no bloco try.O bloco Catch retornará false, o que irá lidar com a maioria das falhas possíveis:servidor errado, conexão interrompida, caminho inválido, sem acesso e assim por diante.
try {
// open database here and touch some property, doc count, for example
return true;
} catch (e) {
return false; // failed to open database
}