Teilen über


Aufrufen von RFCs in SAP mithilfe des WCF-Dienstmodells

Der Microsoft BizTalk-Adapter für mySAP Business Suite zeigt RFCs im SAP-System als Vorgänge an, die von einem Clientprogramm aufgerufen werden können. Im WCF-Dienstmodell werden diese Vorgänge als Methoden einer generierten WCF-Clientklasse aufgerufen. Sie können das Visual Studio-Plug-In Add Adapter Service Reference verwenden, um eine WCF-Clientklasse zu generieren, die Methoden für jeden RFC enthält, den Sie im Code aufrufen möchten. Das Add Adapter Service Reference Plug-In generiert auch .NET-Typen, um die Parameter und Datentypen zu kapseln, die von jedem RFC verwendet werden. Anschließend können Sie eine instance dieser WCF-Clientklasse erstellen und deren Methoden aufrufen, um die Ziel-RFCs aufzurufen.

In den folgenden Abschnitten erfahren Sie, wie Sie RFCs im SAP-System mithilfe des SAP-Adapters aufrufen.

Die WCF-Clientklasse

Der SAP-Adapter zeigt alle RFC-Vorgänge unter einem einzelnen Dienstvertrag an, "Rfc". Dies bedeutet, dass eine einzelne WCF-Clientklasse, RfcClient, für alle RFC-Vorgänge erstellt wird, die Sie aufrufen möchten. Jeder ZIEL-RFC wird als Methode dieser Klasse dargestellt. In jeder Methode:

  • SAP-Exportparameter werden als out-Parameter angezeigt

  • SAP-Parameter, die sich ändern, werden als Ref-Parameter angezeigt.

  • Komplexe SAP-Typen wie Strukturen werden als .NET-Klassen mit Eigenschaften angezeigt, die den Feldern des SAP-Typs entsprechen. Diese Klassen werden im folgenden Namespace definiert: microsoft.lobservices.sap._2007._03.Types.Rfc.

    Der folgende Code zeigt einen Teil der RfcClient-Klasse und die Methode, die SD_RFC_CUSTOMER_GET im SAP-System aufruft.

 [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) {...}  
}  

Erstellen einer RFC-Clientanwendung

Führen Sie zum Erstellen einer RFC-Clientanwendung die folgenden Schritte aus.

So erstellen Sie eine RFC-Clientanwendung

  1. Generieren Sie eine RfcClient-Klasse . Verwenden Sie das Visual Studio-Plug-In Adapterdienstverweis hinzufügen oder das ServiceModel Metadata Utility Tool (svcutil.exe), um eine RfcClient-Klasse zu generieren, die auf die RFCs abzielt, mit denen Sie arbeiten möchten. Weitere Informationen zum Generieren eines WCF-Clients finden Sie unter Generieren eines WCF-Clients oder eines WCF-Dienstvertrags für SAP-Lösungsartefakte.

  2. Erstellen Sie eine instance der in Schritt 1 generierten RfcClient-Klasse, und geben Sie eine Clientbindung an. Das Angeben einer Clientbindung umfasst die Angabe der Bindungs- und Endpunktadresse, die vom RfcClient verwendet wird. Sie können dies entweder zwingend im Code oder deklarativ in der Konfiguration tun. Weitere Informationen zum Angeben einer Clientbindung finden Sie unter Konfigurieren einer Clientbindung für das SAP-System. Der folgende Code initialisiert den RfcClient aus der Konfiguration und legt die Anmeldeinformationen für das SAP-System fest.

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. Öffnen Sie den WCF-Client.

    rfcClient.Open();  
    
  4. Rufen Sie Methoden für den rfcClient auf, der in Schritt 2 erstellt wurde, um Vorgänge auf dem SAP-System auszuführen. Der folgende Code ruft die SD_RFC_CUSTOMER_GET-Methode des RfcClient auf, um den RFC im SAP-System aufzurufen.

    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. Schließen Sie den WCF-Client.

    rfcClient.Close();   
    

Beispiel

Im Folgenden finden Sie ein vollständiges Codebeispiel, das SD_RFC_CUSTOMER_GET aufruft, um eine Liste von Kunden mit Namen zurückzugeben, die mit "AB" beginnen, und dann den Namen und die ID für jeden Kunden in die Konsole schreibt. In diesem Beispiel wird rfcClient in einer using-Anweisung erstellt. Der RfcClient muss nicht explizit geschlossen werden. sie wird geschlossen, wenn der Ausführungspfad den Kontext verlässt.

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);  
            }  
        }  
    }  
}  

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells
Nachrichtenschemas für RFC-Vorgänge