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 caption “Confirmar” 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 caption “Cancelar” 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
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.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: