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

VB.NET Discussion :

Comment se connecter à SAP en VB.Net


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Par défaut Comment se connecter à SAP en VB.Net
    Bonjour,

    Je suis en train de migrer un programme réalisé en VBA Excel vers VB en utilisant Visual Studio 2017.
    Attention : Mon programme fonctionne aussi bien en VBA qu'en VB...
    Par contre, en VB je n'arrive pas à utiliser l'"Espion" comme dans VBA !
    En VB, lorsque j'espionne l'objet sapConnection... Il m'inscrit uniquement {System.__ComObject} et je ne vois pas le détails de l'objet. Comment faire ?
    Remarque : Ni en VBA ni en VB je n'ai eu besoin de rajouter de référence pour faire fonctionner le programme. Et en VBA j'arrive bien à espionner l'objet sapConnection et il me donne bien tous les détails.

    Merci.


    Voici le code me permettant de me connecter à SAP
    Code : 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
    Module Module1
     
        Sub SAP_Connection()
     
     
            Dim objBAPIControl As Object
            Dim sapConnection As Object
     
     
     
            objBAPIControl = CreateObject("SAP.Functions")
            sapConnection = objBAPIControl.Connection
     
            TypeName(objBAPIControl)
            TypeName(sapConnection)
     
            sapConnection.ApplicationServer = "sapserver"
            sapConnection.Client = "002"
            sapConnection.User = "myname"
            sapConnection.Password = "mypw"
            sapConnection.Language = "FR"
     
     
     
            If sapConnection.Logon(0, True) <> True Then
                MsgBox("Could not connect to SAP R/3")
            End If
        End Sub
     
    End Module

  2. #2
    Invité
    Invité(e)
    Par défaut
    en fait je ne comprend pas pourquoi le modérateur t'a basculé sur ce forum, car il est possible de programmer en VB6 dans l'environnement .net mais je voulais que tu en sois conscient.


    en attendant qu'un modérateur te bascule dans le forum VB.net, je te dirais ceci!

    Code VBA sauce vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objBAPIControl AsObject=  CreateObject("SAP.Functions")    
    Dim sapConnection As Object= objBAPIControl.Connection

    est parfaitement légal mais tu n'auras pas accès à la déclinaison implicite, il faut pour cela revenir à du pure vb.net et définir tes référence aux objets intérop ou renoncer à la déclinaison implicite!

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Par défaut
    En fait mon message en vient... Je ne sait pas trop dans quelle rubrique il aurait sa bonne place.
    Je programme en Visual Basic avec Visual Studio 2017... Ce n'est peut être pas le bon logiciel ? En tous cas mon programme fonctionne bien, c'est juste galère à debugger, car je n'arrive pas à explorer cet objet... Alors qu'en VBA Excel ça marche sans rien faire.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ton message avait été mis à tore dans vba.

    Vb6 fonctionne en simplifiant les choses. Ce qui rend beaucoup plus puissant dot.net c'est qu'il n'offre pas de raccourci.

    Tu ne peux pas voir le contenu d'un objets surtout quand il est instancié avec CreateObject.

    Je sais pas si ça existe mais il faudrait un truc du genre
    Dim objBAPIControl as new SAPinterop

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Par défaut
    Donc si je comprends bien, en utilisant Visual Studio 2017, pas moyen de programmer en VB classique..., car obligatoirement on utilise .Net Framework et du coup nécessité d'utiliser l'interop de VB.Net pour pouvoir accéder à l'arborescence d'un objet COM.
    C'est juste ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    pas forcément ça dépens de la librairie!

    Nom : Sans titre.png
Affichages : 977
Taille : 19,6 Ko

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Par défaut
    ok, mais je parle de mon cas précis avec SAP, car quand je debug je vois {System.__ComObject}

    En fait quand j'exécute mon code en VBA, j'obtiens cela dans le debugger :

    objBAPIControl est de type Object/SAPFunctions
    et
    sapConnection est de type Variant/Object/CSAPLogonConnection


    du coup en VB.Net j'essaie... sans succès cela...

    Code : 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
    Imports SAPBAPIControlLib
    Imports SAPTableFactoryCtrl
    Imports SAPFunctionsOCX
     
    Module Module1
     
        Sub Main()
     
     
            Dim objBAPIControl As SAPFunctionsOCX.SAPFunctions
            Dim sapConnection As SAPLogonCtrl.SAPLogonControl
     
            'objBAPIControl = CreateObject("SAP.Functions")
            objBAPIControl = New SAPFunctions
            sapConnection = objBAPIControl.Connection
     
     
            'sapConnection.ApplicationServer = "sapserver"
            'sapConnection.Client = "002"
            'sapConnection.User = "myname"
            'sapConnection.Password = "mypw"
            'sapConnection.Language = "FR"
    mais ça plante à la ligne 15 avec le message suivant
    Une exception non gérée du type 'System.InvalidCastException' s'est produite dans TEST.exe
    Informations supplémentaires*: Impossible d'effectuer un cast d'un objet COM de type 'System.__ComObject' en type d'interface 'SAPLogonCtrl.SAPLogonControl'. Cette opération a échoué, car l'appel QueryInterface sur le composant COM pour l'interface avec l'IID '{B24944D7-1501-11CF-8981-0000E8A49FA0}' a échoué en raison de l'erreur suivante*: Cette interface n’est pas prise en charge (Exception de HRESULT : 0x80004002 (E_NOINTERFACE)). a eu lieu*

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Par défaut
    je ne sais pas si j'avance ou si je tourne en rond, mais j'ai modifié mon code mais je fais face à une nouvelle erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Sub Main()
     
            Dim objBAPIControl As New SAPLogonCtrl.SAPLogonControl
            Dim sapConnection As SAPLogonCtrl.Connection
     
            sapConnection = objBAPIControl.NewConnection
     
            sapConnection.ApplicationServer = "sapserver"
            sapConnection.Client = "002"
            sapConnection.User = "myname"
            sapConnection.Password = "mypw"
            sapConnection.Language = "FR"

    A la ligne 8, j'obtiens ce message d'erreur :
    Une exception non gérée du type 'System.AccessViolationException' s'est produite dans mscorlib.dll
    Informations supplémentaires*: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée. a eu lieu*

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne connais pas SAP, mais un "cast invalide", c'est une conversion impossible d'un objet vers un autre et, par extension, de conversion d'un type de données en un autre. VB.net a conservé le processus de conversion implicite de son ancêtre BASIC. Même si c'est bien pratique quand ça fonctionne, cette conversion se fait selon des règles immuables; et la meilleure solution c'est encore de déclarer toutes les variables et leur type et de programmer les conversions soi-même.

    Par exemple, une des conversions implicites veut que si on combine un type entier court (genre short) et un nombre en virgule flottante, ton entier devient sans ta permission, un nombre en virgule flottante, le temps de faire le calcul.

    Plus gênant encore. Quand VB combine un type short et un type Integer, le type integer devient un type short et cela plante dès qu'un résultat intermédiaire dépasse 32 767.

    Si tu as une erreur automation cela me semble être que VB envoie à SAP, ou récupère de SAP un type de donnée imprévu et VB n'est pas capable de démêler l'écheveau.

    Mais bon, peut-être que quelqu'un familier avec SAP va surgir avec plus de précision...

Discussions similaires

  1. Connection SAP/.NET Mobile
    Par ludovic.fernandez dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 30/03/2009, 10h59
  2. Réponses: 7
    Dernier message: 02/03/2009, 12h15
  3. [VB.Net/SqlServer] Comment se connecter ?
    Par Pedro Varela dans le forum Accès aux données
    Réponses: 6
    Dernier message: 25/08/2006, 15h48
  4. [ADO.Net][VB.NET]Comment se connecter à une base MySql ?
    Par Abdel58 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/03/2006, 17h37
  5. [OOo2] Comment se connecter sous vb6/.net ?
    Par NiamorH dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 08/02/2006, 14h12

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