Bom dia.
No scriptcase tem algo que mostra quantos usuários estão editando o mesmo registro?
Pois a intenção é bloquear a alteração se um usuário ja estiver editando o registro.
Bom dia.
No scriptcase tem algo que mostra quantos usuários estão editando o mesmo registro?
Pois a intenção é bloquear a alteração se um usuário ja estiver editando o registro.
@Lucila, não tem e pior …
Aplicações de formulário perdem os dados quando o mesmo registro é editado em telas diferentes.
Sempre reclamei a respeito aqui.
Mas tem como você controlar isso via código e alguns macetes.
No Scriptcase, não conheço uma maneira específica para isso, mas no Banco de Dados você pode realizar um INSERT ou UPDATE de forma segura, garantindo que a operação anterior seja concluída antes de prosseguir. Teria que ler a documentação do seu Banco de Dados.
Uma alternativa seria usar uma variável de sessão (variável global) para controlar a edição. Se alguém estiver alterando o registro, você pode bloquear o acesso (mudando uma coluna no banco ou algo parecido) para edição até que a operação seja finalizada ou algo parecido.
Exemplo 1:
Um deles é usar uma controle e vc desenvolve o código de salvamento, verificando claro as questões multiusuário, ou seja só realizando update nos campos que foram efetivamente alterados.
Exemplo 2:
Criar tabela: com campos: tabela, registro_id
Ao entrar no formulário em modo de edição gravar um registro nessa tabela (com nome da tabela, e o registro sendo editado), caso não haja registro para essa tabela com id em questão, se houver, emite mensagem : Registro sendo editado em outro terminal e feche a aplicação.
Claro que outros controles serão necessários, como por exemplo criar um evento que limpe a tabela na madrugada, quando o sistema não é utilizado, e uma tela para manutenção nessa tabela, caso usuário fecha aplicação pelo browser.
Al salvar o registro ou ao sair da aplicação remover o registro em questão.
Exemplo 3:
Tem como 2 ou mais usuários editarem o mesmo registro, mas o controle é mais complexo e requer conhecimento avançado.
Deixe isso a critério do gerenciador.
Não sei qual é o teu banco de dados, mas no PostgreSQL poderia utilizar
algumas abordagens possíveis para resolver o problema,
como utilizar select for update com skip locked.
O select for update é uma forma de realizar um lock pessimista no banco de dados.
Basicamente você está dizendo para o banco de dados que você está recuperando um
registro que será alterado dentro da mesma transação e, por esse motivo,
o banco de dados deve forçar a espera de todos os outros que estão fazendo a mesma
coisa para o mesmo registro.
Exemplo>
CREATE TABLE IF NOT EXISTS queue (
id SERIAL PRIMARY KEY,
status VARCHAR
);
INSERT INTO queue (status)
SELECT ‘NEW’ FROM generate_series(1,10000);
begin transaction
SELECT *
FROM queue as queue1
JOIN queue as queue2
ON queue1.id = queue2.id
WHERE queue2.status = ‘NEW’
ORDER BY queue1.id
LIMIT 1
FOR UPDATE OF queue1 SKIP LOCKED;
UPDATE queue SET status = ‘DONE’ WHERE id = :id AND status = ‘NEW’;
(:id precisa ser substituído pelo id da linha retornada acima)
commit;
Desde quando um formulário do SCRIPTCASE faz isso?
Segue um roteiro para impedir a edição de um registro já editado ou em edição por outro usuário
Considere as duas tabelas a seguir, que a princípio existem no seu sistema.
Criar 3 aplicações:
1 consulta(grid) com a tabela dados para listar apenas os registros não editados ou editados pelo usuario logado (o campo user update preenchido pelo usuário logado ou vazio);
1 controle que fará a validação:
Se o id selecionado não tem o campo user update preenchido,
Então seta esse campo com o usuário logado (login) e redireciona para o form de edição
Se caso já tiver o campo user update preenchido,
Então exibe uma mensagem de erro (este registro já foi ou está sendo editado)
1 form de edição:
Valida e Edita apenas o registro que tiver o campo user update preenchido pelo usuário atual.