Busca online em todo site:
NETITC

Você não está logado, deseja logar na comunidade? clique aqui.




Título do Artigo

Sistema ASP 3.0 utilizando 3 camadas – Parte 1


Data Publicação: 31/8/2006 13:06:54
Total de visualizações: 2332

comente
 


 

         O meu objetivo é mostrar como é fácil, seguro e rápido utilizar sistemas ASP 3.0 utilizando 3 camadas. Além das camadas ficarem desconectadas, caso houver mudanças em algumas das camadas, fica mais fácil altera-las mantendo assim um padrão específico de desenvolvimento de software. Em passos anteriores mostrei como criar as camadas para conectar no banco de dados, criptografia, module e muito mais. Caso queira acompanhar desde o início, acesse os sites indicados abaixo:

 

www.aspneti.com

www.juliobattisti.com.br

 

 

Informo também que todos os exemplos são explicados passo a passo e para melhor visualização, é mostrado uma figura de ilustração real do assunto falado. Os códigos foram testados e comprovados, favor tente seguir passo a passo. Esta primeira parte crio uma tabela de fornecedores bem comum e com dados reais, crio uma stored procedure para inserir os dados no banco de dados e o restante é mostrado no decorrer.

 

 

Requisitos:

- Ter visto os passos anteriores;

- Possuir um conhecimento VB 6.0 e ASP 3.0;

- Possuir conhecimento utilizando banco de dados;

 

Utilização e ferramentas:

- Microsoft Visual Studio InterDev 6.0;

- Microsoft Visual Basic 6.0

- Banco de dados SQL SERVER;

 

O primeiro de tudo é a criação do banco de dados junto à aplicação. Como informado anteriormente criei uma tabela de fornecedores junto ao banco de dados. (Referência Parte 1.1)

 

Referência: Parte 1.1

 

O nome da tabela do banco de dados é: CPETB042_FORNECEDOR. Note que os campos são formados por um padrão de nomenclatura e são comuns, ou seja, sem nenhum segredo.

 

         O próximo passo é criar uma procedure genérica onde possa fazer update ou insert utilizando o mesmo arquivo. Já que para um fornecedor, o CNPJ nunca deve ser o mesmo, tive a idéia de verificar se o CNPJ já existe, caso não exista o mesmo faz um insert na tabela, caso exista automaticamente a procedure entenderá que deve ser feito um UPDATE nos campos informados. Essa idéia economiza um pouco de tempo e também anula o fato de utilizar outra apenas para fazer update. (Referência Parte 1.2)

 

 

 

 

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

 

 

CREATE PROCEDURE [dbo].[CPESP097_INSERIR_FORNECEDOR]

 

      @FOR_NOME               nvarchar(100),

      @FOR_CNPJ               nvarchar(28),

      @FOR_OPTANTE_SIMPLES    char(1),

      @FOR_IE                 nvarchar(100),

      @FOR_TELEFONE           nvarchar(20),

      @FOR_TELEFONE1          nvarchar(20),

      @FOR_FAX                nvarchar(20),

      @FOR_CONTATO            nvarchar(100),

      @FOR_ENDERECO           text,

      @FOR_BAIRRO       nvarchar(100),

      @FOR_CIDADE             nvarchar(100),

      @FOR_ESTADO       char(2),

      @FOR_CEP                numeric,

      @FOR_BANCO              nvarchar(100),

      @FOR_AGENCIA            nvarchar(20),

      @FOR_CONTA              nvarchar(70),

      @FOR_EMAIL              nvarchar(200)

 

AS

 

      DECLARE @FOR_NU_SEQUENCIAL   AS INT

 

/************************************************************************************

  INICIANDO TRANSACAO

*************************************************************************************/

      BEGIN TRANSACTION

            SET NOCOUNT ON

 

      -- BUSCA PRIMEIRO ANTES DE INSERIR OU ATUALIZAR

      SELECT

            @FOR_NU_SEQUENCIAL = FOR_NU_SEQUENCIAL

      FROM 

            CPETB042_FORNECEDOR

      WHERE

             FOR_CNPJ = @FOR_CNPJ

 

      IF (@@rowcount = 0)

      BEGIN      

 

            INSERT INTO CPETB042_FORNECEDOR (

                  --FOR_NU_SEQUENCIAL,

                  FOR_NOME,

                  FOR_CNPJ,

                  FOR_OPTANTE_SIMPLES,

                  FOR_IE,

                  FOR_TELEFONE,

                  FOR_TELEFONE1,

                  FOR_FAX,

                  FOR_CONTATO,

                  FOR_ENDERECO,

                  FOR_BAIRRO,

                  FOR_CIDADE,

                  FOR_ESTADO,

                  FOR_CEP,

                  FOR_BANCO,

                  FOR_AGENCIA,

                  FOR_CONTA,

                  FOR_EMAIL

            )

            VALUES

            (

                  --@FOR_NU_SEQUENCIAL,

                  @FOR_NOME,

                  @FOR_CNPJ,

                  @FOR_OPTANTE_SIMPLES,

                  @FOR_IE,

                  @FOR_TELEFONE,

                  @FOR_TELEFONE1,

                  @FOR_FAX,

                  @FOR_CONTATO,

                  @FOR_ENDERECO,

                  @FOR_BAIRRO,

                  @FOR_CIDADE,

                  @FOR_ESTADO,

                  @FOR_CEP,

                  @FOR_BANCO,

                  @FOR_AGENCIA,

                  @FOR_CONTA,

                  @FOR_EMAIL

            )

      END

     

      --- ATUALIZAR TABELA

      ELSE

     

 

      BEGIN

 

            UPDATE CPETB042_FORNECEDOR SET

                  FOR_NOME                = @FOR_NOME,

                  FOR_CNPJ                = @FOR_CNPJ,

                  FOR_OPTANTE_SIMPLES     = @FOR_OPTANTE_SIMPLES,

                  FOR_IE                       = @FOR_IE,

                  FOR_TELEFONE            = @FOR_TELEFONE,

                  FOR_TELEFONE1           = @FOR_TELEFONE1,

                  FOR_FAX                 = @FOR_FAX,

                  FOR_CONTATO       = @FOR_CONTATO,

                  FOR_ENDERECO            = @FOR_ENDERECO,

                  FOR_BAIRRO              = @FOR_BAIRRO,

                  FOR_CIDADE              = @FOR_CIDADE,

                  FOR_ESTADO              = @FOR_ESTADO,

                  FOR_CEP                 = @FOR_CEP,

                  FOR_BANCO               = @FOR_BANCO,

                  FOR_AGENCIA             = @FOR_AGENCIA,

                  FOR_CONTA               = @FOR_CONTA,

                  FOR_EMAIL               = @FOR_EMAIL

            WHERE

                  FOR_NU_SEQUENCIAL       = @FOR_NU_SEQUENCIAL

 

      END

 

 

 

COMMIT TRANSACTION

 

Referência: Parte 1.2

 

Explicação:

 

É simples e fácil a criação e utilização da procedure. No começo espero parâmetros necessários para o insert ou update, logo após inicio a transação com o comando BEGIN TRANSACTION e antes de inserir faço obrigatoriamente um select na tabela passando o número do CNPJ do fornecedor. (Referência Parte 1.3).

 

 

BEGIN TRANSACTION

            SET NOCOUNT ON

 

      -- BUSCA PRIMEIRO ANTES DE INSERIR OU ATUALIZAR

      SELECT

            @FOR_NU_SEQUENCIAL = FOR_NU_SEQUENCIAL

      FROM 

            CPETB042_FORNECEDOR

      WHERE

             FOR_CNPJ = @FOR_CNPJ

 

Referência: Parte 1.3

 

 

Caso haja algum valor retornado para a variável @FOR_NU_SEQUENCIAL, é feito um IF mais abaixo para verificar se o @@rowcount é igual a zero (0). Sendo o mesmo faz insert, senão faz update.

 

         Passando para a parte interessante, criei um projeto do tipo ACTIVEX DLL (caso de dúvidas na criação, verifique os passos anteriores indicado no começo), adicionei o módulo criado anteriormente ao projeto e por final criei uma classe chamada clsFornecedor responsável pelas transações com de fornecedor. O nome do método responsável para inserir é: InserirFornecedor cujo recebe alguns parâmetros necessários. (Referência Parte 1.4)

 

 

 

 

 

 

Public Function InserirFornecedor(ByVal FOR_NOME As String, _

                                  ByVal FOR_CNPJ As String, _

                                  ByVal FOR_OPTANTE_SIMPLES As String, _

                                  ByVal FOR_IE As String, _

                                  ByVal FOR_TELEFONE As String, _

                                  ByVal FOR_TELEFONE1 As String, _

                                  ByVal FOR_FAX As String, _

                                  ByVal FOR_CONTATO As String, _

                                  ByVal FOR_ENDERECO As String, _

                                  ByVal FOR_BAIRRO As String, _

                                  ByVal FOR_CIDADE As String, _

                                  ByVal FOR_ESTADO As String, _

                                  ByVal FOR_CEP As String, _

                                  ByVal FOR_BANCO As String, _

                                  ByVal FOR_AGENCIA As String, _

                                  ByVal FOR_CONTA As String, _

                                  ByVal FOR_EMAIL As String) As Boolean

 

Static sSql As String

Static bRetorno As Boolean

Static bConexao As Boolean

 

On Error GoTo error

    ‘ abre a conexao com o banco de dados

    bConexao = AbreConexao("open")

 

    If bConexao Then

        ‘executa a stored procedure criada anteriormente passando os parâmetros

        ‘necessários

        sSql = " CPESP097_INSERIR_FORNECEDOR '" & FOR_NOME & "', '" & FOR_CNPJ & "', " & _

                                             " '" & FOR_OPTANTE_SIMPLES & " ', '" & FOR_IE & "', " & _

                                             " '" & FOR_TELEFONE & "', '" & FOR_TELEFONE1 & "', " & _

                                             " '" & FOR_FAX & "', '" & FOR_CONTATO & "', " & _

                                             " '" & FOR_ENDERECO & "', '" & FOR_BAIRRO & "', " & _

                                             " '" & FOR_CIDADE & "', '" & FOR_ESTADO & "', " & _

                                             " '" & FOR_CEP & "', '" & FOR_BANCO & "', " & _

                                             " '" & FOR_AGENCIA & "', '" & FOR_CONTA & "', " & _

                                             " '" & FOR_EMAIL & "'"

        ‘ executa o comando utilizando o método da model passando a string SQL                                           

        bRetorno = ExecutaSQL(sSql)

        

    End If

 

error:

   ‘ caso haja erro, o mesmo gera o log

   If Err.Number <> 0 Then

        GerarLog "InserirFornecedor", DescricaoErro(1)

   End If

  

   ‘por fim é retornado ao objeto ou página que chamou um valor do tipo boolean    

   InserirFornecedor = bRetorno

 

   ‘fechando a conexão do banco de dados.

   If bConexao Then

       AbreConexao "close"

   End If

 

End Function

 

Referência: Parte 1.4

 

         O método é simples depois que entende a utilização do módulo criado em passos anteriores. Essa é a vantagem de se criar um módulo genérico com funções ou métodos, várias classes podem utilizá-lo sem qualquer tipo de problema.

 

 

Explicação:

 

         Recebo as variáveis com seus tipos respectivos, mais abaixo abro a conexão com o banco de dados, verifico se a conexão foi realmente aberta, atribuo os valores para a variável sSQL responsável para passar os valores a serem executados. Depois da atribuição, chamo a função ou método, como preferir chamada ExecutaSQL passando a sSQL. Essa função é responsável em fazer todo o trâmite utilizando a stored procedure indicada. Por fim retorno o valor ao objeto ou página que o chamou. (Referência Parte 1.5)

 

isdf

Referência: Parte 1.5

 

Lembre-se que o componente deve estar registrado no COM PLUS.

 

Utilizando página ASP 3.0

  

         Esta parte de utilizando da camada de apresentação é bem simples e prático. No momento não se preocupe com layout ou estilo da tela, estou focando no funcionamento utilizando camadas e não no layout. (Referência Parte 1.6)

 

 

      

Referência: Parte 1.6

 

 

         A figura (referência Parte 1.6) mostra como ficou a página ASP 3.0 responsável por cadastrar o fornecedor no banco de dados. O código HTML é simples e fácil, porém com alguns códigos diferentes. (Referência Parte 1.7)

 

 

 

<form action="frmManterFornecedor.asp" method="post" name="form">

                  

                            <!-- hidden -->

                            <input type="hidden" name="hdNuSequencial" value="<%=hdNuSequencial%>">

                           

                   <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%">

                            <!--#include file="../includes/barra_titulo.asp"-->                           

                            <tr align="center">

                                      <td bgcolor="white" id="td_Left"></td>

                                      <td bgcolor="white" valign="top" width="780px" id="td_Center">                                 

                                                        <table border="1" cellpadding="0" class="formulario" WIDTH="90%" >

                                                                  <tr>

                               &nb