Anda di halaman 1dari 21

0

mais Prximoblog ahcsistemas@gmail.com Painel Sair

Estao ZN
Estamos estudando e o resultado disso postamos aqui. Sinceramente desejamos que o
contedo aqui semeado possa ser til para muitas pessoas.
Seja bemvindo e fique vontade para contribuir da forma que puder e quiser.
Bola pra frente ... :)

quartafeira, 15 de abril de 2009

Validao de CPF e CNPJ com Javascript


Delphi/Intraweb

Groove ZN by
Grooveshark

por GMotta ZN
Mais um da srie ... (da sria srie ...)
Ok, j fizemos vrios artigos sobre como usar Javascript no Intraweb.
Tenho gastado tempo registrando essa abordagem por vrios motivos:

Um deles (uma tecla que venho batendo bastante) a importncia de


buscar um equilbrio, distribudo responsabilidades entre clientside e
serverside (obviamente, me refiro ao contexto restrito os sistemas
desenvolvidos para plataforma web). Um segundo motivo pode ser:
Como fazer isso, se eu uso Delphi/Intraweb? Na medida em que
essa uma questo que considero possuir alguma relevncia. Outro
motivo, porem, trata sobre Qual implicao, ou quais implicaes,
terei ao percorrer este caminho? Tenho procurado, nos assuntos
abordados, trazer alguns elementos que apontem para a responder a
essa questo.
Justamente, esse ltimo ponto, sobre as implicaes, ou seja, falar
sobre algumas vantagens e desvantagens, um dos objetivos desse
texto. No Intraweb existem certas particularidades ao se aplicar o
Javascript, uma delas o evento onSubmit do form definido numa
pgina web. Veremos, ento, sobre isso mais adiante.

Neste artigo pretendo mostrar tambm como podemos usar a


passagem por parmetro, de uma funo Javascript, para a
referncia de um objeto html de um form no Intraweb. Seguindo a
metodologia de ir do mais simples para o mais complexo, iniciaremos
nossa parte prtica com a criao de uma funo para validao no
lado cliente. Validao essa para a qual atribuiremos a
responsabilidade de exemplificar esse uso de parmetros, ao qual me
referi, em Javascript, relacionado aos objetos Intraweb.
Quero usar um exemplo que seja prtico, ordinrio, para um cenrio
de sistemas de informao. Portanto, vamos criar uma funo para
validar CPF, uma outra para validar CNPJ e uma terceira funo que
vai opcionalmente validar CNPJ, CPF, ou os dois simultaneamente.
Desta forma teremos uma funo polivalente (a qual servir para

RSS Feed

validar ambos os casos), cujo o processamento ser realizado no lado


do cliente.

Blog in English Google


Translator version
Busca no blog:

Pesquisar
Javascript para validar CNPJ, CPF no Delphi/Intraweb
Contedo
Inicie um novo projeto Intraweb no Delphi, adicione no IWForm1 um
IWEdit e trs IWButtons. Em seguida, defina uma rea de declaraes
de constantes e digite conforme ilustrado abaixo:

Aleatrio
Cyber Culture
Games
Multimdia

implementation

Msica

uses IWBaseForm;

Programao

{$R *.dfm}
const
AQuebraLinhaJsZN = #13;
AFncCriticaCIC =
' function CriticaCIC(ZnNumCic, ZnCnpjBool, Z
nCpfBool){ ' + AQuebraLinhaJsZN +
' alert("www.estacaozn.blogspot.com verifica
CPF/CNPJ");' + AQuebraLinhaJsZN +
' var CicValidoZn = false; ' + AQuebraLinhaJ
sZN +
' ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQueb
raLinhaJsZN +
'
alert("CNPJ Invlido"); ' + AQuebraLin
haJsZN +
'
return false;} ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQ
uebraLinhaJsZN +
'
if (!ZnVerificaCPF(ZnNumCic)){ ' + AQue
braLinhaJsZN +
'
alert("CPF invlido"); ' + AQuebraLinha
JsZN +
'
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 Invlido") ' + AQuebraLinha
JsZN +
'
return false;} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
' var ZnMsg = ""; ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra
LinhaJsZN +
'
ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLin
haJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN
+

WEB

Colaboradores
ralencar
Pedro
Felipe Guero
Daniel Bezerra
Bruno Lichot
GMotta ZN

Amigos do EstaoZN
Muito obrigado!
Participardestesite
GoogleFriendConnect

Membros(41) Mais

Arquivo do blog
2011 (6)
2010 (2)
2009 (25)

' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebr


aLinhaJsZN +
'
ZnMsg = "CPF"; }' + AQuebraLinhaJsZN +
' alert("Valor Validado Ok, " +ZnMsg + ": " +
ZnNumCic.value);' + AQuebraLinhaJsZN +
' return true;} ' + AQuebraLinhaJsZN;
AFncCriticaCPF =
' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebr
aLinhaJsZN +
'
var gmSort = new Array(ZnCpfObj.value.l
ength); ' + AQuebraLinhaJsZN +
' for (i=0; i< ZnCpfObj.value.length; i++){gmS
ort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLin
haJsZN +
' gmSort.sort(); ' + AQuebraLinhaJsZN +
' if (gmSort[0] == gmSort[gmSort.length -1]){
' + AQuebraLinhaJsZN +
'
alert("www.estacaozn.blogspot.com: Os nme
ros so iguais: " + ZnCpfObj.value); ' + AQuebraLi
nhaJsZN +
'
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); ' + AQuebraLin
haJsZN +
' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraL
inhaJsZN +
' 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(Z
nCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN +
' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLin
haJsZN +
' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraL
inhaJsZN +
' DgVZn = 0; ' + AQuebraLinhaJsZN +
' if (DgVZn != parseInt(ZnCpfObj.value.charAt(
10))){ ' + AQuebraLinhaJsZN +
' return false;} ' + AQuebraLinhaJsZN +
' //alert("O CPF INFORMADO VLIDO."); ' + AQ
uebraLinhaJsZN +
' return true; ' + AQuebraLinhaJsZN +
'} ' + AQuebraLinhaJsZN;
AFncCriticaCNPJ =
' function ZnVerificaCnpj(ZNObjInput){' + AQueb
raLinhaJsZN +
'
var ZnDigitos, ZnDg, ZnSum, ZnCount;' +
AQuebraLinhaJsZN +
'
var ZnResult, ZnPos, tamanho;' + AQuebra
LinhaJsZN +
'
var ZnAuxCNPJ = ZNObjInput.value.replace
(/\D+/g, "");' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +
'
if (ZnAuxCNPJ.length != 14){' + AQuebraLin
haJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJsZN +
'
return false;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'
var gmSort = new Array(ZNObjInput.value.le
ngth); ' + AQuebraLinhaJsZN +
' for (i=0; i< ZNObjInput.value.length; i++){g
mSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebr
aLinhaJsZN +
' gmSort.sort(); ' + AQuebraLinhaJsZN +

Ago (2)
Mai (6)
Abr (6)
Controle de Verso
"Seus problemas
acabaram!"
Ajax/JSON & Delphi
technologies
Webbrocker, Intra...
Navegar? Pois , eu
preciso ...
O Cara o Kutiman
Mdias na Web A
questo de
propriedade
intelectu...
Validao de CPF e
CNPJ 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
Automao OLE
Banco de Dados
BDS
C#
Componentes

' if (gmSort[0] == gmSort[gmSort.length -1]){


' + AQuebraLinhaJsZN +
'
alert("www.estacaozn.blogspot.com: Os nme
ros so iguais: " + ZNObjInput.value); ' + AQuebra
LinhaJsZN +
'
return false; ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +
'
ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQue
braLinhaJsZN +
'
ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTama
nho);' + AQuebraLinhaJsZN +
'
ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);'
+ AQuebraLinhaJsZN +
'
ZnSum = 0;' + AQuebraLinhaJsZN +
'
ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJs
ZN +
'
for (ZnCount = ZnAuxTamanho; ZnCount >= 1;
ZnCount--){' + AQuebraLinhaJsZN +
'
ZnSum += ZnDigitos.charAt(ZnAuxTamanh
o - 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)){' + AQuebra
LinhaJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJs
ZN +
'
return false;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +
'
ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebra
LinhaJsZN +
'
ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTama
nho);' + AQuebraLinhaJsZN +
'
ZnSum = 0;' + AQuebraLinhaJsZN +
'
ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJs
ZN +
'
for (ZnCount = ZnAuxTamanho; ZnCount >= 1;
ZnCount--){' + AQuebraLinhaJsZN +
'
ZnSum += ZnDigitos.charAt(ZnAuxTamanh
o - 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)){' + AQuebra
LinhaJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJs
ZN +
'
return false;}' + AQuebraLinhaJsZN +
'
else {' + AQuebraLinhaJsZN +
'
return true;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
' }' + AQuebraLinhaJsZN;

Controle de Verso
CSS
Cyber Culture
DBA
Delphi
Diversos
English
Ferramentas Case
Flash
HTML
Humor
IDE
Internet
Internet Explorer
Intraweb
Introduo a Programo
Introduo Harmonia
Funcional
Java
Javascript
JCL
Json
Linq
Linux
Literatura Delphi
Mencoder
Modelagem
Mplayer
Multimidia
Multimdia
Music
MySQL
Msica

Dando continuidade, para usarmos o que acabamos de definir


devemos usar as propriedades especficas dos componentes Intraweb
destinadas a trabalhar com Javascript. Elas existem tanto no IWForm
(Formulrio Delphi para web), quanto nos controles, IWControls.

Navegadores
NetBeans
Novidades
OLE DB

Evento OnCreate do IWFrom1:

Oracle

Partituras
PHP
procedure TIWForm1.IWAppFormCreate(Sender: TObject
);
begin
(* Atribuindo a propriedade "JavaScript" do IWFo
rm1 as
funes que sero 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 opes CPF e
CNPJ
IWButton1.Caption := 'Valida CPF e CNPJ';
IWButton1.Width := 200;
IWButton1.ExtraTagParams.Add(
Format('onClick=CriticaCIC(%s, %s, %s)', [Uppe
rCase(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)', [Uppe
rCase(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)', [Uppe
rCase(IWEdit1.Name),
'true', 'false']));
end;

PL/SQL
POO
RPC
RSS
Script
Shell Script
Sibelius
Slackware
SQL
Subversion
Suporte
SVN
Tableless
Tortoise
Tratamento de Excees
Tcnicas de desenvolvimento
UDF
UML
Variedades
VB6
VdeoGame

No trecho de cdigo acima, podemos observar, comparando com os


exemplos postados nos artigos anteriores, sobre Intraweb e
Javascript, que o uso de parmetros nas funes Javascript para
referenciar os objetos do form (na pgina html), reduz sensivelmente
a o nmero de linhas. Isso melhora a legibilidade do cdigo,
consequentimente aumenta a manutenibilidade do mesmo. Visto que,
no precisamos usar o temperamental document.all (sensvel a
diversidade de navegadores). Tambm no precisamos mais do
document.forms[x], isso nos abstm da preocupao em
referenciar o form especfico (Lembra, no Intraweb 8, o framework
pode criar vrios forms na mesma pgina?). Obviamente, isso
possvel porque a chamada a funo esta sendo feita no mesmo form
proprietrio do objeto que est sendo passado como argumento. Em
outras palavras: O objeto que est sendo passado como parmetro na
funo critica CIC 2, est definido no mesmo form no qual a funo
esta sendo chamada.
Entretanto, infelizmente, essa abordagem pode encontrar limitaes.
Vejamos adiante ....
Sobre as funes de validao de CNPJ e CPF, no estou preocupado
com a otimizao da lgica que elas implementam. Basieime em
alguns dos milhares de exemplos que podemos encontrar na web.

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 merea grande
ateno, embora elas funcionem corretamente, no sentido de serem
eficientes em alcanarem o objetivo que se propem. Reiterando, o
propsito dessa parte do artigo exemplificar como resolver via
Javascript uma validao bastante necessria, uma situao comum,
presumo, em muitos sistemas (desenvolvidos com Intraweb).

Links
Willian Rodrigues
Web 4
Shimatai
Pensamentos de um
Profissional de TI

OnClick do IWButton chamar mais de uma funo Javascript no


evento onSubmit do form

Malta on Delphi
Linguagem de Mquina
Bruno Lichot Borland

Supondo que o IWButton, ou qualquer outro controle que seja, j


possua uma chamada a uma funo Javascript. Hipoteticamente,
imagine um cenrio onde o mesmo IWButton, que vai submeter o
form da pgina web, precisa, no mesmo evento OnClick, validar o
CIC e fazer qualquer outro tipo de validao.

Atelier das Idias

Note que estou, propositalmente, construindo uma situao onde o


click do boto est relacionado a ao de submeter o form da pgina
web. Alm disso, estamos trabalhando com um grau de complexidade
onde voc precisa (ou precisar) executar mais de um funo em
reposta ao do usurio clicar esse boto. O boto Submit (no
caso, nosso IWButton1). Ora, grau de complexidade? Isso que voc
descreveu, Gerson, me parece to comum! Concordo, muito
comum se voc est trabalhando com outra tecnologia. No Intraweb,
lamentavelmente isso no trivial.
Ento, prosseguindo, vejamos: Em primeiro lugar, vamos criar a
segunda funo (a qual ser responsvel por tornar o valor do IWEdit1
obrigatrio). Ou seja, para submeter o form da pgina web, o usurio
ser obrigado a digitar algum valor no IWEdit1. Feito isso, teremos
construdo todos elementos necessrios para a experincia que ir
confirmar minha argumentao (assim espero ....). Portanto, na
seo const (que definimos anteriormente) codificaremos, em
forma de outra constante, a string com a funo supracitada. Digite
conforme ilustrado abaixo:

All The Things You


Are03/09/2008

AFncValorRequerido =
' function ValorRequerido(){ ' + AQuebraLinha
JsZN +
'
var ObjInput = document.getElementById("%
s); ' + AQuebraLinhaJsZN +
'
var AFriendlyName = "%s"; ' + AQuebraLinh
aJsZN +
'
if (ObjInput.value == ""){ ' + AQuebraLin
haJsZN +
'
alert(" obrigatrio o valor para o camp
o: " + AFriendlyName); ' + AQuebraLinhaJsZN +
'
ObjInput.style.backgroundColor = "#FD88A
A"; ' + AQuebraLinhaJsZN +
'
ObjInput.focus(); ' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'
else { ' + AQuebraLinhaJsZN +
'
ObjInput.style.backgroundColor = "#FFFFF
F"; ' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +

Helio Delmiro
Beijo Partido10/09/2008

Inai26/05/2007
Um Novo Tempo
Msica20/05/2007
Rom Msica17/05/2007

' }' + AQuebraLinhaJsZN;

Em seguida faremos uma pequena modificao na primeira funo


que criamos, CriticaCIC. No caso, ela a segunda constante de
definimos para o exemplo anterior, a AFncCriticaCIC. Espere, no
exatamente isso o que faremos. O que quero realmente fazer
copiar a constante AFncCriticaCIC, a partir disso, definir uma nova
com o mesmo contedo. Porque, desta forma posso fazer as
alteraes que preciso, sem perder completamente o exemplo
anterior. Logo, assim sendo, quem estiver acompanhando este artigo
poder facilmente testar e verificar a diferena entra as duas
estratgias (do grego, ""... ...no ingls, "strategy"...
...no francs, "stratgie"... ZzZzZzZzzzz...... ...Senhor leitor, o
senhor est dormindo? Senhor leitor, tenha bondade...
(Parafraseando Capito Nascimento)
Prosseguindo (era brincadeira), retomemos: Criaremos ento a nova
constante a partir da cpia 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; ' + AQuebraLinhaJ
sZN +
' ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQueb
raLinhaJsZN +
'
alert("CNPJ Invlido"); ' + AQuebraLin
haJsZN +
'
return false;} ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQ
uebraLinhaJsZN +
'
if (!ZnVerificaCPF(ZnNumCic)){ ' + AQue
braLinhaJsZN +
'
alert("CPF invlido"); ' + AQuebraLinha
JsZN +
'
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 Invlido") ' + AQuebraLinha
JsZN +
'
return false;} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
' var ZnMsg = ""; ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra

LinhaJsZN +
'
ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLin
haJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN
+
' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CPF"; }' + AQuebraLinhaJsZN +
' alert("Valor Validado Ok, " +ZnMsg + ": " +
ZnNumCic.value);' + AQuebraLinhaJsZN +
' return true;} ' + AQuebraLinhaJsZN;

Essa nova verso da crtica de CIC possui um parmetro a menos.


Eu retirei o argumento referente ao objeto do form (input que recebe
o valor digitado do suposto CIC). J que decidimos no perder o que
foi feito no exemplo anterior, vamos adicionar mais um IWButton. O
IWButton4, servir, nessa segunda parte do artigo, para chamar a
nova critica CIC (o contedo da AFncCriticaCIC2). Feito isso, vamos
acrescentar mais umas linhas de cdigo no evento OnCreate do
IWForm1.

(* 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, [Upp
erCase(IWEdit1.Name)]));
Self.JavaScript.Add('');
Self.JavaScript.Add('');
Self.JavaScript.Add(Format(AFncValorRequerido, [
UpperCase(IWEdit1.Name),
IWEdit1.FriendlyName]));
Self.JavaScript.Add('//*******www.estacaozn.blog
spot.com**********');
IWButton4.Caption := 'Valor Obrigatrio & Valida
CIC';
IWButton4.Width := 360;
IWButton4.ScriptEvents.Add('onClick').EventCode.
Add(
'ValorRequerido() && CriticaCIC(true, true)');

No Intraweb, chamar, efetivamente, no evento onClick, mais de


um funo pode ser feito declarando o nome das funes, juntamente
com o operador lgico adequado, ao caso especfico, na propriedade
ScriptEvent do componente escolhido (No nosso caso o escolhido foi
o TIWButton). Provavelmente, essa no deve ser a nica forma de se
fazer isso, essa apenas uma (suponho ;)). Especificamente a que eu
encontrei no momento para alcanar meu objetivo.

Cabe registrar que, como alternativa, para propriedade


ExtraTagParams existe um restrio. S funciona se a ao no
envolver o submit do form. Como posso ter certeza do acabei de
afirmar?
Para exemplificar, respondendo a pergunta anterior, vamos submeter
o form. Contudo, para isso, precisamos pelo menos processar algo no
servidor. Com essa finalidade, codificaremos qualquer coisa dummy
no evento OnClick do componente Delphi/Intraweb TIWButton4.
Adicione um novo componente, um IWLabel, em seguida, acompanhe
trecho de cdigo abaixo:

procedure TIWForm1.IWButton4Click(Sender: TObject)


;
begin
IWLabel1.Font.Size := 16;
IWLabel1.Caption := Format('Valor digitado vlid
o: %s', [IWEdit1.Text]); ;
end;

Veja, como o Intraweb monta a funo 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, tr
ue)
}
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 inda
quer conferir o que eu afirmei acima prossiga:
Agora vamos testar se realmente, de fato, quando esta situao
acontece, no possvel ter sucesso usando a propriedade
ExtraTagParams.
Adicionaremos mais um IWButton, no meu exemplo esse ser o
IWButton5. Retornaremos ao evento OnCreate do IWForm1 (Unit1)
e codificaremos a chamada ao Javascript de crtica de valor
requerido e validao 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 opes CPF e
CNPJ
IWButton1.Caption := 'Valida CPF e CNPJ';
IWButton1.Width := 200;
IWButton1.ExtraTagParams.Add(
Format('onClick=CriticaCIC(%s, %s, %s)', [Uppe
rCase(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)', [Uppe
rCase(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)', [Uppe
rCase(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, [Upp
erCase(IWEdit1.Name)]));
Self.JavaScript.Add('');
Self.JavaScript.Add('');
Self.JavaScript.Add(Format(AFncValorRequerido, [
UpperCase(IWEdit1.Name),
IWEdit1.FriendlyName]));
Self.JavaScript.Add('//*******www.estacaozn.blog
spot.com**********');
IWButton4.Caption := 'Valor Obrigatrio & Valida
CIC';
IWButton4.Width := 360;
IWButton4.ScriptEvents.Add('onClick').EventCode.
Add(
'return ValorRequerido() && CriticaCIC2(true,
true)');
(* testando chamar duas funes Javascript na pr
opriedade ExtraTagParams *)
IWButton5.ExtraTagParams.Add(
Format('onClick=return ValorRequerido() && Cri
ticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name),
'true', 'true']));
end;

O trecho que acabamos de digitar inicia com o comentrio da linha


48. Note que fizemos a chamada semelhante ao IWButton4. Da forma
como est agora, funciona perfeitamente. Mesmo que eu faa a
chamada, no IWButton5, igualzinho a do IWButton4, funciona.

IWButton5.ExtraTagParams.Add(
Format('onClick=return ValorRequerido() && Cri
ticaCIC2(true, true)',
[UpperCase(IWEdit1.Name)]));

Todavia, se eu envolver o IWButton5 no submit do form teremos


fracasso. Babau! A vaca vai pro brejo.
Para conferir basta codificar qualquer coisa no evento OnClick do
IWButton5. Isso ir forar um submit para que esse cdigo seja
processado no servidor. Vou colocar uma dummy aqui ... veja:

procedure TIWForm1.IWButton5Click(Sender: TObject)


;
begin
IWLabel1.Caption := IWEdit1.Text;
WebApplication.ShowMessage('Se voc esta codific
ando esse exemplo corretamente, '+
'essa mensagem nunca no vai ser exibida. Jama
is ser! Garanto (heheh ..).');
end;

O Intraweb tenta ter controle total de alguns eventos do objeto form


da pgina html. Isso acontece de forma mais rigorosa no evento
onLoad. Eu at entendo a razo deles fazerem isso, mas no a
considero justificvel, e justamente por isso discordo desse tipo de
controle. Acho isso extremamente prejudicial ao desenvolvimento de
sites, sistemas, servios, web com o Intraweb. Ao mesmo tempo isso
demonstra de forma muito clara o quanto esse framework frgil e
imaturo.
Abaixo, o cdigo integral da Unit1, seguido do cdigo da pgina html
gerado pelo Intraweb:

unit Unit1;
interface
uses
Classes, SysUtils, IWAppForm, IWApplication, IWC
olor, IWTypes, IWCompEdit,
Controls, IWVCLBaseControl, IWBaseControl, IWBas
eHTMLControl, 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, Z
nCpfBool){ ' + AQuebraLinhaJsZN +
' alert("www.estacaozn.blogspot.com verifica
CPF/CNPJ");' + AQuebraLinhaJsZN +
' var CicValidoZn = false; ' + AQuebraLinhaJ
sZN +
' ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQueb
raLinhaJsZN +
'
alert("CNPJ Invlido"); ' + AQuebraLin
haJsZN +
'
return false;} ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQ
uebraLinhaJsZN +
'
if (!ZnVerificaCPF(ZnNumCic)){ ' + AQue
braLinhaJsZN +
'
alert("CPF invlido"); ' + AQuebraLinha
JsZN +
'
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 Invlido") ' + AQuebraLinha
JsZN +
'
return false;} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
' var ZnMsg = ""; ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra
LinhaJsZN +
'
ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLin
haJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN
+
' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CPF"; }' + AQuebraLinhaJsZN +
' alert("Valor Validado Ok, " +ZnMsg + ": " +
ZnNumCic.value);' + AQuebraLinhaJsZN +
' return true;} ' + AQuebraLinhaJsZN;
AFncCriticaCPF =

' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebr


aLinhaJsZN +
'
var gmSort = new Array(ZnCpfObj.value.l
ength); ' + AQuebraLinhaJsZN +
' for (i=0; i< ZnCpfObj.value.length; i++){gmS
ort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLin
haJsZN +
' gmSort.sort(); ' + AQuebraLinhaJsZN +
' if (gmSort[0] == gmSort[gmSort.length -1]){
' + AQuebraLinhaJsZN +
'
alert("www.estacaozn.blogspot.com: Os nme
ros so iguais: " + ZnCpfObj.value); ' + AQuebraLi
nhaJsZN +
'
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); ' + AQuebraLin
haJsZN +
' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraL
inhaJsZN +
' 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(Z
nCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN +
' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLin
haJsZN +
' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraL
inhaJsZN +
' DgVZn = 0; ' + AQuebraLinhaJsZN +
' if (DgVZn != parseInt(ZnCpfObj.value.charAt(
10))){ ' + AQuebraLinhaJsZN +
' return false;} ' + AQuebraLinhaJsZN +
' //alert("O CPF INFORMADO VLIDO."); ' + AQ
uebraLinhaJsZN +
' return true; ' + AQuebraLinhaJsZN +
'} ' + AQuebraLinhaJsZN;
AFncCriticaCNPJ =
' function ZnVerificaCnpj(ZNObjInput){' + AQueb
raLinhaJsZN +
'
var ZnDigitos, ZnDg, ZnSum, ZnCount;' +
AQuebraLinhaJsZN +
'
var ZnResult, ZnPos, tamanho;' + AQuebra
LinhaJsZN +
'
var ZnAuxCNPJ = ZNObjInput.value.replace
(/\D+/g, "");' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +
'
if (ZnAuxCNPJ.length != 14){' + AQuebraLin
haJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJsZN +
'
return false;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'
var gmSort = new Array(ZNObjInput.value.le
ngth); ' + AQuebraLinhaJsZN +
' for (i=0; i< ZNObjInput.value.length; i++){g
mSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebr
aLinhaJsZN +
' gmSort.sort(); ' + AQuebraLinhaJsZN +
' if (gmSort[0] == gmSort[gmSort.length -1]){
' + AQuebraLinhaJsZN +
'
alert("www.estacaozn.blogspot.com: Os nme
ros so iguais: " + ZNObjInput.value); ' + AQuebra
LinhaJsZN +
'
return false; ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +

'
ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQue
braLinhaJsZN +
'
ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTama
nho);' + AQuebraLinhaJsZN +
'
ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);'
+ AQuebraLinhaJsZN +
'
ZnSum = 0;' + AQuebraLinhaJsZN +
'
ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJs
ZN +
'
for (ZnCount = ZnAuxTamanho; ZnCount >= 1;
ZnCount--){' + AQuebraLinhaJsZN +
'
ZnSum += ZnDigitos.charAt(ZnAuxTamanh
o - 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)){' + AQuebra
LinhaJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJs
ZN +
'
return false;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'' + AQuebraLinhaJsZN +
'
ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebra
LinhaJsZN +
'
ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTama
nho);' + AQuebraLinhaJsZN +
'
ZnSum = 0;' + AQuebraLinhaJsZN +
'
ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJs
ZN +
'
for (ZnCount = ZnAuxTamanho; ZnCount >= 1;
ZnCount--){' + AQuebraLinhaJsZN +
'
ZnSum += ZnDigitos.charAt(ZnAuxTamanh
o - 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)){' + AQuebra
LinhaJsZN +
'
ZNObjInput.focus();' + AQuebraLinhaJs
ZN +
'
return false;}' + AQuebraLinhaJsZN +
'
else {' + AQuebraLinhaJsZN +
'
return true;' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
' }' + AQuebraLinhaJsZN;
AFncValorRequerido =
' function ValorRequerido(){ ' + AQuebraLinha
JsZN +
'
var ObjInput = document.getElementById("%
s"); ' + AQuebraLinhaJsZN +
'
var AFriendlyName = "%s"; ' + AQuebraLinh
aJsZN +
'
if (ObjInput.value == ""){ ' + AQuebraLin
haJsZN +
'
alert(" obrigatrio o valor para o camp
o: " + AFriendlyName); ' + AQuebraLinhaJsZN +
'
ObjInput.style.backgroundColor = "#FD88A
A"; ' + AQuebraLinhaJsZN +
'
ObjInput.focus(); ' + AQuebraLinhaJsZN +
'
return false; ' + AQuebraLinhaJsZN +
'
}' + AQuebraLinhaJsZN +
'
else { ' + AQuebraLinhaJsZN +
'
ObjInput.style.backgroundColor = "#FFFFF
F"; ' + 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; ' + AQuebraLinhaJ
sZN +
' ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQueb
raLinhaJsZN +
'
alert("CNPJ Invlido"); ' + AQuebraLin
haJsZN +
'
return false;} ' + AQuebraLinhaJsZN +
' } ' + AQuebraLinhaJsZN +
' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQ
uebraLinhaJsZN +
'
if (!ZnVerificaCPF(ZnNumCic)){ ' + AQue
braLinhaJsZN +
'
alert("CPF invlido"); ' + AQuebraLinha
JsZN +
'
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 Invlido") ' + AQuebraLinha
JsZN +
'
return false;} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
'
} ' + AQuebraLinhaJsZN +
' var ZnMsg = ""; ' + AQuebraLinhaJsZN +
' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra
LinhaJsZN +
'
ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLin
haJsZN +
' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN
+
' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebr
aLinhaJsZN +
'
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 opes CPF e
CNPJ
IWButton1.Caption := 'Valida CPF e CNPJ';
IWButton1.Width := 200;
IWButton1.ExtraTagParams.Add(
Format('onClick=CriticaCIC(%s, %s, %s)', [Uppe
rCase(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)', [Uppe
rCase(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)', [Uppe
rCase(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, [Upp
erCase(IWEdit1.Name)]));
Self.JavaScript.Add('');
Self.JavaScript.Add('');
Self.JavaScript.Add(Format(AFncValorRequerido, [
UpperCase(IWEdit1.Name),
IWEdit1.FriendlyName]));
Self.JavaScript.Add('//*******www.estacaozn.blog
spot.com**********');
IWButton4.Caption := 'Valor Obrigatrio & Valida
CIC';
IWButton4.Width := 360;
IWButton4.ScriptEvents.Add('onClick').EventCode.
Add(
'return ValorRequerido() && CriticaCIC2(true,
true)');
(* testando chamar duas funes Javascript na pr
opriedade ExtraTagParams *)
(* IWButton5.ExtraTagParams.Add(
Format('onClick=return ValorRequerido() && Cri
ticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name),
'true', 'true'])); *)
IWButton5.ExtraTagParams.Add(
Format('onClick=return ValorRequerido() && Cri
ticaCIC2(true, true)',
[UpperCase(IWEdit1.Name)]));
end;
procedure TIWForm1.IWButton4Click(Sender: TObject)
;
begin
IWLabel1.Font.Size := 16;
IWLabel1.Caption := Format('Valor digitado vlid
o: %s', [IWEdit1.Text]); ;
end;
procedure TIWForm1.IWButton5Click(Sender: TObject)
;
begin
IWLabel1.Caption := IWEdit1.Text;
WebApplication.ShowMessage('Se voc esta codific
ando esse exemplo corretamente, '+
'essa mensagem nunca no vai ser exibida. Jama
is ser! Garanto (heheh ..).');

end;
(* esse trecho para Intrweb 8*)
initialization
TIWForm1.SetAsMainForm;

Abaixo, trecho cdigo Javascript gerado pelo Intraweb como


resultado do processamento do que implementamos em Delphi.

function ZnVerificaCPF (ZnCpfObj){


var gmSort = new Array(ZnCpfObj.value.lengt
h);
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 nmeros
so iguais: " + ZnCpfObj.value);
return false;
}
ZnAuxCal = 0;
for (ZnCont = 0; ZnCont < 9; ZnCont ++)
ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnC
ont)) * (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(ZnCon
t)) * (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 VLIDO.");
return true;
}
function
var
var
var
+/g, "");

ZnVerificaCnpj(ZNObjInput){
ZnDigitos, ZnDg, ZnSum, ZnCount;
ZnResult, ZnPos, tamanho;
ZnAuxCNPJ = ZNObjInput.value.replace(/\D

if (ZnAuxCNPJ.length != 14){
ZNObjInput.focus();
return false;
}
var gmSort = new Array(ZNObjInput.value.length
);
for (i=0; i< ZNObjInput.value.length; i++){gmSor
t[i] = ZNObjInput.value.charAt(i);}
gmSort.sort();
if (gmSort[0] == gmSort[gmSort.length -1]){
alert("www.estacaozn.blogspot.com: Os nmeros
so 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; ZnCo
unt--){
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; ZnCo
unt--){
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, ZnCpfBo
ol){
alert("www.estacaozn.blogspot.com verifica CPF/CN
PJ");
var CicValidoZn = false;
if (ZnCnpjBool && !ZnCpfBool) {
if(!ZnVerificaCnpj(ZnNumCic)){
alert("CNPJ Invlido");
return false;}
}
else if (!ZnCnpjBool && ZnCpfBool){
if (!ZnVerificaCPF(ZnNumCic)){
alert("CPF invlido");
return false;
;}
}
else {
CicValidoZn = ZnVerificaCnpj(ZnNumCic);
if(CicValidoZn){
return true;}
else{
CicValidoZn = ZnVerificaCPF(ZnNumCic);
if(!CicValidoZn){
alert("CIC Invlido")
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 + ": " + ZnNum
Cic.value);
return true;}
//**************************************
//segunda parte do artigo:
// OnClick do IWButton chamar mais de uma funo J
avascript
function CriticaCIC2(ZnCnpjBool, ZnCpfBool){
var ZnNumCic = document.getElementById("IWEDIT1")
;
alert("www.estacaozn.blogspot.com verifica CPF/CN
PJ");
var CicValidoZn = false;
if (ZnCnpjBool && !ZnCpfBool) {
if(!ZnVerificaCnpj(ZnNumCic)){
alert("CNPJ Invlido");
return false;}
}
else if (!ZnCnpjBool && ZnCpfBool){
if (!ZnVerificaCPF(ZnNumCic)){
alert("CPF invlido");
return false;
;}
}
else {
CicValidoZn = ZnVerificaCnpj(ZnNumCic);
if(CicValidoZn){
return true;}
else{
CicValidoZn = ZnVerificaCPF(ZnNumCic);
if(!CicValidoZn){
alert("CIC Invlido")
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 + ": " + ZnNum
Cic.value);
return true;}

function ValorRequerido(){
var ObjInput = document.getElementById("IWEDIT1
");
var AFriendlyName = "CIC: CNPJ ou CPF";
if (ObjInput.value == ""){
alert(" obrigatrio 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, Tcnicas de
desenvolvimento, Web

4 comentrios:
usagipan 03/05/09 16:06
Estou comeando a trabalhar com Delphi IntraWeb e gostei
muito dos seus posts! Esse um assunto muito difcil de achar
na internet. Obrigada por postlos e parabns pelo site!!! =D
Responder

GMotta ZN

03/05/09 17:44

Obrigado pelo feedback!


Mesmo que esse contedo sirva apenas pra uma pessoa (o que
no caso), pra mim, j valeu.
Tks!
Responder

wagner_tec 18/05/10 23:00


Muito bom o seu artigo
Isso vale para muitos.
Responder

Annimo 04/10/11 22:50


Excelente,
Estou sempre de olho no teu site para procurar assuntos sobre
intraweb.
Tks.
Renato
Responder

Digiteseucomentrio...

Comentarcomo:

Publicar

Alexandre(Google)

Visualizar

Postagem mais recente

Sair

Notifiqueme

Pgina inicial

Postagem mais antiga

Assinar: Postar comentrios (Atom)

BlogBlogs.Com.Br

Anda mungkin juga menyukai