Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb
-
Upload
alexandre-de-xango -
Category
Documents
-
view
45 -
download
18
description
Transcript of Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb
quarta‐feira, 15 de abril de 2009
Validação de CPF e CNPJ com Javascript ‐Delphi/Intraweb
por GMotta ZN
Mais um da série ... (da séria série ...)Ok, já fizemos vários artigos sobre como usar Javascript no Intraweb.Tenho gastado tempo registrando essa abordagem por vários motivos:
Um deles é (uma tecla que venho batendo bastante) a importância debuscar um equilíbrio, distribuído responsabilidades entre client‐side eserver‐side (obviamente, me refiro ao contexto restrito os sistemasdesenvolvidos para plataforma web). Um segundo motivo pode ser:“Como fazer isso, se eu uso Delphi/Intraweb?” Na medida em queessa é uma questão que considero possuir alguma relevância. Outromotivo, porem, trata sobre “Qual implicação, ou quais implicações,terei ao percorrer este caminho?” Tenho procurado, nos assuntosabordados, trazer alguns elementos que apontem para a responder aessa questão.
Justamente, esse último ponto, sobre as implicações, ou seja, falarsobre algumas vantagens e desvantagens, é um dos objetivos dessetexto. No Intraweb existem certas particularidades ao se aplicar oJavascript, uma delas é o evento “onSubmit” do form definido numapágina web. Veremos, então, sobre isso mais adiante.
Neste artigo pretendo mostrar também como podemos usar apassagem por parâmetro, de uma função Javascript, para areferência de um objeto “html” de um form no Intraweb. Seguindo ametodologia de ir do mais simples para o mais complexo, iniciaremosnossa parte prática com a criação de uma função para validação nolado cliente. Validação essa para a qual atribuiremos aresponsabilidade de exemplificar esse uso de parâmetros, ao qual mereferi, em Javascript, relacionado aos objetos Intraweb.
Quero usar um exemplo que seja prático, ordinário, para um cenáriode sistemas de informação. Portanto, vamos criar uma função paravalidar CPF, uma outra para validar CNPJ e uma terceira função quevai opcionalmente validar CNPJ, CPF, ou os dois simultaneamente.Desta forma teremos uma função polivalente (a qual servirá para
Groove ZN ‐ byGrooveshark
RSS Feed
0 mais Próximo blog» [email protected] Painel Sair
Estação ZNEstamos estudando e o resultado disso postamos aqui. Sinceramente desejamos que oconteúdo aqui semeado possa ser útil para muitas pessoas.Seja bem‐vindo e fique à vontade para contribuir da forma que puder e quiser.Bola pra frente ... :)
validar ambos os casos), cujo o processamento será realizado no ladodo cliente.
Javascript para validar CNPJ, CPF no Delphi/Intraweb
Inicie um novo projeto Intraweb no Delphi, adicione no IWForm1 umIWEdit e três IWButtons. Em seguida, defina uma área de declaraçõesde constantes e digite conforme ilustrado abaixo:
implementation
uses IWBaseForm;
{$R *.dfm}const AQuebraLinhaJsZN = #13; AFncCriticaCIC = ' function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN +
Blog in English ‐ GoogleTranslator version
Busca no blog:Pesquisar
Conteúdo
Aleatório
Cyber Culture
Games
Multimídia
Música
Programação
WEB
Colaboradores
ralencar
Pedro
Felipe Guerço
Daniel Bezerra
Bruno Lichot
GMotta ZN
Amigos do EstaçãoZN ‐Muito obrigado!
Participar deste siteGoogle Friend Connect
Membros (41) Mais »
Arquivo do blog
► 2011 (6)
► 2010 (2)
▼ 2009 (25)
' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;
AFncCriticaCPF = ' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZnCpfObj.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 9; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 10; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' //alert("O CPF INFORMADO É VÁLIDO."); ' + AQuebraLinhaJsZN + ' return true; ' + AQuebraLinhaJsZN + '} ' + AQuebraLinhaJsZN;
AFncCriticaCNPJ = ' function ZnVerificaCnpj(ZNObjInput){' + AQuebraLinhaJsZN + ' var ZnDigitos, ZnDg, ZnSum, ZnCount;' + AQuebraLinhaJsZN + ' var ZnResult, ZnPos, tamanho;' + AQuebraLinhaJsZN + ' var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' if (ZnAuxCNPJ.length != 14){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZNObjInput.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN +
► Ago (2)
► Mai (6)
▼ Abr (6)
Controle de Versão ‐"Seus problemasacabaram!"
Ajax/JSON & Delphitechnologies–Webbrocker, Intra...
Navegar? Pois é, eupreciso ...
O Cara é o Kutiman
Mídias na Web ‐ Aquestão depropriedadeintelectu...
Validação de CPF eCNPJ com Javascript‐ Delphi/In...
► Mar (5)
► Fev (2)
► Jan (4)
► 2008 (80)
► 2007 (125)
tags
.NET
ADO
AJAX
Apache
Arquitetura de Software
ASP.NET
Audio
Automação OLE
Banco de Dados
BDS
C#
Componentes
' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(0)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;}' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(1)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;}' + AQuebraLinhaJsZN + ' else {' + AQuebraLinhaJsZN + ' return true;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN;
Dando continuidade, para usarmos o que acabamos de definirdevemos usar as propriedades específicas dos componentes Intrawebdestinadas a trabalhar com Javascript. Elas existem tanto no IWForm(Formulário Delphi para web), quanto nos controles, IWControls.
Evento OnCreate do IWFrom1:
Controle de Versão
CSS
Cyber Culture
DBA
Delphi
Diversos
English
Ferramentas Case
Flash
HTML
Humor
IDE
Internet
Internet Explorer
Intraweb
Introdução a Programção
Introdução HarmoniaFuncional
Java
Javascript
JCL
Json
Linq
Linux
Literatura Delphi
Mencoder
Modelagem
Mplayer
Multimidia
Multimídia
Music
MySQL
Música
Navegadores
NetBeans
Novidades
OLE DB
Oracle
procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin (* Atribuindo a propriedade "JavaScript" do IWForm1 as funções que serão processadas pelo browser*) Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));end;
No trecho de código acima, podemos observar, comparando com osexemplos postados nos artigos anteriores, sobre Intraweb eJavascript, que o uso de parâmetros nas funções Javascript parareferenciar os objetos do form (na página html), reduz sensivelmentea o número de linhas. Isso melhora a legibilidade do código,consequentimente aumenta a manutenibilidade do mesmo. Visto que,não precisamos usar o temperamental “document.all” (sensível adiversidade de navegadores). Também não precisamos mais do“document.forms[x]”, isso nos abstém da preocupação emreferenciar o form específico (Lembra, no Intraweb 8, o frameworkpode criar vários forms na mesma página?). Obviamente, isso épossível porque a chamada a função esta sendo feita no mesmo formproprietário do objeto que está sendo passado como argumento. Emoutras palavras: O objeto que está sendo passado como parâmetro nafunção critica CIC 2, está definido no mesmo form no qual a funçãoesta sendo chamada. Entretanto, infelizmente, essa abordagem pode encontrar limitações.Vejamos adiante ....
Sobre as funções de validação de CNPJ e CPF, não estou preocupadocom a otimização da lógica que elas implementam. Basiei‐me emalguns dos milhares de exemplos que podemos encontrar na web.
Partituras
PHP
PL/SQL
POO
RPC
RSS
Script
Shell Script
Sibelius
Slackware
SQL
Subversion
Suporte
SVN
Tableless
Tortoise
Tratamento de Exceções
Técnicas de desenvolvimento
UDF
UML
Variedades
VB6
Vídeo‐Game
WAP
Web
Web 2.0
Web 3.0
Webservice
Windowhttp://www.blogger.com/img/blank.gifs
Windows
Windows API
WML
XML
XSL
Zn Ringtones
ZN Media Player
Com certeza, fiz alguns ajustes. Mas nada que mereça grandeatenção, embora elas funcionem corretamente, no sentido de seremeficientes em alcançarem o objetivo que se propõem. Reiterando, opropósito dessa parte do artigo é exemplificar como resolver viaJavascript uma validação bastante necessária, uma situação comum,presumo, em muitos sistemas (desenvolvidos com Intraweb).
OnClick do IWButton chamar mais de uma função Javascript noevento “onSubmit” do form
Supondo que o IWButton, ou qualquer outro controle que seja, jápossua uma chamada a uma função Javascript. Hipoteticamente,imagine um cenário onde o mesmo IWButton, que vai submeter oform da página web, precisa, no mesmo evento “OnClick”, validar oCIC e fazer qualquer outro tipo de validação.
Note que estou, propositalmente, construindo uma situação onde oclick do botão está relacionado a ação de submeter o form da páginaweb. Além disso, estamos trabalhando com um grau de complexidadeonde você precisa (ou precisará) executar mais de um função emreposta ação do usuário clicar esse botão. O botão “Submit” (nocaso, nosso IWButton1). Ora, grau de complexidade? Isso que vocêdescreveu, Gerson, me parece tão comum! Concordo, é muitocomum se você está trabalhando com outra tecnologia. No Intraweb,lamentavelmente isso não é trivial. Então, prosseguindo, vejamos: Em primeiro lugar, vamos criar asegunda função (a qual será responsável por tornar o valor do IWEdit1obrigatório). Ou seja, para submeter o form da página web, o usuárioserá obrigado a digitar algum valor no IWEdit1. Feito isso, teremosconstruído todos elementos necessários para a experiência que iráconfirmar minha argumentação (assim espero ....). Portanto, naseção “const” (que definimos anteriormente) codificaremos, emforma de outra constante, a string com a função supracitada. Digiteconforme ilustrado abaixo:
AFncValorRequerido = ' function ValorRequerido(){ ' + AQuebraLinhaJsZN + ' var ObjInput = document.getElementById("%s); ' + AQuebraLinhaJsZN + ' var AFriendlyName = "%s"; ' + AQuebraLinhaJsZN + ' if (ObjInput.value == ""){ ' + AQuebraLinhaJsZN + ' alert("É obrigatório o valor para o campo: " + AFriendlyName); ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FD88AA"; ' + AQuebraLinhaJsZN + ' ObjInput.focus(); ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FFFFFF"; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN +
Links
Willian Rodrigues
Web 4
Shimatai
Pensamentos de umProfissional de TI
Malta on Delphi
Linguagem de Máquina
Bruno Lichot ‐ Borland
Atelier das Idéias
Helio Delmiro
Beijo Partido ‐ 10/09/2008
All The Things YouAre ‐ 03/09/2008
Inaiá ‐ 26/05/2007
Um Novo Tempo ‐Música ‐ 20/05/2007
Romã ‐ Música ‐ 17/05/2007
' }' + AQuebraLinhaJsZN;
Em seguida faremos uma pequena modificação na primeira funçãoque criamos, “CriticaCIC”. No caso, ela é a segunda constante dedefinimos para o exemplo anterior, a “AFncCriticaCIC”. Espere, nãoé exatamente isso o que faremos. O que quero realmente fazer écopiar a constante “AFncCriticaCIC”, a partir disso, definir uma novacom o mesmo conteúdo. Porque, desta forma posso fazer asalterações que preciso, sem perder completamente o exemploanterior. Logo, assim sendo, quem estiver acompanhando este artigopoderá facilmente testar e verificar a diferença entra as duasestratégias (“do grego, "Στρατηγικη"... ...no inglês, "strategy"......no francês, "stratégie"... ZzZzZzZzzzz...... ...Senhor leitor, osenhor está dormindo? Senhor leitor, tenha bondade..”.(Parafraseando Capitão Nascimento)
Prosseguindo (era brincadeira), retomemos: Criaremos então a novaconstante a partir da cópia de “AFncCriticaCIC”:
AFncCriticaCIC2 = ' function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' var ZnNumCic = document.getElementById("%s); ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra
LinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;
Essa nova versão da crítica de “CIC” possui um parâmetro a menos.Eu retirei o argumento referente ao objeto do form (input que recebeo valor digitado do suposto CIC). Já que decidimos não perder o quefoi feito no exemplo anterior, vamos adicionar mais um IWButton. OIWButton4, servirá, nessa segunda parte do artigo, para chamar anova critica CIC (o conteúdo da AFncCriticaCIC2). Feito isso, vamosacrescentar mais umas linhas de código no evento “OnCreate” doIWForm1.
(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: "CNPJ" ou "CPF"'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');
Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');
IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'ValorRequerido() && CriticaCIC(true, true)');
No Intraweb, chamar, efetivamente, no evento “onClick”, mais deum função pode ser feito declarando o nome das funções, juntamentecom o operador lógico adequado, ao caso específico, na propriedade“ScriptEvent” do componente escolhido (No nosso caso o escolhido foio TIWButton). Provavelmente, essa não deve ser a única forma de sefazer isso, essa é apenas uma (suponho ;‐)). Especificamente a que euencontrei no momento para alcançar meu objetivo.
Cabe registrar que, como alternativa, para propriedade“ExtraTagParams” existe um restrição. Só funciona se a ação nãoenvolver o submit do form. Como posso ter certeza do acabei deafirmar?Para exemplificar, respondendo a pergunta anterior, vamos submetero form. Contudo, para isso, precisamos pelo menos processar algo noservidor. Com essa finalidade, codificaremos qualquer coisa dummyno evento OnClick do componente Delphi/Intraweb TIWButton4.Adicione um novo componente, um IWLabel, em seguida, acompanhetrecho de código abaixo:
procedure TIWForm1.IWButton4Click(Sender: TObject);begin IWLabel1.Font.Size := 16; IWLabel1.Caption := Format('Valor digitado válido: %s', [IWEdit1.Text]); ;end;
Veja, como o Intraweb monta a função que submete o form:
var IWLABEL1IWCL = null; var IWBUTTON1IWCL = null; var IWEDIT1IWCL = null; var IWBUTTON2IWCL = null; var IWBUTTON3IWCL = null; var IWBUTTON4IWCL = null; function IWBUTTON4_onclick(event) { return ValorRequerido() && CriticaCIC2(true, true) }
function IWBUTTON4_onclick0(event) {return SubmitClickConfirm('IWBUTTON4','', true, '');}
Ok, finalizamos! Podemos testar, F9 .. e manda ver ...
Prova dos Nove
Considero que terminamos o assunto aqui. Se por acaso você indaquer conferir o que eu afirmei acima prossiga:Agora vamos testar se realmente, de fato, quando esta situaçãoacontece, não é possível ter sucesso usando a propriedade“ExtraTagParams”.Adicionaremos mais um IWButton, no meu exemplo esse será oIWButton5. Retornaremos ao evento “OnCreate” do IWForm1 (Unit1)e codificaremos a chamada ao Javascript de crítica de valorrequerido e validação de CIC, na propriedade ExtraTagParams doúltimo IWButton adicionado. Veja abaixo como ficou:
procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));
(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: CNPJ ou CPF'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');
Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');
IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'return ValorRequerido() && CriticaCIC2(true, true)');
(* testando chamar duas funções Javascript na propriedade ExtraTagParams *)
IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true']));end;
O trecho que acabamos de digitar inicia com o comentário da linha48. Note que fizemos a chamada semelhante ao IWButton4. Da formacomo está agora, funciona perfeitamente. Mesmo que eu faça achamada, no IWButton5, igualzinho a do IWButton4, funciona.
IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC2(true, true)', [UpperCase(IWEdit1.Name)]));
Todavia, se eu envolver o IWButton5 no submit do form teremosfracasso. Babau! A vaca vai pro brejo. Para conferir basta codificar qualquer coisa no evento “OnClick” doIWButton5. Isso irá forçar um submit para que esse código sejaprocessado no servidor. Vou colocar uma dummy aqui ... veja:
procedure TIWForm1.IWButton5Click(Sender: TObject);begin IWLabel1.Caption := IWEdit1.Text; WebApplication.ShowMessage('Se você esta codificando esse exemplo corretamente, '+ 'essa mensagem nunca não vai ser exibida. Jamais será! Garanto (heheh ..).');end;
O Intraweb tenta ter controle total de alguns eventos do objeto formda página html. Isso acontece de forma mais rigorosa no evento“onLoad”. Eu até entendo a razão deles fazerem isso, mas não aconsidero justificável, e justamente por isso discordo desse tipo decontrole. Acho isso extremamente prejudicial ao desenvolvimento desites, sistemas, serviços, web com o Intraweb. Ao mesmo tempo issodemonstra de forma muito clara o quanto esse framework é frágil eimaturo.
Abaixo, o código integral da Unit1, seguido do código da página htmlgerado pelo Intraweb:
unit Unit1;
interface
uses Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWCompEdit, Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton, IWCompLabel;
type TIWForm1 = class(TIWAppForm) IWButton1: TIWButton;
IWEdit1: TIWEdit; IWButton2: TIWButton; IWButton3: TIWButton; IWButton4: TIWButton; IWLabel1: TIWLabel; IWButton5: TIWButton; procedure IWButton5Click(Sender: TObject); procedure IWButton4Click(Sender: TObject); procedure IWAppFormCreate(Sender: TObject); public end;
implementation
{$R *.dfm}const AQuebraLinhaJsZN = #13; AFncCriticaCIC = ' function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;
AFncCriticaCPF =
' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZnCpfObj.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 9; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 10; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' //alert("O CPF INFORMADO É VÁLIDO."); ' + AQuebraLinhaJsZN + ' return true; ' + AQuebraLinhaJsZN + '} ' + AQuebraLinhaJsZN;
AFncCriticaCNPJ = ' function ZnVerificaCnpj(ZNObjInput){' + AQuebraLinhaJsZN + ' var ZnDigitos, ZnDg, ZnSum, ZnCount;' + AQuebraLinhaJsZN + ' var ZnResult, ZnPos, tamanho;' + AQuebraLinhaJsZN + ' var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' if (ZnAuxCNPJ.length != 14){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZNObjInput.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN +
' ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(0)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;}' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(1)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;}' + AQuebraLinhaJsZN + ' else {' + AQuebraLinhaJsZN + ' return true;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN;
AFncValorRequerido = ' function ValorRequerido(){ ' + AQuebraLinhaJsZN + ' var ObjInput = document.getElementById("%s"); ' + AQuebraLinhaJsZN + ' var AFriendlyName = "%s"; ' + AQuebraLinhaJsZN + ' if (ObjInput.value == ""){ ' + AQuebraLinhaJsZN + ' alert("É obrigatório o valor para o campo: " + AFriendlyName); ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FD88AA"; ' + AQuebraLinhaJsZN + ' ObjInput.focus(); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FFFFFF"; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' return true;}' + AQuebraLinhaJsZN;
AFncCriticaCIC2 = ' function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' var ZnNumCic = document.getElementById("%s"); ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;
procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name),
'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));
(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: CNPJ ou CPF'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');
Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');
IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'return ValorRequerido() && CriticaCIC2(true, true)');
(* testando chamar duas funções Javascript na propriedade ExtraTagParams *)
(* IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); *)
IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC2(true, true)', [UpperCase(IWEdit1.Name)]));end;
procedure TIWForm1.IWButton4Click(Sender: TObject);begin IWLabel1.Font.Size := 16; IWLabel1.Caption := Format('Valor digitado válido: %s', [IWEdit1.Text]); ;end;
procedure TIWForm1.IWButton5Click(Sender: TObject);begin IWLabel1.Caption := IWEdit1.Text; WebApplication.ShowMessage('Se você esta codificando esse exemplo corretamente, '+ 'essa mensagem nunca não vai ser exibida. Jamais será! Garanto (heheh ..).');
end;(* esse trecho para Intrweb 8*)initialization TIWForm1.SetAsMainForm;
Abaixo, trecho código Javascript gerado pelo Intraweb comoresultado do processamento do que implementamos em Delphi.
function ZnVerificaCPF (ZnCpfObj){ var gmSort = new Array(ZnCpfObj.value.length); for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} gmSort.sort(); if (gmSort[0] == gmSort[gmSort.length -1]){ alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); return false; } ZnAuxCal = 0; for (ZnCont = 0; ZnCont < 9; ZnCont ++) ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); DgVZn = 11 - (ZnAuxCal % 11); if (DgVZn == 10 || DgVZn == 11) DgVZn = 0; if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) return false; ZnAuxCal = 0; for (ZnCont = 0; ZnCont < 10; ZnCont ++) ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); DgVZn = 11 - (ZnAuxCal % 11); if (DgVZn == 10 || DgVZn == 11) DgVZn = 0; if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ return false;} //alert("O CPF INFORMADO É VÁLIDO."); return true; }
function ZnVerificaCnpj(ZNObjInput){ var ZnDigitos, ZnDg, ZnSum, ZnCount; var ZnResult, ZnPos, tamanho; var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");
if (ZnAuxCNPJ.length != 14){ ZNObjInput.focus(); return false; } var gmSort = new Array(ZNObjInput.value.length); for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} gmSort.sort(); if (gmSort[0] == gmSort[gmSort.length -1]){ alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); return false; }
ZnAuxTamanho = ZnAuxCNPJ.length - 2
ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho); ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho); ZnSum = 0; ZnPos = ZnAuxTamanho - 7; for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){ ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--; if (ZnPos < 2) ZnPos = 9; } ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11; if (ZnResult != ZnDg.charAt(0)){ ZNObjInput.focus(); return false; }
ZnAuxTamanho = ZnAuxTamanho + 1; ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho); ZnSum = 0; ZnPos = ZnAuxTamanho - 7; for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){ ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--; if (ZnPos < 2) ZnPos = 9;}
ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11; if (ZnResult != ZnDg.charAt(1)){ ZNObjInput.focus(); return false;} else { return true; } }
function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ alert("www.estacaozn.blogspot.com verifica CPF/CNPJ"); var CicValidoZn = false; if (ZnCnpjBool && !ZnCpfBool) { if(!ZnVerificaCnpj(ZnNumCic)){ alert("CNPJ Inválido"); return false;} } else if (!ZnCnpjBool && ZnCpfBool){ if (!ZnVerificaCPF(ZnNumCic)){ alert("CPF inválido"); return false; ;} } else { CicValidoZn = ZnVerificaCnpj(ZnNumCic); if(CicValidoZn){ return true;} else{ CicValidoZn = ZnVerificaCPF(ZnNumCic); if(!CicValidoZn){ alert("CIC Inválido") return false;} } } var ZnMsg = ""; if (ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPJ ou CNPJ"; } if (ZnCnpjBool && !ZnCpfBool) { ZnMsg = "CNPJ"; }
if (!ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPF"; } alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value); return true;}
//**************************************//segunda parte do artigo:// OnClick do IWButton chamar mais de uma função Javascript function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ var ZnNumCic = document.getElementById("IWEDIT1"); alert("www.estacaozn.blogspot.com verifica CPF/CNPJ"); var CicValidoZn = false; if (ZnCnpjBool && !ZnCpfBool) { if(!ZnVerificaCnpj(ZnNumCic)){ alert("CNPJ Inválido"); return false;} } else if (!ZnCnpjBool && ZnCpfBool){ if (!ZnVerificaCPF(ZnNumCic)){ alert("CPF inválido"); return false; ;} } else { CicValidoZn = ZnVerificaCnpj(ZnNumCic); if(CicValidoZn){ return true;} else{ CicValidoZn = ZnVerificaCPF(ZnNumCic); if(!CicValidoZn){ alert("CIC Inválido") return false;} } } var ZnMsg = ""; if (ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPJ ou CNPJ"; } if (ZnCnpjBool && !ZnCpfBool) { ZnMsg = "CNPJ"; } if (!ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPF"; } alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value); return true;}
function ValorRequerido(){ var ObjInput = document.getElementById("IWEDIT1"); var AFriendlyName = "CIC: CNPJ ou CPF"; if (ObjInput.value == ""){ alert("É obrigatório o valor para o campo: " + AFriendlyName); ObjInput.style.backgroundColor = "#FD88AA"; ObjInput.focus(); return false; } else { ObjInput.style.backgroundColor = "#FFFFFF"; } return true;}
//*******www.estacaozn.blogspot.com**********
function Validate() { return true;}
tags: BDS, Delphi, Intraweb, Javascript, Técnicas dedesenvolvimento, Web
4 comentários:
usagipan 03/05/09 16:06
Estou começando a trabalhar com Delphi IntraWeb e gosteimuito dos seus posts! Esse é um assunto muito difícil de acharna internet. Obrigada por postá‐los e parabéns pelo site!!! =D
Responder
GMotta ZN 03/05/09 17:44
Obrigado pelo feedback!Mesmo que esse conteúdo sirva apenas pra uma pessoa (o quenão é caso), pra mim, já valeu.Tks!
Responder
wagner_tec 18/05/10 23:00
Muito bom o seu artigoIsso vale para muitos.
Responder
Anônimo 04/10/11 22:50
Excelente,Estou sempre de olho no teu site para procurar assuntos sobreintraweb.Tks.Renato
Responder
Postagem mais recente Postagem mais antiga
Sair
Notifiqueme
Digite seu comentário...
Comentar como: Alexandre (Google)
Publicar Visualizar
Página inicial
Assinar: Postar comentários (Atom)
BlogBlogs.Com.Br