Essa validação é algo muito importante, para um usuário não sobescrever o que o outro acabou de fazer e também para evitar conflitos em geral.
Bom, vamos lá.
Após já ter um NotesXspDocument definido em Data da XPage ou Custom Control, vá em eventos da página, entre no nome definido em Data por você (por padrão, document1) e então no evento "postOpenDocument". Apenas insira um evento com o seguinte código:
viewScope.acessado = @Now();
Agora crie um validator (validateExpression) em apenas UM dos campos da página. Em expression insira o seguinte código:
if(!document1.isNewNote()){
var modificado:Date = document1.getDocument().getLastModified().toJavaDate();
var acessado:Date = viewScope.acessado;
return modificado.getTime() < acessado.getTime();
}
else{
return true;
}Agora vá em message do validator e selecione Compute value. Apenas insira o seguinte código (modificando a mensagem, caso queira):
var modificado:Date = document1.getDocument().getLastModified().toJavaDate(); return "O documentou foi modificado por outro usuário em " + modificado.toString() + ", atualize a página para evitar conflitos!";
Pronto! Agora, caso um usuário abra a página e enquanto ele edita um outro salvou, o validator irá validar isso e avisá-lo. Lembrando, é claro, que deve-se ter um Error Message vinculado ao campo ou um Error Messages na página.
Obrigado. Que bom que tenha gostado :)
ResponderExcluirBem, sobre o Javascript, é o seguinte: existe o Javascript propriamente dito (aquele que roda no navegador) e XPages usa Javascript Server-Side, que é uma adaptação desse Javascript com a adição de classes Java e outras coisas, que faz as funções do lado servidor. Quando você vai definir o evento de um botão ou algo do tipo, tem uma aba com qual tipo de evento você deseja colocar: Client-side (Javascript comum) ou Server-side (que vai rodar no servidor). Você selecionando o Client-side, você pode colocar qualquer função normal de Javascript, como o window.open, por exemplo.
Esse código AbrirPopup('id') é Javascript Client-side? Para você gerar um Javascript Client-side que use informações do Server-side, você deve usar expressões de JSF da forma: #{código}. Em XPages, se você ler o código fonte gerado (XML), você vai ver que os eventos são definidos na forma:
ResponderExcluir#{javascript: [...]}. Se você colocar:
var id = "#{javascript: [código que pega o id]}";
Quando sua página carregar, ele vai gerar algo como:
var id = "FH242B2U324GASDUG823";
Ou seja, ele executa o que você coloca ali e joga o retorno dentro das aspas.
Você pode fazer isso para conseguir esse ID para passar para seu método.
Então você pode fazer a forma que eu falei, para pegar um dado do servidor e usar no javascript client-side.
ResponderExcluir