Validação utilizando um formulário personalizado

É possível pelo VsScripter incluir um novo formulário para ser chamado a fim de atender uma necessidade específica do evento que está sendo implementado. Isso pode ser usado, por exemplo, se o usuário pediu para salvar uma informação e conforme alguma regra específica da empresa um determinado campo precisa ser informado e não está.

Pode-se nesse caso criar um formulário com esse(s) campo(s), carregar informações iniciais e criar validações para que só feche o formulário seguindo as regras definidas, seja com um resultado de confirmação das informações ou cancelamento.

Como exemplo, supomos abaixo a personalização do evento “Antes de salvar” do cadastro de “Responsáveis pelo CAGED” do software “Folha” que tem um campo chamado “AUTORIZACAO”, supomos a personalização que obrigue a informação como válida sempre com 7 caracteres e não menos que isso.

Após abrir a tela do editor do script acesse o menu “File” - “New Form”.

Será apresentado um novo formulário conforme a imagem abaixo.

Ao lado esquerdo da imagem acima é possível identificar as propriedades do formulário, o importante para podermos chamar o formulário na sequencia é definir a propriedade “Name” com um nome a ser chamado na sequência. Para esse exemplo será definido o nome como “FormValidacao”.

Após definir a propriedade “Name” a sugestão é que seja salvo esse novo formulário, para isso basta clicar em “Salvar” no editor VsScripter. O “Nome do arquivo” definido ao salvar também é importante, pois precisará ser adicionado como uses na unit que esse formulário será chamado. Para esse exemplo o nome desse formulário será definido como “uFormValidacao”.

Após salvo, o formulário pode receber as adequações que forem necessárias, seja mudando suas propriedades, como “Caption”, “Position” e “BorderIcons” entre outras. Também é possível arrastar componentes do lado direito da tela sobre o formulário e personalizá-lo da forma necessária.

Para esse exemplo a tela ficou conforme figura abaixo:

A fim de auxiliar nos códigos abaixo vale ressaltar o nome de alguns componentes definidos na tela da imagem acima:

  • edAutorizacao: Componente do tipo TEdit no qual se espera a informação do valor correto para a autorização;

  • bConfirmar: Componente do tipo TButton com o captionConfirmar” e com personalização no evento “OnClick”, que ao clicado vai validar se a regra definida ao componente foi obedecida e caso sim retornado a unit principal o retorno “mrOK”;

  • bCancelar: Componente do tipo TButton com o captionCancelar” e com personalização no evento “OnClick”, que ao ser clicado vai cancelar a operação e retornar a unit principal do script o retorno “mrCancel”.

Com base nas explicações acima o código inteiro da do formulário é o abaixo:

{$FORM TFormValidacao, uFormValidacao.sfm} uses Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; procedure bCancelarClick(Sender: TObject); begin ModalResult := mrCancel; end; procedure bConfirmarClick(Sender: TObject); begin if (Length(Trim(edAutorizacao.Text)) = 7) then ModalResult := mrOk else ShowMessage('Informe uma autorização com 7 dígitos'); end; begin end;

Para concluir de forma completa esse exemplo, resta apresentar o conteúdo da unit “uPrinc”. Na “uPrinc” foi necessário adicionar no uses o “uFormValidacao” e declarar uma variável do tipo “TFormValidacao”.

Na sequência , a título de melhorar o exemplo foi resgatado o valor informado ao campo “AUTORIZACAO” através da função “ValorNaTela” e comparado se o valor informado já não cumpre o que se espera como regra personalizada (valor possuir 7 caracteres). Caso não atenda a regra personalizada o objeto do tipo TFormValidacao é criado, o valor atual informado é atribuído ao valor atual do componente, e a tela é apresentada a partir do método ShowModal. Conforme o resultado do ShowModal o novo valor é atribuído em tela ou uma mensagem de erro é adicionada a tela do cadastro não permitindo salvar a informação sem que seja resolvida a situação. No “finally importante destacar a chamada do método “free” evitando que o formulário e seus componentes fiquem em memória.

Segue o código completo do da unit “uPrinc” utilizada nesse exemplo:

uses uFormValidacao; var form : TFormValidacao; cAutorizacao : String; begin cAutorizacao := Trim(FFormPadraoRHCAGEDRESP.ValorNaTela('AUTORIZACAO')) if (Length(cAutorizacao) < 7) then begin form := TFormValidacao.Create(nil); try form.edAutorizacao.Text := cAutorizacao; if (form.Showmodal = mrok) then FFormPadraoRHCAGEDRESP.ValorParaTela('AUTORIZACAO', form.edAutorizacao.Text) else FFormPadraoRHCAGEDRESP.AddErro(FFormPadraoRHCAGEDRESP.EditorDaColuna('EB_','AUTORIZACAO'), 'Autorização deve ter 7 dígitos'); finally form.free; end; end; end;

Evidenciando boas práticas

  1. Uso do ShowModal
    Para o caso dos script´s para eventos em que se espera um resultado a partir da execução de um formulário, é uma boa prática que esse formulário seja aberto com ShowModal. Sem usar o ShowModal e sim o Show corre o risco do usuário clicar fora da tela e o formulário criado ser sobreposto causando dificuldade ao usuário.

  2. Uso do Free
    Importante sempre usar o método “Free”, inclusive quando instanciado formulários. O não uso deixa objetos perdidos em memória que podem causar problemas na utilização do sistema.

 

Para facilitar ainda mais o entendimento, foi produzido um vídeo sobre este conteúdo. Para acessá-lo, utilize o link abaixo:

Treinamento VsScripter - 8 - Criação de Formulários