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 :

Liaison Odata pour importation dans Excel [Débutant]


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 Liaison Odata pour importation dans Excel
    Bonjour,

    Je m'essaie à l'Odata pour faire une extraction vers Excel. Je souhaite donner access qu'à une requête Linq.

    Dans mon projet je fais ajouter->nouvel élément->WCF Dataservice 5.6 (je suis sous visual studio 2013)

    Mon fichier : WcfDevis.svc
    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
    Imports System.Data.Services
    Imports System.Data.Services.Common
    Imports System.Linq
    Imports System.ServiceModel.Web
     
    Public Class WcfDevis
        ' TODO: replace [[class name]] with your data class name
        Inherits DataService(Of SOPCZEntities)
     
        ' This method is called only once to initialize service-wide policies.
        Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
            ' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            ' Examples:
            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, r = GetRentabiliteDevis(d))
                Return (From v In q.ToList Select New Excel With { _
                        .Dte = v.d.Dte, .Client = v.d.Devi.ClientSiteChantier.ClientSite.Client.Libelle, _
                        .NumChantier = v.d.Devi.ClientSiteChantier.CodeChantier, .LibChantier = v.d.Devi.ClientSiteChantier.LibelleAdresse, _
                        .NumDevis = IO.Path.GetFileNameWithoutExtension(v.d.PathFile), .LibDevis = v.d.Devi.Libelle, _
                        .Service = v.d.Devi.Collaborateur.Service1.Libelle, .Collaborateur = v.d.Devi.Collaborateur.Nom & " " & v.d.Devi.Collaborateur.Prenom, _
                        .MntDeboursHT = v.r.CoutReel, .MntVenteHT = v.r.PrixVente, _
                        .CoefNet = v.r.CoefReel, .MargeNet = v.r.Marge, _
                        .Etat = GetFullEtatsCmd.Find(Function(p) p.Id = v.d.Devi.Etat).Libelle}).ToList
            Catch ex As Exception
                HelperJournal.WriteException(ex)
                Return New Excel
            End Try
        End Function
    End Class
    que je mets dans le dossier "Extraction" à la racine de mon projet

    Comme je suis en authentification windows, j'ai mis dans mon web.config
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <location path="Extraction/WcfDevis.svc">
    		<system.web>
    			<authorization>
    				<allow users="*" />
    			</authorization>
    		</system.web>
    	</location>

    Mais quand je veux le mettre dans Excel (ou l'ouvrir directement par IE) ça ne marche pas.
    liaison : http://localhost:63888/Extraction/Wc...xtractionDevis
    J'ai erreur 500.
    Sous Excel j'ai pu retrouver dans le journal
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    - <System>
    <Provider Name="Microsoft Office 15 Alerts" />
    <EventID Qualifiers="0">300</EventID>
    <Level>4</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2016-04-20T12:14:34.523766900Z" />
    <EventRecordID>143</EventRecordID>
    <Channel>OAlerts</Channel>
    <Computer>Pro</Computer>
    <Security />
    </System>
    - <EventData>
    <Data>Microsoft Excel</Data>
    <Data>Impossible d'obtenir la liste des tables à partir de la source de données.</Data>
    <Data>700151</Data>
    <Data>15.0.4815.1000</Data>
    <Data />
    <Data />
    </EventData>
    </Event>
    Comme c'est la 1ere fois que je me mets à l'Odata... 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
    J'ai pris conscience de la complexité du bazars, alors j'ai fais une version simple, dans un projet à part sans identification

    Code vb.net : 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
    Imports System.Data.Services
    Imports System.Data.Services.Common
    Imports System.Linq
    Imports System.ServiceModel.Web
     
    Public Class Excel
        Property Dte As Date
        Property Client As String
        Property NumChantier As String
        Property LibChantier As String
        Property NumDevis As String
        Property LibDevis As String
        Property Service As String
        Property Collaborateur As String
        Property MntDeboursHT As Decimal
        Property MntVenteHT As Decimal
        Property CoefNet As Decimal
        Property MargeNet As Decimal
        Property Etat As String
    End Class
     
    Public Class SOPCZ
        ' TODO: replace [[class name]] with your data class name
        Inherits DataService(Of [SOPCZEntities])
     
        ' This method is called only once to initialize service-wide policies.
        Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
            ' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            ' Examples:
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead)
            config.SetServiceOperationAccessRule("GetExtractionDevis", ServiceOperationRights.All)
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3
     
            config.UseVerboseErrors = True
     
        End Sub
     
        <WebGet()> _
        Public Shared 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

    Sous Excel j'essai de faire la liaison : erreur 500 internal error....

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

  3. #3
    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
    Ca progresse. J'ai trouver comment faire voir les erreurs. Dans le fichier Web.config
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
            <listeners>
              <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="E:\Site internet\LogsApplis\SOPCZ/Traces.svclog"/>
            </listeners>
          </source>
        </sources>
      </system.diagnostics>

    Et la je trouve :
    Une expression de type 'System.Data.Entity.Core.Objects.ObjectContext' ne peut pas être utilisée pour un type de retour 'System.Data.Objects.ObjectContext'
    Je poursuit ma recherche. J'ai WCF 5.6 et EF 6.1.3... Si j'en crois un site il y a une incompatibilité entre les 2. Il faut faire une modification. Installer un package Nuget (j'ai fait) puis remplacer Dataservice par EntityFrameworkDataService. Je veux bien mais en VB, il me dit que EntityFrameworkDataService n'existe pas (même en faisant import System.Data.Services.Providers... Tous les exemples que je trouve sont en c#...

    J'ai même fais la mise à jour WCF 5.3.2... Quelqu'un aurait déjà eu le problème?

    J'ai aussi 2 Warning. Le 1er dit qu'il faut que je réinstall les paquets EntityFrameWork et EntityFrameWork.fr car pas installer avec la bonne architecture. (Update-Package –reinstall <packageName>) Fait mais toujours le même problème

    Le second : des conflits entre différentes versions du même assembly dépendant ont été trouvés, .. non résolus...
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  4. #4
    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 Un pas de plus
    J'ai vu sur un post, un mec qui à supprimer tous ses package Nuget et réinstaller EntityFrameWork, Microsoft ASP.NET Web API 2.2 for odata v1-3 + v4 et WCF Data services entityFrameWork Provider...
    Ca m'a pris 2H... mais maintenant j'ai EntityFrameWorkDataService ...

    Attention, cette solution n'est valable que si vous voulez retourner une entité issu de votre model et si vous êtes en EF>6 et WCF 5.6 (dans le post ci-dessus SOPCZEntities), d'ailleurs DataService(of SOPCZEntities) ou EntityFrameWorkDataService(of SOPCZEntities) Mais le nom EntityFrameworkDataService est déjà plus parlant.

    Si vous voulez comme je le souhaitais extraire des données de l'Entities et renvoyé une nouvelle class, suivez mon autre post:
    http://www.developpez.net/forums/d15...-class-vb-net/
    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. Réponses: 3
    Dernier message: 30/04/2012, 17h39
  2. requêtes Mysql pour importer dans Excel ?
    Par dreamover dans le forum Requêtes
    Réponses: 4
    Dernier message: 09/03/2009, 15h05
  3. Activate pour écrire dans excel
    Par LePtitVever dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/05/2007, 15h01
  4. Importer dans excel
    Par Dgyles dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 07h57
  5. problème pour importer données excel dans Access
    Par sarah67 dans le forum Access
    Réponses: 8
    Dernier message: 20/02/2006, 08h17

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