Principales respuestas
VB2008 - Llamar una clase desde la capa Data - Negocio - Presentación

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 ClassPublic Function Acc_BuscarRelojes(ByVal Maquina As Integer, ByVal Tarjeta As Double) As List(Of Tarjeta)
Dim Lista As List(Of Tarjeta) = ........
Return Lista
End FunctionCAPA 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
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- Propuesto como respuesta Leandro TuttiniMVP jueves, 22 de julio de 2010 3:27
- Marcado como respuesta Marco Elgueta viernes, 23 de julio de 2010 23: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 -
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 ClassCAPA NEGOCIO
Public Class Tarjeta
Implements ICloneablePublic 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 StringPublic 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 StringPublic 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 IntegerPublic Function Clone() As Object Implements ICloneable.Clone
Dim item As New Tarjetaitem.Hora = Hora
item.Reloj = Reloj
item.Tole = ToleReturn item
End Function
End ClassCAPA 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 -
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 -
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 ClassLa 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.
-
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 -
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 ClassPublic 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 FunctionEnd Class
CAPA NEGOCIO
Public Class BOTarjetas
Public Function Tarjeta()
Dim oTar As New Data.TarjetaTarjeta = oTar
Return Tarjeta
End Function
End ClassPublic 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 TryReturn Acc_BuscarRelojes
End FunctionEnd 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
-
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- Propuesto como respuesta Leandro TuttiniMVP jueves, 22 de julio de 2010 3:27
- Marcado como respuesta Marco Elgueta viernes, 23 de julio de 2010 23: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.
-
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 -
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