Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Objetivo

O objetivo deste documento é mostrar ao usuário como criar um formulário, por meio do VsScripter, para coleta de dados após a inclusão de um registro no banco de dados.

Como será feito

Neste exemplo, o formulário será executado após a inclusão de um registro na tabela Tomadores, no menu “Cadastros Gerais” -> “Tomadores”. 

Os dados serão gravados em uma tabela criada pelo usuário, por meio do Person, e deverá possuir a estrutura abaixo:

Campos:

  • INSCRICAO - campo texto com 14 posições;

  • PERGUNTA1 - campo texto com 70 posições;

  • PERGUNTA3 - campo Lista de Opções, com opções: (1a Opção, 2a Opção, 3a Opção, 4a Opção);

  • PERGUNTA4 - campo Sim/Não; e

  • PERGUNTA5 - campo data/hora;

Caso o leitor ache necessário, poderá acessar a documentação do Person para dirimir dúvidas na criação da tabela de exemplo. Person - Criando campos, tabelas e consultas personalizadas

Baseado na documentação do Person acima e para finalizar o exemplo aqui proposto, é solicitado do usuário que crie a tabela U_COLETADADOS conforme estrutura apresentada.

Para iniciar o desenvolvimento do exemplo, o usuário deve abrir o “Cadastro de Tomadores”. Nesse cadastro, acessar o menu “Evento via Script” e em seguida o submenu “Antes de Salvar”, conforme figura abaixo:

O evento escolhido para o desenvolvimento do exemplo é o “Antes de Salvar”, pois este permitirá diferenciar se o registro está sendo inserido ou atualizado. A ação tomada ocorrerá apenas se for um evento de inclusão de dados. Caso seja atualização, o VsScripter não atuará. O editor do VsScripter será mostrado, confirme figura abaixo:

A “unit” principal do VsScripter é o uPrinc. Esta unidade não suporta componentes visuais. Assim, será necessário criar um formulário, onde os campos serão colocados. Para criar um novo formulário, escolher o menu “File” e, em seguida, escolher o menu “New Form”.

O novo formulário será criado e ficará na próxima aba, a direita da “unit” uPrinc, com o nome Unit1, conforme abaixo:

A esquerda do formulário está o “Object Inspector” que possui as propriedades do objeto em foco. A propriedade “Name” deve ter seu valor alterado para “frmColetaDados”.

Clicar no botão que possui um ícone que representa um disquete para salvar o formulário, ou executar o atalho “CTRL+S”. O nome da “unit” deve ser uColetaDados.

A direita do formulário frmColetaDados, estão todos os componentes visuais “Tool Palette” que podem ser colocados no formulário e usados no VsScripters.

Para este exemplo, serão utilizados os componentes abaixo: 

Componente

Quantidade

TLabel (rótulos com os nomes dos campos)

4

TEdit (entrada de texto, número e símbolos)

1

TComboBox (escolha de opções pré-definidas)

2

TVsDateTime (informar data e hora, atuais ou não)

1

TButton (botão programável)

1

O formulário pode ter esses itens na posição que o usuário desejar. Para este exercício didático, a disposição dos componentes visuais no formulário ficaram conforme figura abaixo:

Na sequência respectiva, os campos TEdit1, TComboBox1, TComboBox2 e VsDateTime1, TButton1 devem ser renomeados para: campo1; campo2; campo3; campo4; btnGravar.

Para tanto, bastará mudar a propriedade “Name” de cada componente visual para os valores respectivos sugeridos. A propriedade “Name” pode ser localizada colocando o componente visual em foco. A mesma será mostrada na aba do “Object Inspector”, conforme foi mostrado no exemplo acima para mudança do nome do formulário.

Da mesma forma, respectivamente, os rótulos (TLabel1 a TLabel4) devem ter sua propriedade “Caption” alterada para: Campo 1 - Texto(70); Campo 2 - Opções; Campo 3 - Sim/Não; Campo 4 - Data/Hora.

A propriedade “caption” do btnGravar também deve ser mudada para “&Gravar”, a fim de facilitar o entendimento do operador, sobre o que será executado no momento do acionamento do botão. O evento ainda será programado. Por enquanto, apenas o rótulo(título) do botão será mudado.

Com a tecla F12, é possível mudar entre Formulário (componentes visuais) e código do script na “unit”.

Ao mudar para o código do script, deve ser mostrado algo próximo ou idêntico ao código abaixo:

{$FORM TfrmColetaDados, uColetaDados.sfm}

uses
  Classes, Graphics, Controls, Forms, Dialogs, VsEditAl, VsEdRigh, VsDate,
  VsDateTime, StdCtrls, VsCombo;

Para a manipulação dos dados, será criada uma variável que será do tipo TClientDataSet.

O código abaixo deve ser inserido logo após as “units” declaradas em “uses”.

var
   Cds : TClientDataSet;

 

Alterar para a aba uPrinc, onde será criado o formulário “form”, o qual receberá todos os elementos de “frmColetaDados”.

Abaixo das declarações das “units” em uso, no “uses”, digitar o código abaixo:

var                       
  form : frmColetaDados;

Assim, o objeto “form” será declarado e o mesmo será do tipo “frmColetaDados”, recebendo todos os elementos definidos nele.

O nome do formulário padrão onde o “Cadastro de Tomador” ocorre é “FFormPadraoRHTOMADOR”. Para saber como descobrir o nome dos formulários utilizados pelos sistemas, utilizar a documentação Descobrindo o nome do formulário a ser manipulado  

Existe uma forma de verificar se o formulário está em modo de inclusão de registro (registro novo). Para tanto, é utilizada a variável “incluindo”, que possuirá um valor do tipo “True” ou “False”.

Caso o valor seja “True”, o formulário estará em modo de inclusão de novo registro. A seguir, será utilizada a condicional “if” para testar se o formulário está em modo de inclusão de dados ou não, conforme código abaixo:

if (FFormPadraoRHTOMADOR.Incluindo) then
Begin
  //iniciar o ciclo do formulário “form” que será destruído ao final
  // cria o formulário
  form := TfrmColetaDados.Create(nil);
  try
    // se a resposta que vier do formulário for a “mrok”, significa que o usuário // executou a gravação dos dados coletados.
    if (form.Showmodal = mrok) then
       showMessage('Coleta de dados finalizada');  

  finally                    
     // finalizando o ciclo de vida do formulário “form”
     form.free;
  end;
end;

No “script” acima, se o “Cadastro de Tomadores” estiver em modo de inclusão de dados, ou seja, se um novo tomador estiver sendo incluído, um formulário contendo os campos personalizados será mostrado para que o operador do sistema informe esses dados e, logo em seguida, os grave na tabela personalizada “U_COLETADADOS”.

O próximo passo é a criação do “script” do botão de gravação de dados na aba “frmColetaDados”.

Para tanto, será necessário mudar para a aba em questão e colocar o botão “Gravar” em foco, clicando no mesmo. A esquerda, na área do “Object Inspector”, escolher a aba “Events” e clicar duas vezes no evento chamado “onClick”.

Será criada a “procedure” abaixo:

procedure btnGravarClick(Sender: TObject);
begin
end;

Entre as instruções “begin” e “end;”, será necessário digitar/colar o “script” abaixo:

   // Cria o objeto cds que será o Client Data Set que permitirá a manipulação
   // dos dados
   cds := TClientDataSet.Create(nil);

   // inicia o ciclo de vida do cds
   try
    // configura o cds para manipular os dados da tabela "U_COLETADADOS",
    // permitindo a edição desses dados
    dmConexao3c.GetDspEdicao(cds, 'U_COLETADADOS', true);

    // abre o objeto cds conforme configurado acima
    cds.Open;

    // diz ao cds que crie uma área para inclusão dos dados que serão gravados
    // posteriormente
    cds.Append;

    // atribui um número de ID único e sequencial ao campo "U_COLETADADOS_ID"
    cds.FieldByName('U_COLETADADOS_ID').value :=
                                  dmConexao3c.QueryPegaCampo('SEL_PADRAO_COM_WHERE',
                                  'MAX(U_COLETADADOS_ID)',
                                  ['?', '1:s', 'U_COLETADADOS', '?', '2:s', '0=0'],
                                  [ftString, ftString], [20, 100])+1;

    // atribui o valor do campo "INSCRICAO", que está na tela de cadastro do
    // tomador ao campo "INSCRICAO" da tabela "U_COLETADADOS". Esta será a
    // chave de relacionamento entre as duas tabelas.
    cds.FieldByName('INSCRICAO').value := FFormPadraoRHTOMADOR.ValorNaTela('INSCRICAO');

    // atribui ao campo "PERGUNTA1" o valor em tela digitado pelo usuário em
    // campo1
    cds.FieldByName('PERGUNTA1').value := campo1.Text;

    // atribui ao campo "PERGUNTA3" o valor em tela selecionado pelo usuário
    // em campo2
    cds.FieldByName('PERGUNTA3').value := campo2.Items[campo2.ItemIndex];

    // atribui ao campo "PERGUNTA4" o valor em tela digitado pelo usuário em
    // campo3. Neste caso, apenas a primeira letra é necessária.
    cds.FieldByName('PERGUNTA4').value := copy(campo3.Items[campo3.ItemIndex], 0, 1);

    // atribui ao campo "PERGUNTA5" o valor em tela digitado pelo usuário em
    // campo4
    cds.FieldByName('PERGUNTA5').value := campo4.DataHora;

    // informa ao cds que é preciso gravar os valores atribuídos aos campos,
    // que estão em memória, para a tabela "U_COLETADADOS"
    cds.post;

    // aplica todas as atualizações feitas
    dmConexao3c.CDSApplyUpdates([cds]);

  finally
    // finaliza o ciclo de vida do objeto cds
    cds.Free;

    // retorna a constante mrOk, informando que o usuário pressionou o botão
    // Gravar
    ModalResult := mrOk                          

end; 

Clicar no ícone que representa dois disquetes pretos para salvar todas as alterações, ou utilizar o atalho “CTRL+SHIFT+S”.

Para identificar nomes de campos e estrutura das tabelas dos sistemas, siga os passos na documentação Descobrindo informações sobre os campos dos formulários  

Testando a inclusão de dados por meio do VsScripter

Fechar o editor do “VsScripter”. Caso seja solicitado a salvar alguma alteração, o usuário deverá proceder com o salvamento.

No “Cadastro de Tomadores”, adicionar um tomador fictício para execução dos testes. Quando o botão de Salvar for clicado ou o atalho “CTRL+S” for acionado, será aberto o formulário “frmColetaDados” contendo os campos relativos a tabela “U_COLETADADOS” do presente exemplo.

Preencher os dados e clicar em Gravar. O formulário automaticamente será fechado após a gravação dos dados e a mensagem abaixo será mostrada:

 

Vale ressaltar que o exemplo aqui mostrado serve para qualquer outro cadastro dos sistemas.

Para verificar o que foi gravado, o usuário poderá fazer uso normal do Folha e acessar a tabela “U_COLETADADOS”, por meio do menu “Tabelas Personalizadas” -> “Tabela para coleta de dados Antes de Salvar”, conforme abaixo:

Será aberto o formulário de consulta a seguir:

  • No labels