[RESOLVIDO] - Soft Delete?

Srs. boa tarde,

Alguém sabe se a opção Soft Delete (marcar como deletado) existe no Scriptcase?

Não existe, se EXCLUIR esta excluído, você poderia implementar manualmente adicionando uma coluna SoftDeleted = DateTime e quando excluir o registro fazer o update com a data timestamp nela, mas teria que controlar isso manual depois em todo o SQL com WHERE isolar os registros deletados.

Então fica a dica para a NETMAKE implementar futuramente!

jcruz,

Uma pergunta: por que implementar isto automaticamente no SC, se isto é inerente ao banco de dados? Todo banco de dados faz a exclusão do registro. Gostaria de entender melhor… eu pelo menos faço como o Jailton falou, crio um campo e tive que criar meu próprio botão EXCLUIR, para colocar a data e hora lá e determinar no WHERE os registros que não tem nada nesse campo.

Nada a ver com SC.

Vai da modelagem como disse o Kleyber.

Implemente isso diretamente no seu banco usando trigers e filtrando adequadamente nas apps.

Vejo com muito pouco uso isso, não creio que seja implementado, nem creio que seria util para todos (quase ninguém)

Concordo que poucos usariam esses recurso visto que normalmente somente grandes corporações tem esse tipo de necessidade.
Mas não seria nenhum absurdo implementar isso como recurso nativo no SC visto que seria uma pequena mudança na classe que controla o CRUD do SC.
Lembrando que o Laravel que é considerado uns dos mais robustos frameworks php do mercado e muito usado no meio corporativo devido a sua estabilidade e escalabilidade já tem essa feature implementada desde a versão 4.

Saulo,

Não discordo de você, mas de qualquer forma estaria mudando a forma do banco de dados trabalhar nativamente. Por isso que eu gosto do SC. Se não tem, não tem, mas me permite incrementar da forma que preciso.

Eu tenho isso implementado a anos, uma simples classe php uma tabela para guardar os ids deletados e nome das tabelas (mais fácil do que criar um campo em cada tabela para controlar a deleção), a classe me incrementa o where necessário para filtrar os deletados e a mesma classe realiza a deleção fantasma.

framework precisa sim de um dicionario de dados inteligente e robusto, melhorias na responsividade, reformulação de mestre/detalhe, correção de falhas no menu e muitos outros bugs.

http://www.scriptcase.com.br/forum/index.php/topic,330.msg892.html#msg892

Haroldo suas sugestões vão fazer aniversário de 10 anos…hehe

Então Kleyber não é questão de mudar a forma do banco trabalhar, isso tem mais haver com regra de negócio, o banco de dados é apenas um repositório de informações.
A opção de softdelete é bem vinda para projetos de empresas que tem como exigência que os dados mesmo que obsoletos sejam mantidos.

Quanto ao SC é como eu disse, e o Haroldo acabou de confirmar, não seria um bicho de sete cabeças para a NM implementar, e concordo que há muitas coisas para serem melhoradas e implementadas antes disso, coisas mais popularmente usadas por todos.

Rapaz, falando assim me dá a sensação que um banco SQL é igual a um DBF… bancos SQL tem regras próprias também, mas não estou aqui pra discutir sobre isso… enfim, cada solução tem seu espaço. Só não vejo o softdelete como relevante para o SC no momento. Mas blz, respeito tua opinião.

Conheci o dbase III -> delete, recall, pack e zap. Maravilha.
Usei o dbase IV -> delete, recall, pack e zap e por fim corrupção do dbf
Veio o clipper -> Corrupção do dbf. Desisti dos dbf´s.

Mas ainda tenho o módulo no php para acessar dbf´s ativo no meu servidor para importar e exportar dados de arquivos dbf´s.
Pena que o acesso pelo php seja desastroso:

Aviso
Não há suporte para índices ou campos memo. Não há suporte para travas também. Dois processos do servidor web concorrentes modificando o mesmo banco de dados normalmente irá arruinar o banco de dados.
Nós recomendamos que você não use seus arquivos dbase como seu banco de dados de produção. Escolha ao invés um servidor SQL real; » MySQL ou » Postgres são escolhas comuns com o php. O suporte ao Dbase esta aqui para permitir a você importar e exportar dados para e a partir do seu banco de dados web, porque o formato é normalmente entendido por planilhas e organizadores do Windows.

Vendo este post fiquei curioso pois sem que ainda tem pessoas que usam o dbase, clipper, xharbour, harbour e afins.
Pesquisei:
dBASE PLUS 10.3 FULL - Download
List Price: $499.00
Our Price: $499.00
http://www.dbase.com/

[b]Mas voltando ao assunto do tópico.
Os SGDB´s da atualidade costumam seguir o padrão SQL.
Até onde eu saiba… Acho que o padrão SQL-92 até o SQL-2003 não suporta nativo o soft delete. Somente o hard delete. Apagou tá apagado.
Logo, mesmo que a Netmake cria-se uma função nativa para soft delete ainda dependeria de campos específicos na sua tabela para que:

  1. O campo fosse reconhecido como marcado para ser apagado;
  2. O campo marcado para ser apagado não entrasse nos selects;
  3. A função para apagar em definitivo pudesse saber quais foram os campos marcados para serem apagados.
    Se é você que cria este campos tudo bem. Mas se for para o scritpcase criar estes campos extras…
    Depois de me acostumar com tanto bug… não iria querer o scriptcase mexendo nas estruturas das minhas tabelas.[/b]

Pensei agora nesta situação.
Aqui vai uma possível solução:

  1. Criar um campo a mais na tabela tipo boleano, integer, char de acordo com sua preferência e com nome sugestivo “deleted”
    Valores permitidos:
    0 não deletado (ativo)
    1 deletado ( não ativo )
  2. Você pode tirar do Form o botão excluir.
  3. Deixe apenas insert e update.
  4. Crie uma caixa de seleção.
    No insert desative a caixa de seleção.
    No update deixe ativo a caixa de seleção com nome “Deletar registro.”
    Se o cliente marcar e der update o registro e “deletado” (fica inativo).
  5. Por último faça todos os selects com um where para mostrar somente os registros que tem o campo deleted marcado como 0.
    Mas lembre-se sua tabela irá inchar com o tempo. Tome as medidas para manter a performance.
  6. Crie um if onde caso o usuário seja administrador possa ver o campo deletado e fazer sua recuperação.
    Se gastar 10 a 20 linhas de programação para fazer isto é muito

Nos ERPS atuais para seguir as novas e exigências PAF, ECF, NFe não tem opção para ‘EXCLUIR’ nada, apenas INATIVAR cada tipo de cadastro: pessoas, produtos, etc., é que como os dados são amarrados nas tabelas de movimento por PK e FK se forem excluídos e depois for gerado algum relatório retroativo de períodos as informações ficariam incosistentes.

Mas por hora para fazer isso no SC como eu e amigos relataram só fazendo ‘manualmente’ esse controle.

Eu mesmo tenho um sistema rodando um um convênio que tive que remover a opção excluir no cadastro de associados e só deixar para marcar ‘cancelado’ para nunca excluírem a ficha do cliente, vendedores, e caso aquele cliente retornar eles reativam.

Alexandre,

Show tua alternativa!!!

Pois é… o Jailton entendeu a questão. Pra alguns casos isso é irrelevante mas principalmente para ERP´s e sistemas gerenciais apagar dados é quase inadmissível, mas entendo que não seja mesmo uma atribuição da NM fazer isso, mas continuo achando que seria muito simples e fácil implementar assim como é simples fazer manualmente como o Jailton exemplificou.

Kleyber acho que você não me entendeu, todos nós sabemos que os bancos relacionais tem suas próprias particularidades e com certeza softdelete não é uma particularidade deles, mas quando digo que o banco é um repositório de informações é porque é isso mesmo que eles são, muitos usam banco de dados para manter todas as regras de negócio do sistema, eu discordo dessa abordagem mas é válida, mas fora esses casos, o que mais fazemos com bancos de dados que não apenas armazenamos informações que serão usadas posteriomente?

Alexandre essa é a idéia, por isso disse para o Kleyber que isso é questão de regra de negócio e não tem muito haver com o banco de dados em sí.

Tranquilo, Saulo.

Legal a discussão de vocês, alguns disseram que sim outros disseram que não, mas aqui na empresa, fizemos um sistema que havia a necessidade de usar o softDelete, como não havia então fizemos na mão esta funcionalidade. O fato é que muitos frameworks já dispõe de recursos como este e na minha opnião o Scriptcase poderia abraçar algumas coisas, só pra facilitar mesmo.