Utilizando três camadas
Olá pessoal, meu
nome é Mauricio Junior. Com esse artigo gostaria de mostrar como é fácil depois
da criação do componente, registrar no COM PLUS; utilizando três camadas;
chamar uma função do Visual Basic 6.0 usando o ASP 3.0.
Nos passos
anteriores mostrei como criar STORED PROCEDURE, banco de dados, Global.asa
dentro do Visual Basic 6.0, classes com “functions” e muito mais. Todos os
passos anteriores podem ser encontrados no site www.aspneti.com ou www.juliobattisti.com.br/tutoriais/mauricioborges.
Espero que possa estar ajudando.
Desenvolvi três
páginas básicas para logar no sistema utilizando segurança com os componentes
construídos anteriormente. (Referência 10.1).
|
- frmLogin.asp
-
frmLoginPersistir.asp
-
frmPaginaPrincipal.asp
|
Referência: 10.1
Explicação do
funcionamento de cada página.
frmLogin.asp
Essa página é
responsável por mostrar os campos obrigatórios de preenchimento usuário e
senha. Possui os botões de “Entrar”, “Alterar” e “Sair” dentro da tela. Digitando
os valores, são enviados dados via “POST” para a página “frmLoginPersistir.asp”.
frmLoginPersistir.asp
Depois de enviado
os dados da página “frmLogin.asp” para “frmLoginPersistir.asp”, a mesma é
responsável em criar o objeto da classe “clsSegurança” do Visual Basic 6.0
criado anteriormente, passando os dados necessários para autenticação junto ao
banco de dados, cujo o campo senha está criptografado.
frmPaginaPrincipal.asp
A página
principal é apenas para mostrar todos os menus montados de acordo com as
permissões do usuário. É a página principal do sistema para o acesso às
funcionalidades essenciais.
Codificando páginas ASP
* frmLogin.asp
(Referência 10.2)
|
<html>
<head><title>..::
SISCPE ::..</title></head>
<script
language="javascript">
function
sFoco(){
if
(document.frmLogin.txtUsuario){
document.frmLogin.txtUsuario.focus();
}
}
function
sValidarLogin(){
if
(f_eVazio(document.frmLogin.txtUsuario.value)){
alert(f_Mensagem(1));
document.frmLogin.txtUsuario.focus();
return;
}
if
(f_eVazio(document.frmLogin.txtSenha.value)){
alert(f_Mensagem(1));
document.frmLogin.txtSenha.focus();
return;
}
document.frmLogin.method
= 'post';
document.frmLogin.action
= 'frmLoginPersistir.asp';
document.frmLogin.submit();
}
function
sSair(){
window.close();
}
function
s_AlterarSenha(){
document.frmLogin.method
= 'post';
document.frmLogin.action
= 'frmAlterarSenha.asp';
document.frmLogin.submit();
}
function
enter(codigo){
if
(codigo == 13){
sValidarLogin();
}
}
</script>
<body
topmargin="0" leftmargin="0"
onload="sFoco();">
<form
name="frmLogin">
<table
border="0" cellpadding="0" cellspacing="0"
width="100%" height="100%">
<!--#include
file="../includes/barra_titulo.asp"-->
<tr
align="left">
<td
align="center"><!-- Inicio da Página -->
<table CELLSPACING="1"
cellpadding="0" class="formulario"
width="230px">
<tr>
<th
colspan="4">Login</th>
</tr>
<tr>
<th
width="18">01</th>
<td>
<b> Usuário:</b> <br>
<input name="txtUsuario"
onkeypress="enter(event.keyCode);"
value="<%=Request("txtUsuario")%>"
size="25" style="HEIGHT: 17px">
</td>
<td
rowspan="2" width="40px" valign="middle">
<br> <img
style="background:none" SRC="../images/login.gif"
WIDTH="35" HEIGHT="33">
</td>
</tr>
<tr>
<th
width="18">02</th>
<td>
<b>Senha:</b>
<br>
<input type="password"
onkeypress="enter(event.keyCode);" name="txtSenha"
value="<%=Request("txtSenha")%>"
size="25" style="HEIGHT: 17px">
</td>
</tr>
</table>
<table
class="formulario" cellSpacing="1"
cellPadding="0" width="230px">
<tr>
<th
align="middle">
<input
type="button" value="Entrar" name="btnEntrar"
onclick="sValidarLogin();">
<input
type="button" value="Alterar" name="btnAlterar"
onclick="s_AlterarSenha();">
<input
type="button" value="Sair" name="btnSair"
onclick="sSair()">
</th>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
|
Referência: 10.2
Explicação:
(Referência 10.2)
Essa página
mostra apenas a tela de login onde o usuário entra com usuário e senha para
logar no sistema. Como toda página ASP, possue código javascript para tornar as
funcionalidades mais dinâmicas e especiais ao usuário que está utilizando o
sistema.
A parte em
javascript está dividida em “functions”. (Referência 10.3).
|
<script language="javascript">
function
sFoco(){
if
(document.frmLogin.txtUsuario){
document.frmLogin.txtUsuario.focus();
}
}
function
sValidarLogin(){
if
(f_eVazio(document.frmLogin.txtUsuario.value)){
alert(“Digite o
usuário”);
document.frmLogin.txtUsuario.focus();
return;
}
if
(f_eVazio(document.frmLogin.txtSenha.value)){
alert(“Digite
a senha”);
document.frmLogin.txtSenha.focus();
return;
}
document.frmLogin.method
= 'post';
document.frmLogin.action
= 'frmLoginPersistir.asp';
document.frmLogin.submit();
}
function
sSair(){
window.close();
}
function
s_AlterarSenha(){
document.frmLogin.method
= 'post';
document.frmLogin.action
= 'frmAlterarSenha.asp';
document.frmLogin.submit();
}
function
enter(codigo){
if
(codigo == 13){
sValidarLogin();
}
}
</script>
|
Referência: 10.3
Explicação
Javascript.
Esses códigos
javascript, são apenas detalhes da página, serve para validação de campo e tudo
mais. Procuro explicar tudo dentro da página que não haja dúvidas.
A primeira
function, “sFoco” colocar o foto no campo “txtUsuario” do form. A segunda
function “sValidarLogin” valida os campos da tela, como usuário e senha e no
final mandar os dados via POST para a página “frmLoginPersistir.asp”. A
terceira function “sSair”, tem a funcionalidade de fechar a tela do brownser. A
quarta function “s_AlterarSenha” submete para a página “frmAlterarSenha.asp”. A
quinta e última function da página chama-se “enter”, verifica se o evento do
código é igual a 13, se for, chama a function “sValidarLogin”, ou seja, se o
usuário clicar ENTER, automaticamente é chamada a function para validar o form.
O restante de
código dessa página é HTML com inputs e buttons. Todos os dados digitados serão
enviados para a próxima página.
*
frmLoginPersistir.asp (Referência 10.4)
|
<%
Dim oSeguranca
Dim
vRetUsuarioPerfil
Dim vRetUsuario
Dim vRetPerfil
Dim iLogin
Dim sCoUsuario
Dim sCoSenha
Const
USU_NO_USUARIO_LOGIN = 0
Const
USU_NO_FUNCAO_LOGIN = 1
Const PRF_CO_PERFIL_LOGIN = 0
Const PRF_NO_PERFIL_LOGIN = 1
sCoUsuario = Request("txtUsuario")
sCoSenha =
Request("txtSenha")
set oSeguranca =
Server.CreateObject("CPESeguranca.clsSeguranca")
vRetUsuarioPerfil =
oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)
if IsArray(vRetUsuarioPerfil) then
vRetUsuario
= vRetUsuarioPerfil(0)
vRetPerfil
= vRetUsuarioPerfil(1)
end if
Session("sPerfilUsuario") = ""
if IsArray(vRetUsuario) then
if
IsArray(vRetPerfil) then
session("sCodigoUsuario")
= sCoUsuario
Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral")
= vRetPerfil
for
iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(f_Mensagem(13));
location.href
= 'frmLogin.asp';
</script>
<%
end if
end if
%>
|
Referência: 10.4
Explicação:
Dentro da página
responsável pelo negócio de login, declaro algumas variáveis no início da
página ASP. (Referência 10.5).
|
Dim oSeguranca
Dim
vRetUsuarioPerfil
Dim vRetUsuario
Dim vRetPerfil
Dim iLogin
Dim sCoUsuario
Dim sCoSenha
|
Referência: 10.6
Elas serão usadas
no decorrer do código.
Começam com uma
letra pequena e em seguida maiúsculo, isso porque fiz um padrão para melhor
entendimento. Segue os detalhes. (Referência 10.7)
|
o = é um objeto
criado, ou seja, do tipo object.
|
|
v = é um array
ou do tipo variant usado no VB 6.0
|
|
i = é do tipo
inteiro
|
|
s = é do tipo
string.
|
Referência: 10.7
O próximo passo
foi declarar algumas constantes usadas especialmente para esta página, ou seja,
é melhor usar constante do que números no decorrer da página e código. Lembre-se
que as constantes declaradas são referentes ao select no banco de dados, ou
seja, a posição dos campos no select criado. Por exemplo: Select campo1, campo2
from tabela. O campo1 será a constante com o valor 0, o campo2 com o valor 1 e
assim por diante. (Referência 10.8)
|
Const
USU_NO_USUARIO_LOGIN = 0
Const
USU_NO_FUNCAO_LOGIN = 1
Const PRF_CO_PERFIL_LOGIN = 0
Const PRF_NO_PERFIL_LOGIN = 1
|
Referência: 10.8
Procuro sempre
colocar as constantes com letras maiúsculas.
A linha seguinte
atribui os valores enviados para as variáveis. (Referência 10.9)
|
sCoUsuario = Request("txtUsuario")
sCoSenha =
Request("txtSenha")
|
Referência: 10.9
Explicação:
Atribui a
variável sCoUsuario o valor enviado do request, o campo da página anterior
chama “txtUsuario”. Fiz da mesma forma para a variável sCoSenha, o request, o
campo da página chama “txtSenha”.
Acessando e
chamando functions diretamente do VB. (Referência 10.10)
|
set oSeguranca
= Server.CreateObject("CPESeguranca.clsSeguranca")
vRetUsuarioPerfil
= oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)
|
Referência: 10.10
Explicação:
Antes que pense “que”
código é esse. Lembre-se que em passos anteriores criei uma dll utilizando o VB
6.0 chamado “CPESeguranca” com a classe chamada “clsSeguranca”. A classe possui
alguns métodos para logar no sistema utilizando stored procedure no banco de
dados. Agora no ASP 3.0, irei chamá-la passando os parâmetros esperados.
A variável “oSeguranca”
é setada com o comando “set”, atribuo o valor
“Server.CreateObject(“CPESeguranca.clsSeguranca")” que serve para
instanciar a dll registrada junto ao COM PLUS. Instanciando dessa forma, os
métodos dessa classe estarão disponíveis a serem chamados.
A segunda linha,
o retorno do método atribui para a variável “vRetUsuarioPerfil”. Chamo da
seguinte maneira, “oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)”, ou seja, o
nome da variável anterior, ponto o nome do método passando as variáveis
atribuídas anteriormente com o valor do request enviado pela página anterior. Espero
ter entendido essa parte, caso contrário acompanhe os passos com paciência e
dedicação. A regra de negócio para validação do usuário está todo dentro do VB,
com esse método é verificado se o usuário está habilitado para entrar no
sistema ou não. Caso seja habilitado, voltará um array com as informações
necessárias de perfil e usuário, caso contrário não voltará nada.
Verificando dados
para atribuir session junto ao sistema. (Referência 10.11)
|
if IsArray(vRetUsuarioPerfil) then
vRetUsuario
= vRetUsuarioPerfil(0)
vRetPerfil
= vRetUsuarioPerfil(1)
end if
Session("sPerfilUsuario") = ""
if IsArray(vRetUsuario) then
if
IsArray(vRetPerfil) then
session("sCodigoUsuario")
= sCoUsuario
Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral")
= vRetPerfil
for
iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(f_Mensagem(13));
location.href
= 'frmLogin.asp';
</script>
<%
end if
end if
%>
|
Referência: 10.11
Bom antes de
qualquer coisa, o comando que verifica se possui algum array no ASP é IsArray.
As primeiras 4 linhas de código verifico se o retorno é array para atribuir os valores
a outras variáveis declaradas acima. (Referência 10.12)
|
if IsArray(vRetUsuarioPerfil) then
vRetUsuario
= vRetUsuarioPerfil(0)
vRetPerfil
= vRetUsuarioPerfil(1)
end if
|
Referência: 10.12
Em seguida zero a
session usada em todo sistema, isto é, atribuo o valor igual a nada (“”). Referência
10.13
|
Session("sPerfilUsuario") = ""
|
Referência: 10.13
Todo esse código de
verificação de usuário junto ao sistema dll registrado com COM PLUS serve para
segurança de código. Até o momento, validamos o usuário que está tentando
logar, porém ainda não foram atribuídas as sessões que serão usadas. Todo o
controle será em cima de sessões atribuídas automaticamente com dados vindos do
componente VB.
|
if IsArray(vRetUsuario) then
if
IsArray(vRetPerfil) then
session("sCodigoUsuario")
= sCoUsuario
Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral") = vRetPerfil
for
iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario")
= Session("sPerfilUsuario") &
vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" &
vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(“Usuário sem
perfil cadastrado.”);
location.href = 'frmLogin.asp';
</script>
<%
end if
else
%>
<script>
alert(“Usuário
ou senha inválido.”);
location.href = 'frmLogin.asp';
</script>
<%
end if
|
Referência: 10.14
Explicação
(Referência 10.14)
A primeira
condição que faço é se a variável “vRetUsuario” é um array, ou seja, se os
dados que estão atribuídos a ele, é do tipo array. Se não for do tipo array,
cai na condição “else” do código. Com isso é mostrado um alerta com a mensagem:
“usuário ou senha inválido” e retorna para a tela “frmLogin.asp”.
Se for do tipo
array, faço uma outra condição que verifica se a variável “vRetPerfil”, isso
porque o sistema também possui no banco de dados o perfil do usuário que está
sendo logado. Caso usuário que estiver logando não tiver perfil cadastro no
banco de dados, será enviada a mensagem: “Usuário sem perfil cadastrado.” e
redirecionará para a página de login (“frmLogin.asp”). Sendo um array, atribuo
todas as sessões usadas no sistema aos valores retornados do componente da
seguinte forma. (Referência 10.15).
|
session("sCodigoUsuario")
= sCoUsuario
Session("sNomeUsuario")
= vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao")
= vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral")
= vRetPerfil
|
Referência: 10.15
Note que alguns
valores que atribuo para a session, é uma constante declarada no início do
código da página. Depois de atribuir as sessions necessárias, redireciono para
a página principal com o comando “response.redirect”. (Referência 10.16)
|
Response.Redirect("frmPaginaPrincipal.asp")
|
Referência: 10.16
Ilustração de
todo código mostrado anteriormente.
Tela de login do
sistema. (Referência 10.17)

Referência: 10.17
Digito usuário e
senha. (Referência 10.18)

Referência: 10.18
Cliquei no botão
logar e entrei no sistema. (Referência 10.19)

Referência: 10.19
Caso digite
usuário ou senha inválida, é mostrada uma mensagem no brownser. (Referência
10.20)

Referência: 10.20
Bom, fico por
aqui com mais um artigo. Espero ter ajudado a todos os leitores. Qualquer dúvida,
favor entrar em contato pelo e-mail: mauricio@aspneti.com
Livros
publicados:

Mauricio Junior
www.aspneti.com
www.ascompras.com