martes, 5 de julio de 2011

Programacion 5 capas ----Intoduccion

Muchos quizás buscan este tipo de información en internet y no lo encuentran, aquí en este blog tratare de plasmar la practica en si, de realizar un proyecto en 5 capas, no entrare en detalles en temas teoricos, ya que tratare mostrarles todo lo que aprendi en este proyecto

Requerimientos------

1.- Visual net 2010 o 2008
2.- Lenguaje de programacion visual basic en Asp.net
3.  enterprise library dependiendo para que version de net vallan a usar
4. AjaxControlToolkit para net 4
5.- Sql server express 2005 o 2008

Programacion 5 capas ----Capa 1 Data

Antes de llegar a este punto tenemos que tener ya lista la base de datos creada, con su tablas, registros,y los  store procedures que es con los que se va a trabajar mayormente en el proyecto, en el siguiente enlace podran descargar el codigo para crear su base de datos, practicamente esten todas las tabla foraneas que puedan usar las tablas padres, son cerca de 20 tablas , y cada una de ellas con 9 store procesudures, con los procesos basicos que se pueden manejar en una tabla normal. no he colocado la de las tablas padres.pues es ovbio ques se van a amanejar lo mismo ya sea una tabla de personal, de proveedores ,clientes etc... solo que ya esas tablas se manejaria mas datos a compracion de las tabla foraneas que a lo mucho contienen 4 atributos. no  he visto tampoco lo de las transacciones ya que estyo en proceso de aprendizaje y por eso motivo tampoco lo coloco, por lo tanto empezemos de a pocos para ir programando en N capas

Base de datos
Base de datos

Paso 1 crear un proyecto en blanco
Paso 2 Crear nuevo proyecto dentro del proyecto en blanco, en nuestro caso crearemos 5 ya que programaremos en 5 capas, comenzando por la capa de datos, capa entidades, capa logica de negocio, capa regla de negocio y la de aplicacion
Paso 3  dentro del projecto Layer_data agregaremos referencia a los archivos que utilizaremos del enterprise library, para ver la referencias arriba del proyecto hay unso iconos elegir, mostrar todos los archivos para que le aparesca la carpeta references y ahi dentro veran que sean agregado las refererencias de los archivos del enterprise library


Paso 4 Agregaremos una nueva clase dentro del proyecto Layer_Data la que nombaremos HelperDb

Paso 5  empezaremos a colcoar el codigo que usaremos dentro de esta clase

'importaremos las librerias a las que hicimos referencia en nuestro proyecto y que usaremos en esta clase
Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Data.Common

Public Class HelperDB
    Public db As Database = Nothing

    Public Sub New()
        db = DatabaseFactory.CreateDatabase("cnDataBase")
    End Sub
    'Crear los Metodos siguientes :
    '-ExecuteDataSet
    '-ExecuteReader
    '-ExecuteScalar
    '-ExecuteNomQuery
    'x/c Metodo definir 4 sobrecargas
    '1era SP
    '2da SP y parametros
    '3era SP, Transaccion
    '4ta SP, Transaccion y Parametros

    Public Function ExecuteDataSet(ByVal sp As String) As DataSet
        Try
            Return db.ExecuteDataSet(sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteDataSet(ByVal sp As String, ByVal ParamArray datos() As Object) As DataSet
        Try
            Return db.ExecuteDataSet(sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteDataSet(ByVal sp As String, ByVal trans As DbTransaction) As DataSet
        Try
            Return db.ExecuteDataSet(trans, sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteDataSet(ByVal sp As String, ByVal trans As DbTransaction, ByVal ParamArray datos() As Object) As DataSet
        Try
            Return db.ExecuteDataSet(trans, sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteReader(ByVal sp As String) As IDataReader
        Try
            Return db.ExecuteReader(sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteReader(ByVal sp As String, ByVal ParamArray datos() As Object) As IDataReader
        Try
            Return db.ExecuteReader(sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteReader(ByVal sp As String, ByVal trans As DbTransaction) As IDataReader
        Try
            Return db.ExecuteReader(trans, sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteReader(ByVal sp As String, ByVal trans As DbTransaction, ByVal ParamArray datos() As Object) As IDataReader
        Try
            Return db.ExecuteReader(trans, sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteNomQuery(ByVal sp As String) As Integer
        Try
            Return db.ExecuteNonQuery(sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ExecuteNomQuery(ByVal sp As String, ByVal ParamArray datos() As Object) As Integer
        Try
            Return db.ExecuteNonQuery(sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executenonquery(ByVal sp As String, ByVal trans As DbTransaction) As Integer
        Try
            Return db.ExecuteNonQuery(trans, sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executenonquery(ByVal sp As String, ByVal trans As DbTransaction, ByVal ParamArray datos() As Object) As Integer
        Try
            Return db.ExecuteNonQuery(trans, sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executescalar(ByVal sp As String) As Integer
        Try
            Return db.ExecuteScalar(sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executescalar(ByVal sp As String, ByVal ParamArray datos() As Object) As Integer
        Try
            Return db.ExecuteScalar(sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executescalar(ByVal sp As String, ByVal trans As DbTransaction) As Integer
        Try
            Return db.ExecuteScalar(trans, sp)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function executescalar(ByVal sp As String, ByVal trans As DbTransaction, ByVal ParamArray datos() As Object) As Integer
        Try
            Return db.ExecuteScalar(trans, sp, datos)
        Catch ex As Exception
            Throw ex
        End Try
    End Function


    Public Function BeginTransaction() As DbTransaction
        Try
            Dim cn As DbConnection =
             db.CreateConnection
            cn.Open()
            Return cn.BeginTransaction
            'db.CreateConnection().BeginTransaction()
        Catch ex As Exception
            Throw ex
        End Try
    End Function

End Class

como les puse en la introduccion no me preocupare en colocar conceptos o teoria ya que estoy colocando solo el codigo de la parte practica, si quieren saber mas detales sobre los metodos o propiedades que se estan usando dentro del codigo del helperdb solo basta con buscar informacion en google .

en esta parte se definen los metodos que seran usados en nuestro proyecto final



Programacion 5 capas ----Capa 2 Entidades

En esta capa vamos a representar las tablas de nuestar base de datos en esta capa para ello empezaremos a hacer lo siguiente

Paso 1 Agregar 2 nuevas carpetas nombrandolas con First y Second, esto se hara tanto en la capa, logica y reglas de negeocio

Paso 2 Una vez creada las carpetas, tenemos que crear dentro de ellas sus clases que van a representar a cada una de las tablas que exiten dentro de la bd, en este caso solo usaremos la carpeta First para rellenar de clases (Tablas) con sus atributos y en la carpeta Second de igual manera solo que sera compartida, si hay la necesidad en el futuro de agregar informacion en esas clases se las colocara, eso lo veremos con mas detalle en la capa logica y reglas de negocio.

Como se hizo mención en la capa de datos, por el momento solo se usará las tablas forareanas de la bd, ya que aun no he avanzado con el mantenimeinto de las tablas padres, pero es casi igual lo que varia es solo la cantidad de datos que se manejan.

Paso 3 Una vez creadas las clases comenzamos a escribir el codigo, usaremos en este caso la  clase Idiomas y la clase Estado ya que casi la mayoria de tablas estan relacionadas con la tabla estado, bastara con mostrar ese ejemplo pues en las demas clases ya seria repetitivo el contenido solo varian los atributos a usar

clase Idioma

<Serializable()>
Partial Public Class Idioma
'declaramos nuestros atributos estos son los que se veran como titulo o campo,  por ejemplo cuando 'mostremos en una grilla el contenido de la tabla, no necesariamente tiene que ser igual a los tributos de la 'base de datos pero , tienen que tener una semejanza, por ejemplo en la atributo codigo en la tabla es 'Cod_idioma
    Public Property Codigo As String
    Public Property Idioma As String
    Public Property Estado As String

    Sub New()

    End Sub

    Sub New(ByVal vCodigo As String, ByVal vIdioma As String, ByVal vEstado As String)
        _Codigo = vCodigo
        _Idioma = vIdioma
        _Estado = vEstado
    End Sub

'aqui realizamos la referencia con la clase estado, de forma similar se hara en la clase estado
    Private _cod_estado_entity As New Estado
    Public Property cod_estado_entity() As Estado
        Get
            Return _cod_estado_entity
        End Get
        Set(ByVal value As Estado)
            _cod_estado_entity = value
        End Set
    End Property
End Class
'crearemos esta clase para que los atributos de esta clase puedan ser llamados por medio de esta lista de 'objetos
Public Class IdiomaList
    Inherits List(Of Idioma)
End Class

Clase Estado
<Serializable()>
Partial Public Class Estado
'atributos de la clase estado
    Public Property Cod_estado() As String
    Public Property Estado() As String

    Public Sub New()

    End Sub

    Public Sub New(ByVal vCod_estado As String, ByVal vEstado As String)
        _Cod_estado = vCod_estado
        _Estado = vEstado
    End Sub
'relaciones con las demas clases que usarn la clase estado
    Private _paiscollection As New Paislist
    Public Property paiscollection() As Paislist
        Get
            Return _paiscollection
        End Get
        Set(ByVal value As Paislist)
            _paiscollection = value
        End Set
    End Property
    Private _departamentocollection As New DepartamentoList
    Public Property departamentocollection As DepartamentoList

        Get
            Return _departamentocollection
        End Get
        Set(ByVal value As DepartamentoList)
            _departamentocollection = value
        End Set
    End Property

    Private _ProvinciaCollection As New Provincialist
    Public Property ProvinciaCollection As Provincialist
        Get
            Return _ProvinciaCollection
        End Get
        Set(ByVal value As Provincialist)
            _ProvinciaCollection = value
        End Set
    End Property

    Private _Unidad_MedidaCollection As New Unidad_MedidaList
    Public Property Unidad_MedidaCollection As Unidad_MedidaList
        Get
            Return _Unidad_MedidaCollection
        End Get
        Set(ByVal value As Unidad_MedidaList)
            _Unidad_MedidaCollection = value
        End Set
    End Property

    Private _Idiomacollection As New IdiomaList
    Public Property Idiomacollection() As IdiomaList
        Get
            Return _Idiomacollection
        End Get
        Set(ByVal value As IdiomaList)
            _Idiomacollection = value
        End Set
    End Property

    Private _Monedacollection As New Monedalist
    Public Property Monedacollection() As Monedalist
        Get
            Return _Monedacollection
        End Get
        Set(ByVal value As Monedalist)
            _Monedacollection = value
        End Set
    End Property

    Private _Religioncollection As New ReligionList
    Public Property Religioncollection() As ReligionList
        Get
            Return _Religioncollection
        End Get
        Set(ByVal value As ReligionList)
            _Religioncollection = value
        End Set
    End Property

    Private _Areacollection As New AreaList
    Public Property Areacollection() As AreaList
        Get
            Return _Areacollection
        End Get
        Set(ByVal value As AreaList)
            _Areacollection = value
        End Set
    End Property
    Private _documentoidentidadcollection As New Documento_IdentidadList
    Public Property documentoidentidadcollection() As Documento_IdentidadList
        Get
            Return _documentoidentidadcollection
        End Get
        Set(ByVal value As Documento_IdentidadList)
            _documentoidentidadcollection = value
        End Set
    End Property

    Private _sexocollection As New SexoList
    Public Property sexocollection() As SexoList
        Get
            Return _sexocollection
        End Get
        Set(ByVal value As SexoList)
            _sexocollection = value
        End Set
    End Property

    Private _cargocollection As New CargoList
    Public Property cargocollection() As CargoList
        Get
            Return _cargocollection
        End Get
        Set(ByVal value As CargoList)
            _cargocollection = value
        End Set
    End Property

    Private _estadocivilcollection As New EstadoCivilList
    Public Property estadocivil() As EstadoCivilList
        Get
            Return _estadocivilcollection
        End Get
        Set(ByVal value As EstadoCivilList)
            _estadocivilcollection = value
        End Set
    End Property

    Private _gradoinstruccioncollection As New GradoInstruccionList
    Public Property gradoinstruccioncollection() As GradoInstruccionList
        Get
            Return _gradoinstruccioncollection
        End Get
        Set(ByVal value As GradoInstruccionList)
            _gradoinstruccioncollection = value
        End Set
    End Property

    Private _Bancocollection As New BancoList
    Public Property Bancocollection() As BancoList
        Get
            Return _Bancocollection
        End Get
        Set(ByVal value As BancoList)
            _Bancocollection = value
        End Set
    End Property

    Private _cuentabancariacollection As New CuentaBancariaList
    Public Property cuentabancariacollection() As CuentaBancariaList
        Get
            Return _cuentabancariacollection
        End Get
        Set(ByVal value As CuentaBancariaList)
            _cuentabancariacollection = value
        End Set
    End Property

    Private _turnocollection As New TurnoList
    Public Property turnocollection() As TurnoList
        Get
            Return _turnocollection
        End Get
        Set(ByVal value As TurnoList)
            _turnocollection = value
        End Set
    End Property

    Private _localcollection As New LocalList
    Public Property localcollection() As LocalList
        Get
            Return _localcollection
        End Get
        Set(ByVal value As LocalList)
            _localcollection = value
        End Set
    End Property
End Class
'se listara por medio de esta clase los objetos que contienen en ella
Public Class EstadoList
    Inherits List(Of Estado)

End Class




y en la clases secundarias osea en la carpeta Second colocamos el siguiente codigo en cada una de las clases creadas
' cuando colocamos partial lo que hacemos es el de unir ambas clases como si fueran una
Partial Public Class Idioma

End Class

Programacion 5 capas ----Capa 3 Logica de Negocio

En esta capa desarrolaremos nuestro codigo de los procesos que usarmeos en nuestra aplicacion

Paso 1  ya creda aqui las carpetas First y Second, agregaremos las clases correspondientes para cada entidad
en la primera carpeta usaremos los procesos basicos y en la segunda usaremos los adicionales usaremos la clase  IdiomaBl y EstadoBl .....dentro del proyecto Layer_Logic hacemos referencia a los proyectos que tenemos el data y el entity



Clase IdiomaBl
Carpeta First

Imports Layer_Data
Imports Layer_Entity
Imports System.Data.Common
Partial Public Class IdiomaBL
'heredamos los metodos de la clase helperdb
    Inherits HelperDB
'llama a todos los datos
    Public Function GetAll() As IdiomaList
        Try
            Dim lista As New IdiomaList
                Using dr As IDataReader = Me.ExecuteReader("Usp_Idioma_GetAll")
                Do While dr.Read
                    Dim item As New Idioma
                    item.Codigo = CStr(dr("Cod_Idioma"))
                    item.Idioma = CStr(dr("Idioma"))
                    item.Estado = CStr(dr("Cod_estado"))
                    lista.Add(item)
                Loop
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

'llama solo un dato con respecto a su codigo
    Public Function GetOne(ByVal codigo As String) As IdiomaList
        Try
            Dim lista As New IdiomaList
            Dim item As New Idioma
            Dim param() As String = {codigo}
            Using dr As IDataReader = Me.ExecuteReader("Usp_Idioma_GetOne", param)
                If dr.Read Then
                    item.Codigo = CStr(dr("Cod_Idioma"))
                    item.Idioma = CStr(dr("Idioma"))
                    item.Estado = CStr(dr("Cod_estado"))
                    lista.Add(item)
                End If
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

'ingresa registro en la tabla idioma
    Public Sub Insert(ByVal item As Idioma)
        Try
            Dim param() As String = {item.Codigo, item.Idioma, item.Estado}
            Me.ExecuteNomQuery("Usp_Idioma_Insert", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

'edita registro
    Public Sub Update(ByVal item As Idioma)
        Try
            Dim param() As String = {item.Codigo, item.Idioma, item.Estado}
            Me.ExecuteNomQuery("Usp_Idioma_Update", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

'elimina registro borrando el dato d ela bd
    Public Sub Delete(ByVal codigo As String)
        Try
            Dim param() As String = {codigo}
            Me.ExecuteNomQuery("Usp_Idioma_Delete", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

End Class

Carpeta Second
Clase idiomaBl
Imports Layer_Data
Imports Layer_Entity
Partial Public Class IdiomaBL

'llama a todos los datos mostrando el detalle del campo estado
    Public Function GetAll2() As IdiomaList
        Try
            Dim lista As New IdiomaList
            Using dr As IDataReader = Me.ExecuteReader("Usp_Idioma_GetAll2")
                Do While dr.Read
                    Dim item As New Idioma
                    item.Codigo = CStr(dr("Cod_Idioma"))
                    item.Idioma = CStr(dr("Idioma"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                Loop
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

'llama solo un registro mostrando detalle en campo estado
    Public Function GetOne2(ByVal codigo As String) As IdiomaList
        Try
            Dim lista As New IdiomaList
            Dim item As New Idioma
            Dim param() As String = {codigo}
            Using dr As IDataReader = Me.ExecuteReader("Usp_Idioma_GetOne2", param)
                If dr.Read Then
                    item.Codigo = CStr(dr("Cod_Idioma"))
                    item.Idioma = CStr(dr("Idioma"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                End If
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

'llama a todos los registros ya sea colocando o no algun parametro de busqueda con detalle en campo estado
    Public Function GetOne3(ByVal codigo As String) As IdiomaList
        Try
            Dim lista As New IdiomaList
            Dim item As New Idioma
            Dim param() As String = {codigo}
            Using dr As IDataReader = Me.ExecuteReader("Usp_Idioma_GetOne3", param)
                Do While dr.Read
                    item = New Idioma
                    item.Codigo = CStr(dr("Cod_Idioma"))
                    item.Idioma = CStr(dr("Idioma"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                Loop
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    'actualiza datos poniendo su estado como inactivo (elimina)
    Public Sub Update2(ByVal item As Idioma)
        Try
            Dim param() As String = {item.Codigo}
            Me.ExecuteNomQuery("Usp_Idioma_Update2", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class

Clase Estado
Carpeta First

Imports Layer_Data
Imports Layer_Entity
Imports System.Data.Common
Partial Public Class EstadoBl
    Inherits HelperDB
    Public Function GetAll() As estadolist
        Try
            Dim lista As New estadolist
            Using dr As IDataReader = Me.ExecuteReader("usp_estado_GetAll")
                Do While dr.Read
                    Dim item As New Estado
                    item.Cod_estado = CStr(dr("Cod_estado"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                Loop
            End Using 'Llama al dispose automaicamente
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function GetOne(ByVal codigo As String) As EstadoList
        Try
            Dim lista As New EstadoList
            Dim item As New Estado
            Dim param() As String = {codigo}
            'Dim param(0) As String
            'param(0) = codigo
            Using dr As IDataReader = Me.ExecuteReader("usp_estado_GetOne", param)
                If dr.Read Then
                    item.Cod_estado = CStr(dr("Cod_estado"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                End If
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function
  
    Public Sub Insert(ByVal item As Estado)
        Try
            Dim param() As String = {item.Cod_estado, item.Estado}
            Me.ExecuteNomQuery("usp_estado_Insert", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub Update(ByVal item As Estado)
        Try
            Dim param() As String = {item.Cod_estado, item.Estado}
            Me.ExecuteNomQuery("usp_estado_Update", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub Delete(ByVal codigo As String)
        Try
            Dim param() As String = {codigo}
            Me.ExecuteNomQuery("usp_estado_Delete", param)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class

Carpeta Second
Clase EstadoBl

Imports Layer_Data
Imports Layer_Entity
Partial Public Class EstadoBL
    Public Function GetAll2() As EstadoList
        Try
            Dim lista As New EstadoList
            Using dr As IDataReader = Me.ExecuteReader("Usp_Estado_GetAll2")
                Do While dr.Read
                    Dim item As New Estado
                    item.Cod_estado = CStr(dr("Cod_estado"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                Loop
            End Using 'Llama al dispose automaicamente
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function
    Public Function GetOne2(ByVal codigo As String) As EstadoList
        Try
            Dim lista As New EstadoList
            Dim item As New Estado
            Dim param() As String = {codigo}
            Using dr As IDataReader = Me.ExecuteReader("Usp_Estado_GetOne2", param)
                Do While dr.Read
                    item = New Estado
                    item.Cod_estado = CStr(dr("Cod_estado"))
                    item.Estado = CStr(dr("Detalle"))
                    lista.Add(item)
                Loop
            End Using
            Return lista
        Catch ex As Exception
            Throw ex
        End Try
    End Function
End Class

Programacion 5 capas ----Capa 4 Reglas de Negocio

En esta capa vamos a agarantizar la consistencia de las subrutinas o procesos que hemos desarrolado en la capa layer_logic

Paso1  De igual manera una vez creada ambas carpetas agregaremos las clases dentro de ellas
Paso 2 crear las clases para ambas carpetas compatiendolas con su propiedad partial, y en el proyecto de la capa reglas de negocio hacer la referencia co la capa entidades y logica de negocio



Clase IdiomaRB
Carpeta First

Imports Layer_Entity
Imports Layer_Logic
Partial Public Class IdiomaRB
    Private Shared obj As New IdiomaBL
    Public Shared Function GetAll() As IdiomaList
        Try
            Return obj.GetAll
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Function GetOne(ByVal codigo As String) As IdiomaList
        Try
            Return obj.GetOne(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Function Insert(ByVal item As Idioma)
        Try
            obj.Insert(item)
        Catch ex As Exception
            Throw ex
        End Try
    End Function
    Public Shared Sub Update(ByVal item As Idioma)
        Try
            obj.Update(item)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
    Public Shared Sub Delete(ByVal codigo As String)
        Try
            obj.Delete(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class


Clase IdiomaRB
Carpeta Second

Imports Layer_Entity
Imports Layer_Logic
Partial Public Class IdiomaRB
    Public Shared Function GetAll2() As IdiomaList
        Try
            Return obj.GetAll2
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Function GetOne2(ByVal codigo As String) As IdiomaList
        Try
            Return obj.GetOne2(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Function GetOne3(ByVal codigo As String) As IdiomaList
        Try
            Return obj.GetOne3(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Sub Update2(ByVal item As Idioma)
        Try
            obj.Update2(item)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class


Clase estadoRB
Carpeta First
Imports Layer_Logic
Imports Layer_Entity
Partial Public Class EstadoRB
    Private Shared obj As New EstadoBl
    Public Shared Function GetAll() As EstadoList
        Try
            Return obj.GetAll
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Function GetOne(ByVal codigo As String) As EstadoList
        Try
            Return obj.GetOne(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Function
  
    Public Shared Function Insert(ByVal item As Estado)
        Try
            obj.Insert(item)
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Shared Sub Update(ByVal item As Estado)
        Try
            obj.Update(item)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Shared Sub Delete(ByVal codigo As String)
        Try
            obj.Delete(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class

Clase estadoRb
Carpeta Second
Imports Layer_Entity
Imports Layer_Logic
Partial Public Class EstadoRB
    Public Shared Function GetAll2() As EstadoList
        Try
            Return obj.GetAll2
        Catch ex As Exception
            Throw ex
        End Try
    End Function
    Public Shared Function GetOne2(ByVal codigo As String) As EstadoList
        Try
            Return obj.GetOne2(codigo)
        Catch ex As Exception
            Throw ex
        End Try
    End Function
End Class

Programacion 5 capas ----Capa 5 Aplicacion

esta es la capa final donde mostraremos la informacion en este caso en una pagina asp.net (web)
se hara de una manera sencilla usando ya la plantilla predeterminada del visual.net que nos ofrece un entorno amigable.
Paso 1 agrear un nuevo proyecto web al proyecto



 Como tenemos un master page ese sera usado en todas nuestars paginas web, agregamos 2 paginas web una para idioma y otra para estado, es necesario tener otro master page para las paginas popup que se usara en el momento de hacerle mantenimeinto a la tabla, en este caso 2 paginas popup para cada pagina principal
agregar una nueva carpeta donde colocaremos las paginas y otras para los script si es que usaramos y tambien para imagenes si usamos imagenes dentro del proyecto web.


Paso 2 en la pagina principal Idioma agregar los sigueintes controles comose ve la imagen

los controles estan contenidos dentro de una tabla de 3 x 3 no se olviden de colocar en la propiedades del gridview alowwpaging  en true y autogenerateselectedbutton en true  y en gridlines en both
En la pestala codigo de la pagina colocar el siguiente codigo

<script language ="javascript " type="text/javascript" >
     function ir() {
         window.open("T_Idioma_Nu.aspx", null, "height=220,width=550,status=yes,toolbar=no,menubar=no,location=no , top=180, left=400");
     }
        </script>
        <script language ="javascript " type="text/javascript" >
            function ir2() {
                window.open("T_Idioma_Ed.aspx", null, "height=240,width=550,status=yes,toolbar=no,menubar=no,location=no , top=180, left=400");
            }
            </script>

este codigo puedne ponerlo dentro del primer asp content que vean en su codigo d ela pagina, recuerden que es d ela plantilla que se genera cuando crearon su proyecto wweb, sino dentro del head si que creearon un proyecto web en blanco, lo que hace ese codigo es llamar a las paginas popup abriendo una nueva pagina web con medidas y orientacion establecidas dentro de ese codigo, ustedes la pueden cambiar dependiendo a su gusto, recuerdern que las paginas ppopup ya deben estar creadas y son 2 por cada pagina una para el ingreso de dato y la otra para la edicion


Paso 3 colocaremos el codigo dentro del codebehind, para ello en el proyecto web debemos hacer referencia a la proyectos layer_entity y layer_rules

Imports Layer_Entity
Imports Layer_Rules
Public Class T_Idioma
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'habilitamos el codigo javasript para los botones nuevo y editar
If Not IsPostBack Then
            btn_nuevo.Attributes.Add("onclick", "javascript:ir();")
            btn_editar.Enabled = False
            btn_eliminar.Enabled = False
            btn_editar.Attributes.Add("onclick", "javascript:ir2();")
        End If
    End Sub

    Protected Sub btn_buscar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_buscar.Click
'vamos a buscar los datos ya sea colocando o no parametros en textbox
'ojo solo estamos usando un metodo,podrian ir probando con el getall u otros que son de busqueda
'llama a todos gv_idioma.DataSource = IdiomaRB.Getall
'llama por codigo  gv_idioma.DataSource = IdiomaRB.Getone(txt_buscar.text)
'y asi pueden seguir con los metodos de busqueda
        gv_idioma.DataSource = IdiomaRB.GetOne3(txt_buscar.Text)
        gv_idioma.DataBind()
    End Sub

    Protected Sub btn_nuevo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_nuevo.Click
        'abre ventana popup nuevo idioma y desabilita los botones editar y eliminar
'y redirige a la pagina idioma
         btn_editar.Enabled = False
        btn_eliminar.Enabled = False
        Response.Redirect("T_Idioma.aspx")
    End Sub

    Protected Sub btn_editar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_editar.Click
'solo se llama ala pagina editar idioma cuando seleccioamos la fila en el gridview
        btn_editar.Attributes.Add("onclick", "javascript:ir2();")
        Response.Redirect("T_Idioma.aspx")
    End Sub

    Protected Sub btn_eliminar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_eliminar.Click
'actuliza el dato con el campo estado inabilitado, no lo elimina
        Dim item As New Layer_Entity.Idioma
        Dim codi As String
        codi = gv_idioma.SelectedRow().Cells(1).Text
        item.Codigo = codi
        IdiomaRB.Update2(item)
        Response.Redirect("T_Idioma.aspx")
    End Sub

    Protected Sub gv_idioma_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles gv_idioma.SelectedIndexChanged
'guarda la infomacion de cada celda de la fila seleccionada en variables session
'para que puedan ser usadas en otras paginas esos datos
        Session("Dato_Idioma1") = gv_idioma.SelectedRow().Cells(1).Text
        Session("Dato_Idioma2") = gv_idioma.SelectedRow().Cells(2).Text
        Session("Dato_Idioma3") = gv_idioma.SelectedRow().Cells(3).Text
        Session("Pasa") = "si"
        btn_editar.Enabled = True
        btn_eliminar.Enabled = True
    End Sub

    Private Sub gv_idioma_SelectedIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gv_idioma.PageIndexChanging
'permite seguir con la paginacion del gridview tener en cuenta en colcoar la sproiedades sombreadas
' en el evento changing del griview
        gv_idioma.DataSource = MonedaRB.GetOne3(txt_buscar.Text)
        gv_idioma.PageIndex = e.NewPageIndex
        gv_idioma.DataBind()
    End Sub
End Class


Paso 4 Pagina Popup Nuevo Idioma. agregar los siguientes controles
los que estan en rojo son requiredfilevalidator, tener en cuenta algunas de sus propiedades como
controltovalidate(controlq eu validaemos),errormesage(colocar mensaje de respuesta al error),validationgroup, aqui colocar un nombre que sera relacionado con el boton ingresar que eatmbien tiene esa propiedad que debe estar escrita ahi tambien, en el caso del dropdownlist como lo lleno con una dato en -1 en mi codigo que es igual a seleccione....... se pone el -1 en la propiedad  initial value del rfv quee sta controlando a ese control drop, solo en el caso del drop, lo mismo se dara en el popup editar idioma

Paso 5 codigo dentro del codebehind

Imports Layer_Entity
Imports Layer_Rules
Public Class T_Idioma_Nu
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'llama en el drop detalle de tabla  estado      
If Not IsPostBack Then
            ddl_estado.DataSource = EstadoRB.GetAll2
            ddl_estado.DataTextField = "Estado"
            ddl_estado.DataValueField = "Cod_estado"
            ddl_estado.DataBind()
'agrega un nuevo item
            ddl_estado.Items.Insert(0, New ListItem("Seleccionar Estado", "-1"))
        End If
    End Sub

    Protected Sub btn__Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_ingresar.Click
       'agrega nuevo registro
      Dim item As New Layer_Entity.Idioma
        item.Idioma = txt_idioma.Text
        item.Estado = ddl_estado.SelectedValue
        item.Codigo = IdiomaRB.Insert(item)
    End Sub

    Protected Sub btn_cancelar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_cancelar.Click
       'cierra ventana popup
Dim strscript As String = "<script language=javascript>window.top.close();</script>"
        If (Not Page.IsStartupScriptRegistered("clientScript")) Then
            Page.RegisterStartupScript("clientScript", strscript)
        End If
    End Sub
End Class


Pagina Popup Editar Idioma

Codigo en codebehind
Imports Layer_Entity
Imports Layer_Rules
Public Class T_Idioma_Ed
    Inherits System.Web.UI.Page
    Dim datoidioma As String
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            ddl_estado.DataSource = EstadoRB.GetAll2
            ddl_estado.DataTextField = "Estado"
            ddl_estado.DataValueField = "Cod_estado"
            ddl_estado.DataBind()
            ddl_estado.Items.Insert(0, New ListItem("Seleccione...", "-1"))
        End If

'pasamos las variables guardadas cuando seleccionamod en el grid y la almacenamos en los controles
        If Session("Pasa") = "si" Then
            lbl_codigo.Text = Page.Server.HtmlDecode(Session("Dato_Idioma1"))
            txt_idioma.Text = Page.Server.HtmlDecode(Session("Dato_Idioma2"))
            datoidioma = Page.Server.HtmlDecode(Session("Dato_Idioma3")).ToString
            ddl_estado.Items.FindByText(datoidioma).Selected = True
            Session("Pasa") = "no"
        End If
    End Sub

   
    Protected Sub btn_actualizar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_actualizar.Click

'codigo para editar registro
        Dim item As New Layer_Entity.Idioma
        Dim codi As String
        codi = lbl_codigo.Text
        item.Codigo = codi
        item.Idioma = txt_idioma.Text
        item.Estado = ddl_estado.SelectedValue
        IdiomaRB.Update(item)

'cerrar ventana popup despues de editar
        Dim strscript As String = "<script language=javascript>window.top.close();</script>"
        If (Not Page.IsStartupScriptRegistered("clientScript")) Then
            Page.RegisterStartupScript("clientScript", strscript)
        End If
    End Sub

    Protected Sub btn_cancelar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_cancelar.Click

'cerrar ventana popup
        Dim strscript As String = "<script language=javascript>window.top.close();</script>"
        If (Not Page.IsStartupScriptRegistered("clientScript")) Then
            Page.RegisterStartupScript("clientScript", strscript)
        End If
    End Sub

End Class




a parte de todo eso en el poyecto web abrir el archivo web.config para establecer la conexion y escribir el siguiente codigo

<connectionStrings>
    <add name="cnDataBase" connectionString="Server = servidor; Initial Catalog = Bd; Uid=sa; Password = pass"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

y bueno eso es todo a continuacion unos panatallazos sde como se hace mantenimeitno a la tabla idiomas








espero que les sirva y cualquier cosa solo pregunten.....

Vazagho  Peru