VERIFICAR USUÁRIOS USANDO USANDO UM REGISTRO
Tenho a seguinte situação
Numa retífica é aberto uma OS e colocado as informações do veículo na primeira etapa e após é feito a precificação, inclusão das peças e serviços que serão consumidos na O.S.
Porém, enquanto é feito a precificação outro usuário precisa acessar o registro gerado para ler as informações do veículo. O que está acontecendo é que as vezes esse segundo usuário que acessou, que teria como finalidade apenas visualizar informações, está precificando também ocasionando duas pessoas fazendo a mesma tarefa.
Os itens da precificação estão numa tabela Itens.
O que eu preciso que quando um segundo usuário acessar o registro da tabela de orcamentos eu pudesse verificar se já existe algum usuário e, se sim, qual username está usando esse mesmo registro, para que eu possa bloquear via código a edição do registro que foi carregado apenas para visualização
Não sei se me fiz entender: preciso descobrir se tem alguém usando o registro pai, para impedir edição dos registro Filho.
Uso Sqlserver
Numa retífica é aberto uma OS e colocado as informações do veículo na primeira etapa e após é feito a precificação, inclusão das peças e serviços que serão consumidos na O.S.
Porém, enquanto é feito a precificação outro usuário precisa acessar o registro gerado para ler as informações do veículo. O que está acontecendo é que as vezes esse segundo usuário que acessou, que teria como finalidade apenas visualizar informações, está precificando também ocasionando duas pessoas fazendo a mesma tarefa.
Os itens da precificação estão numa tabela Itens.
O que eu preciso que quando um segundo usuário acessar o registro da tabela de orcamentos eu pudesse verificar se já existe algum usuário e, se sim, qual username está usando esse mesmo registro, para que eu possa bloquear via código a edição do registro que foi carregado apenas para visualização
Não sei se me fiz entender: preciso descobrir se tem alguém usando o registro pai, para impedir edição dos registro Filho.
Uso Sqlserver
Hmmm, isso é uma tarefa mais complexa do que parece e tem várias maneiras de ser feito. Quando passo por situações parecidas, onde é preciso monitorar entidades(que pode incluir registros de várias tabelas), o que faço é um "gerenciador". Tipo, usuário "A" abriu "OS 99" e todos os seus ítens, mando uma mensagem para o gerenciador. Sempre ao abrir a entidade, verifico o gerenciador e se estiver aberto, passa por toda uma regra de negócio para saber o que fazer. Mas é bem complexo fazer isso e muda bastante o modo como a aplicação funciona.
Alterado em 15/05/2025 19:06:44
Pode criar um campo TimeStamp, esse tipo de campo grava automaticamente yyyy-MM-dd HH:mm:ss da ultima edição do registro, ao usuário entrar para ler o registro grave em uma variável o timestamp do registro, antes de salvar a edição verifique se o timestamp continua o mesmo, se sim conclui a edição, se esta com data superior a do momento da leitura significa que algum outro usuário editou o registro enquanto esteve aberto para leitura pro usuário local, então bloqueia a edição.
Sabe KerpLunk eu comecei fazendo pelo teu modo, mas além do trabalho braçal, isso consome recursos. Eu pensei que poderia haver alguma propriedade ou função no próprio SqlServer que me retornasse o usuário que está acessando, editando determinado registro.....
Me viro bem no sqlserver mas confesso que não encontrei nada até hoje que me retorne essa informação.
Tentei com bloqueio pessimista e/ou otimista mas não rolou, pois ele impede a visualização do registro na outra máquina e eu preciso que ele seja visualizado, só não pode ser editado...
Mas vou continuar nessa levada do que já estou fazendo
Me viro bem no sqlserver mas confesso que não encontrei nada até hoje que me retorne essa informação.
Tentei com bloqueio pessimista e/ou otimista mas não rolou, pois ele impede a visualização do registro na outra máquina e eu preciso que ele seja visualizado, só não pode ser editado...
Mas vou continuar nessa levada do que já estou fazendo
Não reparei que era Sqlserver, nesse caso me parece ser a coluna tipo rowversion que aumenta a numeração a cada alteração, que serve tambem.
Faça seu login para responder