Partager via


Appeler des RFC dans SAP à l’aide du modèle de service WCF

L’adaptateur Microsoft BizTalk pour mySAP Business Suite expose les RFC sur le système SAP en tant qu’opérations qui peuvent être appelées par un programme client. Dans le modèle de service WCF, ces opérations sont appelées en tant que méthodes d’une classe de client WCF générée. Vous pouvez utiliser le plug-in Visual Studio Add Adapter Service Reference pour générer une classe de client WCF qui contient des méthodes pour chaque RFC que vous souhaitez appeler dans votre code. Le plug-in Add Adapter Service Reference génère également des types .NET pour encapsuler les paramètres et les types de données utilisés par chaque RFC. Vous pouvez ensuite créer une instance de cette classe de client WCF et appeler ses méthodes pour appeler les RFC cibles.

Les sections suivantes vous montrent comment appeler des RFC sur le système SAP à l’aide de l’adaptateur SAP.

Classe de client WCF

L’adaptateur SAP expose toutes les opérations RFC sous un seul contrat de service, « Rfc ». Cela signifie qu’une seule classe de client WCF, RfcClient, est créée pour toutes les opérations RFC que vous souhaitez appeler. Chaque RFC cible est représenté en tant que méthode de cette classe. Dans chaque méthode :

  • Les paramètres d’exportation SAP sont exposés en tant que paramètres sortants

  • Les paramètres de modification SAP sont exposés en tant que paramètres ref .

  • Les types SAP complexes tels que les structures sont exposés sous forme de classes .NET avec des propriétés qui correspondent aux champs du type SAP. Ces classes sont définies dans l’espace de noms suivant : microsoft.lobservices.sap._2007._03.Types.Rfc.

    Le code suivant montre une partie de la classe RfcClient et la méthode qui appelle SD_RFC_CUSTOMER_GET sur le système SAP.

 [System.Diagnostics.DebuggerStepThroughAttribute()]  
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
public partial class RfcClient : System.ServiceModel.ClientBase<Rfc>, Rfc {  
  
    ...  
  
    /// <summary>The metadata for this RFC was generated using the RFC SDK.</summary>  
    /// <param name="KUNNR">Customer number</param>  
    /// <param name="NAME1">Name of the customer</param>  
    /// <param name="CUSTOMER_T">Table of the selected customers</param>  
    /// <returns></returns>  
    public void SD_RFC_CUSTOMER_GET(string KUNNR, string NAME1, ref microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] CUSTOMER_T) {...}  
}  

Comment créer une application cliente RFC

Pour créer une application cliente RFC, procédez comme suit.

Pour créer une application cliente RFC

  1. Générez une classe RfcClient . Utilisez le plug-in Visual Studio Add Adapter Service Reference ou l’outil Utilitaire de métadonnées ServiceModel (svcutil.exe) pour générer une classe RfcClient qui cible les RFC avec lesquelles vous souhaitez travailler. Pour plus d’informations sur la génération d’un client WCF, consultez Générer un client WCF ou un contrat de service WCF pour les artefacts de solution SAP.

  2. Créez un instance de la classe RfcClient générée à l’étape 1, puis spécifiez une liaison de client. La spécification d’une liaison client implique de spécifier la liaison et l’adresse de point de terminaison que le RfcClient utilisera. Vous pouvez le faire impérativement dans le code ou de manière déclarative dans la configuration. Pour plus d’informations sur la spécification d’une liaison de client, consultez Configurer une liaison cliente pour le système SAP. Le code suivant initialise le RfcClient à partir de la configuration et définit les informations d’identification du système SAP.

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. Ouvrez le client WCF.

    rfcClient.Open();  
    
  4. Appelez des méthodes sur le RfcClient créé à l’étape 2 pour effectuer des opérations sur le système SAP. Le code suivant appelle la méthode SD_RFC_CUSTOMER_GET du RfcClient pour appeler la RFC sur le système SAP.

    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers =   
        new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
    
    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
    
  5. Fermez le client WCF.

    rfcClient.Close();   
    

Exemple

Voici un exemple de code complet qui appelle SD_RFC_CUSTOMER_GET pour renvoyer une liste de clients dont le nom commence par « AB », puis écrit le nom et l’ID de chaque client dans la console. Cet exemple crée le RfcClient à l’intérieur d’une instruction using . Il n’est pas nécessaire de fermer explicitement le RfcClient ; il est fermé lorsque le chemin d’exécution quitte le contexte.

using System;  
using System.Collections.Generic;  
using System.Text;  
  
using System.ServiceModel;  
using Microsoft.ServiceModel.Channels;  
using Microsoft.Adapters.SAP;  
  
namespace SapRfcClientSM  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            try  
            {  
                // Create client from configuration  
                using (RfcClient rfcClient = new RfcClient("SAPBinding_Rfc"))  
                {  
  
                    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
                    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
  
                    // Open client  
                    rfcClient.Open();  
  
                    microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers = new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0];  
  
                    // Invoke SD_RFC_CUSTOMER_GET  
                    rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);  
  
                    // Write the results to the console  
                    foreach (microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST customer in customers)  
                    {  
                        Console.WriteLine("Customer Name = " + customer.NAME1);  
                        Console.WriteLine("         Id   = " + customer.KUNNR);  
                        Console.WriteLine();  
                    }  
                }  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine(ex.Message);  
                if (ex.InnerException != null)  
                    Console.WriteLine("Inner exception is :" + ex.InnerException);  
            }  
        }  
    }  
}  

Voir aussi

Développer des applications en utilisant le modèle de service WCF
Schémas de message pour les opérations RFC