IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

EndPoint Odata depuis une class en VB.net


Sujet :

Accès aux données

  1. #1
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut EndPoint Odata depuis une class en VB.net
    Bonjour,

    Comme dis dans un précédent post, j'ai avancé mais je bute à nouveau sur une erreur.

    Mon code
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Imports System.Data.Services
    Imports System.Data.Services.Common
    Imports System.Linq
    Imports System.ServiceModel.Web
    Imports System.Data.Services.Providers
     
    Public Class Excel
        Public Property Dte As Date
        Public Property Client As String
        Public Property NumChantier As String
        Public Property LibChantier As String
        Public Property NumDevis As String
        Public Property LibDevis As String
        Public Property Service As String
        Public Property Collaborateur As String
        Public Property MntDeboursHT As Decimal
        Public Property MntVenteHT As Decimal
        Public Property CoefNet As Decimal
        Public Property MargeNet As Decimal
        Public Property Etat As String
    End Class
     
    Public Class test
        ' TODO: replace [[class name]] with your data class name
        Inherits EntityFrameworkDataService(Of SOPCZEntities)
     
        ' This method is called only once to initialize service-wide policies.
        Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead)
            config.SetServiceOperationAccessRule("GetExtractionDevis", ServiceOperationRights.All)
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3
     
     
            config.UseVerboseErrors = True
        End Sub
     
        <WebGet()> _
        Public Function GetExtractionDevis() As IQueryable(Of Excel)
            Try
                Dim LesDatas As New SOPCZEntities
                Dim q = (From d In LesDatas.DevisVersions Where d.Version = d.Devi.DevisVersions.Count Select d)
                Return (From v In q.ToList Select New Excel With { _
                        .Dte = v.Dte, .Client = v.Devi.ClientSiteChantier.ClientSite.Client.Libelle, _
                        .NumChantier = v.Devi.ClientSiteChantier.CodeChantier, .LibChantier = v.Devi.ClientSiteChantier.LibelleAdresse, _
                        .NumDevis = IO.Path.GetFileNameWithoutExtension(v.PathFile), .LibDevis = v.Devi.Libelle, _
                        .Service = v.Devi.Collaborateur.Service.Libelle, .Collaborateur = v.Devi.Collaborateur.Nom & " " & v.Devi.Collaborateur.Prenom, _
                        .MntDeboursHT = 0, .MntVenteHT = 0, _
                        .CoefNet = 0, .MargeNet = 0, _
                        .Etat = "test"}).AsQueryable
            Catch ex As Exception
                Return New Excel
            End Try
        End Function
     
    End Class

    Message d'erreur
    Impossible de charger les métadonnées pour le type de retour 'System.Linq.IQueryable`1[Odata.Excel]' de la méthode 'System.Linq.IQueryable`1[Odata.Excel] GetExtractionDevis()'.</Message><StackTrace> à System.Data.Services.Providers.ServiceOperationProvider.GetServiceOperationForMethod(MethodInfo method, String protocolMethod)
    Si j'ai bien compris ce qui ce dit sur Google, je ne peux pas envoyer une class directement, faut que je transforme mon type de retour en Entity.
    C'est là que je suis perdu, je trouve plein d'exemple différent en c# mais rien en vb.net et je n'arrive pas à le transcrire sur ma class "Excel".

    Merci de votre aide
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  2. #2
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    A force d'essayer ... on fini par trouver.
    Le problème est sur le type de retour. Comme expliquer ici http://www.developpez.net/forums/d15...rtation-excel/

    Je souhaitais en fait envoyer ma propre class qui est un recoupement d'informations et de calcul ... et non une Entité issu de mon model edmx.

    Dans ce cas, il fallait faire des recherches sur odata sans EntityframeWork.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Imports System
    Imports System.Collections.Generic
    Imports System.Data.Services
    Imports System.Data.Services.Common
    Imports System.Linq
     
    <DataServiceKeyAttribute("IdVersion")> _
    Public Class ExcelDevi
        Public Property IdVersion As Integer
        Public Property Dte As Date
        Public Property Client As String
        Public Property NumChantier As String
        Public Property LibChantier As String
        Public Property NumDevis As String
        Public Property LibDevis As String
        Public Property Service As String
        Public Property Collaborateur As String
        Public Property MntDeboursHT As Decimal
        Public Property MntVenteHT As Decimal
        Public Property CoefNet As Decimal
        Public Property MargeNet As Decimal
        Public Property Etat As String
    End Class
     
    Partial Public Class DevisItemData
     
        Shared _excels As IList(Of ExcelDevi)
     
        Sub New()
            Try
                Dim LesDatas As New SOPCZEntities
                Dim q = (From d In LesDatas.DevisVersions Where d.Version = d.Devi.DevisVersions.Count Select d)
                _excels = (From v In q.ToList Select New ExcelDevi With { _
                       .IdVersion = v.IdVersion, .Dte = v.Dte, .Client = v.Devi.ClientSiteChantier.ClientSite.Client.Libelle, _
                        .NumChantier = v.Devi.ClientSiteChantier.CodeChantier, .LibChantier = v.Devi.ClientSiteChantier.LibelleAdresse, _
                        .NumDevis = IO.Path.GetFileNameWithoutExtension(v.PathFile), .LibDevis = v.Devi.Libelle, _
                        .Service = v.Devi.Collaborateur.Service.Libelle, .Collaborateur = v.Devi.Collaborateur.Nom & " " & v.Devi.Collaborateur.Prenom, _
                        .MntDeboursHT = 0, .MntVenteHT = 0, _
                        .CoefNet = 0, .MargeNet = 0, _
                        .Etat = "test"}).ToList
            Catch ex As Exception
                _excels = Nothing
            End Try
        End Sub
     
        Public ReadOnly Property ExcelDevis() As IQueryable(Of ExcelDevi)
            Get
                Return _excels.AsQueryable()
            End Get
        End Property
     
    End Class
     
    Public Class test
        ' TODO: replace [[class name]] with your data class name
        Inherits DataService(Of DevisItemData)
     
        ' This method is called only once to initialize service-wide policies.
        Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
            config.SetEntitySetAccessRule("ExcelDevis", EntitySetRights.All)
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3
            config.UseVerboseErrors = True
        End Sub
     
    End Class

    DataService( of ... indique le Type de retour)

    DataServiceKeyAttribute est aussi très important ça simule votre clé primaire.
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB.NET Couleur d'un onglet TabPage depuis une classe hérité
    Par vincnet68 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/05/2007, 13h42
  2. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  3. acces a uneressource bitmap depuis une classe
    Par firejocker dans le forum MFC
    Réponses: 9
    Dernier message: 03/02/2006, 21h48
  4. Réponses: 14
    Dernier message: 15/12/2005, 18h46
  5. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo