none
VB2008 - Llamar una clase desde la capa Data - Negocio - Presentación RRS feed

  • Pregunta

  • Estimandos,

    tengo la siguiente clase que contiene unos parámetros de un List() y necesito llamarla en mi capa de presentación pero no se como hacerlo:

    CAPA DATA

    Public Class Tarjeta
        Public Hora As String
        Public Reloj As String
        Public Tole As String
    End Class

    Public Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Tarjeta)

     Dim Lista As List(Of Tarjeta) = ........

     Return Lista
    End Function

    CAPA NEGOCIO ????

    CAPA PRESENTACION ????? >>> es aqui donde deseo llamarla para llenar un listview con los registros.

     For Each item As ?????? In oSAL.Acc_BuscarRelojes(Maquina, Folio)

    Hora = CStr(item.Hora.ToString)
    Reloj = CStr(item.Reloj.ToString)

    COMO LLENO EL LISTVIEW ?????

    Next

    Gracias de ante mano

    martes, 20 de julio de 2010 22:22

Respuestas

  • hola

    algo que imagino tienes pero es bueno validarlo, es si has agregado al referencia desde tu proyrcto que representa la capa de negocio

     

    un consejo la clase BOTarjetas quitala no hace falta, ya que trabajas directo con la entidad definida en la capa de datos

    es mas en la capa de negocio estas devolviendo esta entidad

    Public Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Data.Tarjeta )

     

    por lo tanto cuando haces el For Each esta es tambien la que debes usar

    For Each item As Data.Tarjeta In oSAL.Acc_BuscarRelojes(Maquina, oFolio)

    Next

     

    eso si seguro vas a tener que hacer una referencia desde tu capa de presentacion a la de datos, para tener disponible la entidad Tarjeta

     

    en este otro link veras un poco como es la idea

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion- Parte 2

    si bien aun el ejmeplo no apunta a la capa de negocio, veras que es la entidad que se devuelve la que se debe usar en la presentacion, veras como se creo un tercer proyecto donde se definen las entidades

    de esta forma todas las capas referencia a entity, pero la presentacion no necesita referenciar al proyecto de datos

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 22 de julio de 2010 3:27

Todas las respuestas

  • hola

    la capa de negocio la estas implementando o solo conectas la capa de prsentacion con la de Datos ?

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion - Parte 2

    por ahi el link te aclara un poco el tema

    lo mas simple es que la capa de datos la crees estatica (Shared) asi accedes directo a los metodos

    Dim Lista As List(Of Tarjeta)  = DataAccess.Acc_BuscarRelojes(....)

    For Each item As Tarjeta In Lista

     'aqui cargas el listview

    Next

    [Winforms] - ListView, como usarlos y pasar ítem entre ellos

    en el ultimo link veras como cargar los items

    Nota: use DataAccess porque lo declare como Shared, no necesito instanciarlo

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 20 de julio de 2010 22:49
  • Leandro,

    he tratado de implementarlo pero no me funciona:

    CAPA DATO

    Public Class Tarjeta
        Public Hora As String
        Public Reloj As String
        Public Tole As String
    End Class

    CAPA NEGOCIO

    Public Class Tarjeta
        Implements ICloneable

        Public Property Hora() As String
            Get
                Return m_Hora
            End Get
            Set(ByVal value As String)
                m_Hora = value
            End Set
        End Property
        Private m_Hora As String

        Public Property Reloj() As String
            Get
                Return m_Reloj
            End Get
            Set(ByVal value As String)
                m_Reloj = value
            End Set
        End Property
        Private m_Reloj As String

        Public Property Tole() As Integer
            Get
                Return m_Tole
            End Get
            Set(ByVal value As Integer)
                m_Tole = value
            End Set
        End Property
        Private m_Tole As Integer

        Public Function Clone() As Object Implements ICloneable.Clone
            Dim item As New Tarjeta

            item.Hora = Hora
            item.Reloj = Reloj
            item.Tole = Tole

            Return item
        End Function
    End Class

    CAPA PRESENTACION

    For Each item As Business.Tarjeta In oSAL.Acc_BuscarRelojes(Maquina, oFolio) >> Error 1 Un valor de tipo 'Data.Tarjeta' no se puede convertir en 'Business.Tarjeta'. 
    Next

     

    martes, 20 de julio de 2010 23:21
  • hola

    pero segun veo alli tienes declarado dos clases iguales en diferentes proyectos ?

    o sea esta al clase Tarjeta en Business y la misma en Data, porque es que tienes dos clases ?

    por ahi podrias hacer

    For Each item As Data .Tarjeta In oSAL.Acc_BuscarRelojes(Maquina, oFolio)

    Next

    de esta forma deberia funcionar

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 21 de julio de 2010 12:05
  • Leandro,

    lo que sucede es que la clase de la capa Dato es la oficial:

    Public Class Tarjeta
        Public Hora As String
        Public Reloj As String
        Public Tole As String
    End Class

    La que se encuentra en la capa negocio, es una tentativa para devolver los datos desde Datos a Negocio. Pero no se si está bien implementada. Mi idea que poder llamar a la capa de Dato desde la capa de Presentación. Obviamente, pasando por la de negocio.

    miércoles, 21 de julio de 2010 13:14

  • pero entonces Business.Tarjeta de donde sale ?

    digo has definido la clase Tarjeta en la entidad de Business ?

     

    lo que deberias hacer es que negocio sea solo un pasamano, pero este debe devolver Dato.Tarjeta, no crear una entidad nueva en su capa

     

    Public Class BOTarjetas

     Public Function Dato.Tarjeta Acc_BuscarRelojes(Maquina, oFolio)

         'aqui invocas a la capa de datos

     End Function

    End Class

     

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 21 de julio de 2010 15:07
  • No puedo lograr que funcione, que parte estaré haciendo mal?

    CAPA DATOS

    Public Class Tarjeta
        Public Hora As String
        Public Reloj As String
        Public Tole As String
    End Class

    Public Class Salida

        Public Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Tarjeta)
            Dim datatable1 As New DataTable()
            Dim datatable2 As New DataTable()

            Dim strSQL1 As String = "SELECT Numero, LEFT(Nombre, 11) AS Reloj " & _
                                    "FROM Relojes"

            Dim strSQL2 As String = "SELECT NumControl, Tolerancia, Ubicacion, Format (FechaHorario, 'hh:mm') AS Hora " & _
                                    "FROM " & Maquina & " " & _
                                    "WHERE NumSalida = " & Tarjeta & ""

            cx.ConectarAccess("DB1")
            cx.pSQLAdaptador = New OleDbDataAdapter(strSQL1, cx.pSQLcon)
            cx.pSQLAdaptador.Fill(datatable1)

            cx.ConectarAccess("DB2")
            cx.pSQLAdaptador = New OleDbDataAdapter(strSQL2, cx.pSQLcon)
            cx.pSQLAdaptador.Fill(datatable2)

            Dim Lista As List(Of Tarjeta) = (From dt1 In datatable1.AsEnumerable() _
                            Join dt2 In datatable2.AsEnumerable() On dt1.Field(Of Double)("Numero") Equals dt2.Field(Of Double)("NumControl") _
                            Order By dt2.Field(Of Integer)("Ubicacion") Ascending _
                            Select New Tarjeta() With { _
                            .Hora = dt2.Field(Of String)("Hora"), _
                            .Tole = dt2.Field(Of Double)("Tolerancia"), _
                            .Reloj = dt1.Field(Of String)("Reloj")}).ToList()

            Return Lista
        End Function

    End Class

     

    CAPA NEGOCIO

     Public Class BOTarjetas
        Public Function Tarjeta()
            Dim oTar As New Data.Tarjeta

            Tarjeta = oTar

            Return Tarjeta
        End Function
    End Class

    Public Class Salida

        Public Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Data.Tarjeta)
            Try
                Return SAL.Acc_BuscarRelojes(Maquina, Tarjeta)
            Catch ex As TechnicalException
                Throw
            End Try

            Return Acc_BuscarRelojes
        End Function

    End Class

     

    CAPA PRESENTACION

      For Each item As Business.BOTarjetas In oSAL.Acc_BuscarRelojes(Maquina, oFolio)

                  >>> ERROR: Un valor de tipo 'Data.Tarjeta' no se puede convertir en 'Business.BOTarjetas'.

      Next

    jueves, 22 de julio de 2010 0:58
  • hola

    algo que imagino tienes pero es bueno validarlo, es si has agregado al referencia desde tu proyrcto que representa la capa de negocio

     

    un consejo la clase BOTarjetas quitala no hace falta, ya que trabajas directo con la entidad definida en la capa de datos

    es mas en la capa de negocio estas devolviendo esta entidad

    Public Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Data.Tarjeta )

     

    por lo tanto cuando haces el For Each esta es tambien la que debes usar

    For Each item As Data.Tarjeta In oSAL.Acc_BuscarRelojes(Maquina, oFolio)

    Next

     

    eso si seguro vas a tener que hacer una referencia desde tu capa de presentacion a la de datos, para tener disponible la entidad Tarjeta

     

    en este otro link veras un poco como es la idea

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion- Parte 2

    si bien aun el ejmeplo no apunta a la capa de negocio, veras que es la entidad que se devuelve la que se debe usar en la presentacion, veras como se creo un tercer proyecto donde se definen las entidades

    de esta forma todas las capas referencia a entity, pero la presentacion no necesita referenciar al proyecto de datos

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 22 de julio de 2010 3:27
  • Leandro,

    efectivamente cargando la referencia, en la capa de presentación, me resultó.

    Pero estará bien que la capa datos sea "vista" directamente desde la capa presentación? Como tu dices, negocio es un "pasamanos" entre datos y presentación.

    Mi proyecto está estructurado así:

    Proyecto Data >>> No depende de nadie

    Proyecto Negocio >>> Depende de Data

    Proyecto Presentación >>> Depende de Negocio

    Creo que lo más sano sería mantener dicha estructura, porque después de agregar la capa quedó de la siguiente forma:

    Proyecto Presentación >>> Depende de Negocio y Data

    Mi idea inicial, era buscar una forma de como llamar la clase tarjeta desde negocio y luego poder utilizarla en la capa presentación.

     

    jueves, 22 de julio de 2010 4:07
  • hola

    lo ideal seria que desde la presentacion solo converses con el negocio

    o sea la presentacion no tenga referencia a la capa de datos

    para lograr esto als entidades debes definirlas en un proyecto separado, como explico en el linkdel mensaje anterior

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 22 de julio de 2010 4:20
  • Leandro,

    Cree un proyecto llamado "Entities" en el cual está alojado la clase Tarjeta. Luego los agregué las referencia en la capa Data y Presentación para poder utilizar la Clase. Quedando mi proyecto estructurado así:

    Proyecto Data >>> Depende de Entities

    Proyecto Negocio >>> Depende de Data

    Proyecto Presentación >>> Depende de Negocio y Entities

    Funcionó y te agradesco por tu gran colaboración.

    Muchas gracias.

    • Marcado como respuesta Marco Elgueta viernes, 23 de julio de 2010 23:26
    • Desmarcado como respuesta Marco Elgueta viernes, 23 de julio de 2010 23:26
    jueves, 22 de julio de 2010 4:37