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

Services Web Discussion :

Appel SAP en C#


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Consultant technico fonctionnel
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant technico fonctionnel

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut Appel SAP en C#
    bonjour à tous,
    je dois faire un web service en C# qui appelle une fonction RFC dans SAP.
    j'arrive à la connexion et j'ai une exception COMException (paramètre non facultatif) au moment de la définition de la fonction.

    quelqu'un pourrait-il m'aider?

    voici le code :

    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
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Services;
    using SAPFunctionsOCX;
    using System.Threading;
     
    namespace testSAP
    {
        /// <summary>
        /// Description résumée de Service1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // Pour autoriser l'appel de ce service Web depuis un script à l'aide d'ASP.NET AJAX, supprimez les marques de commentaire de la ligne suivante. 
        // [System.Web.Script.Services.ScriptService]
     
        public class Service1 : System.Web.Services.WebService
        {
     
            [WebMethod]
            public void HelloWorld()
            {
                ParameterizedThreadStart parmStart =
                    new ParameterizedThreadStart(ExecuteSAP);
                Thread tr = new Thread(parmStart);
                tr.TrySetApartmentState(ApartmentState.STA);
                tr.Start();
            }
     
            private void ExecuteSAP(object test)
            {
                SAPFunctionsOCX.SAPFunctions functions = new SAPFunctionsOCX.SAPFunctions();
                SAPLogonCtrl.SAPLogonControl saplogon = new SAPLogonCtrl.SAPLogonControl();
                SAPLogonCtrl.Connection connection;
                SAPFunctionsOCX.Function function;
     
                saplogon.System = "NESSIE PEOPLE - PRODUCTION - P02";
                saplogon.Client = "700";
                saplogon.User = "FR20400";
                saplogon.Password = "xxxxxx";
                saplogon.Language = "EN";
                connection = (SAPLogonCtrl.Connection)saplogon.NewConnection();
                connection.Logon(0, true);
     
                try
                {
                    functions.Connection = connection;
                    function = (SAPFunctionsOCX.Function)functions.Add("Z_RFC_CALL_TRANSACTION");
                    SAPFunctionsOCX.Parameter exp_tcode = (SAPFunctionsOCX.Parameter)function.get_Exports("TRANCODE");
                    exp_tcode.Value = "Z_SAP_QUERY_CALL";
                    SAPFunctionsOCX.Structure exp_opt=(SAPFunctionsOCX.Structure)function.get_Exports("I_OPTIONS");
                    exp_opt["DISMODE"] = "N";  //"A" '"E","N"
                    exp_opt["UPDMODE"] = "S";
                    exp_opt["DEFSIZE"] = "X";
                    exp_opt["RACOMMIT"] = "X";
     
                    SAPTableFactoryCtrl.Tables tbls = (SAPTableFactoryCtrl.Tables)function.Tables;
                    SAPTableFactoryCtrl.Table tbl_bdcresult = (SAPTableFactoryCtrl.Table)tbls["O_MSGTABLE"];
                    SAPTableFactoryCtrl.Table tbl_bdcdata = (SAPTableFactoryCtrl.Table)tbls["BDCTABLE"];
                    SAPTableFactoryCtrl.Row row_bdcdata;
     
                     //Jusque là ça marche
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["PROGRAM"] = "ZSAP_QUERY_CALL"; //ça plante sur cette ligne
                    row_bdcdata["DYNPRO"] = "1000";
                    row_bdcdata["DYNBEGIN"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "P_WSID";
                    row_bdcdata["FVAL"] = "";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "P_UGROUP";
                    row_bdcdata["FVAL"] = "HR_FR";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "P_QUERY";
                    row_bdcdata["FVAL"] = "STAFF";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "P_VARI";
                    row_bdcdata["FVAL"] = "AWL";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "BDC_OKCODE";
                    row_bdcdata["FVAL"] = "=ONLI";
     
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["PROGRAM"] = "AQQO" + "HR_FR" + new String('=',7) + "STAFF" + new String('=',9);
                    row_bdcdata["DYNPRO"] = "1000";
                    row_bdcdata["DYNBEGIN"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "%DOWN";
                    row_bdcdata["FVAL"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "BDC_OKCODE";
                    row_bdcdata["FVAL"] = "=ONLI";
     
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["PROGRAM"] = "SAPLAQDW";
                    row_bdcdata["DYNPRO"] = "200";
                    row_bdcdata["DYNBEGIN"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "RLGRAP-FILETYPE";
                    row_bdcdata["FVAL"] = "DAT";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "RLGRAP-FILENAME";
                    row_bdcdata["FVAL"] = @"D:\Staff.txt";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "RSAQDOWN-COLUMN";
                    row_bdcdata["FVAL"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "BDC_OKCODE";
                    row_bdcdata["FVAL"] = "=SEND";
     
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["PROGRAM"] = "AQQO" + "HR_FR" + new String('=', 7) + "STAFF" + new String('=', 9); ;
                    row_bdcdata["DYNPRO"] = "1000";
                    row_bdcdata["DYNBEGIN"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "BDC_OKCODE";
                    row_bdcdata["FVAL"] = "/EE";
     
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["PROGRAM"] = "ZSAP_QUERY_CALL";
                    row_bdcdata["DYNPRO"] = "1000";
                    row_bdcdata["DYNBEGIN"] = "X";
                    row_bdcdata = (SAPTableFactoryCtrl.Row)tbl_bdcdata.AppendRow();
                    row_bdcdata["FNAM"] = "BDC_OKCODE";
                    row_bdcdata["FVAL"] = "/EE";
     
                   function.Call();
     
                }
                finally
                {
                    connection.Logoff();
                }
            }
        }
     
    }
    l'exception est la suivante :
    l'exception COMException n'a pas été gérée :
    Paramètre non facultatif. (Exception de HRESULT : 0x8002000F (DISP_E_PARAMNOTOPTIONAL))
    si quelqu'un a déjà fait de la programmation COM en C# et sait gérer ce genre d'erreur, pourrait-il m'aiguiller. je suis novice en C#.

    merci d'avance

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par jeromecaux Voir le message
    bonjour à tous,
    je dois faire un web service en C# qui appelle une fonction RFC dans SAP.
    j'arrive à la connexion et j'ai une exception COMException (paramètre non facultatif) au moment de la définition de la fonction.
    .....
    si quelqu'un a déjà fait de la programmation COM en C# et sait gérer ce genre d'erreur, pourrait-il m'aiguiller. je suis novice en C#.
    Bonjour,

    ce que ton messaeg veut dire, c'est qu'il manque un paramètre a l'appel de ta fonction.

    malheureusement, il va falloir que tu te plonges dans l'API des appels COM a SAP

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre habitué
    Profil pro
    Consultant technico fonctionnel
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant technico fonctionnel

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    merci d'avoir répondu.
    je l'avais bien compris. malheureusement, l'API est très mal documenté et l'aide en ligne fourni par SAP est vraiment ridicule.

    c'est pour cette raison que je me suis adressé à ce forum.

    j'espère que quelqu'un qui, soit connait bien la programmation COM, ou a déjà développé avec les OCX SAP pourrait m'aiguiller sur ce paramètre manquant.

    cordialement

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2018, 13h45
  2. Exemple d'appel BAPI SAP RFC_READ_TABLE
    Par indygege dans le forum WinDev
    Réponses: 1
    Dernier message: 25/02/2015, 04h26
  3. SAP fait appel contre Oracle dans l'affaire TomorrowNow
    Par Gordon Fowler dans le forum Actualités
    Réponses: 27
    Dernier message: 25/02/2011, 11h00
  4. Réponses: 0
    Dernier message: 25/08/2009, 14h40
  5. Contraintes SAP pour appel de web service J2EE
    Par piwai44 dans le forum SAP
    Réponses: 0
    Dernier message: 21/01/2009, 17h48

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