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.

Foi útil?

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
}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top