Compartir vía


Invocación de RFC en SAP mediante el modelo de servicio WCF

El adaptador de Microsoft BizTalk para mySAP Business Suite muestra rfC en el sistema SAP como operaciones que un programa cliente puede invocar. En el modelo de servicio WCF, estas operaciones se invocan como métodos de una clase de cliente WCF generada. Puede usar el complemento Agregar referencia de servicio de adaptador de Visual Studio para generar una clase de cliente WCF que contenga métodos para cada RFC que quiera invocar en el código. El complemento Agregar referencia de servicio de adaptador también genera tipos de .NET para encapsular los parámetros y los tipos de datos que usan cada RFC. A continuación, puede crear una instancia de esta clase de cliente WCF y llamar a sus métodos para invocar las RFC de destino.

En las secciones siguientes se muestra cómo invocar RFC en el sistema SAP mediante el adaptador de SAP.

Clase de cliente WCF

El adaptador de SAP muestra todas las operaciones RFC en un único contrato de servicio, "Rfc". Esto significa que se crea una única clase de cliente WCF, RfcClient, para todas las operaciones RFC que desea invocar. Cada RFC de destino se representa como un método de esta clase. En cada método:

  • Los parámetros de exportación de SAP se muestran como parámetros out

  • Los parámetros cambiantes de SAP se muestran como parámetros ref .

  • Los tipos de SAP complejos, como las estructuras, se muestran como clases de .NET con propiedades que corresponden a los campos del tipo de SAP. Estas clases se definen en el siguiente espacio de nombres: microsoft.lobservices.sap._2007._03.Types.Rfc.

    El código siguiente muestra parte de la clase RfcClient y el método que invoca SD_RFC_CUSTOMER_GET en el sistema 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) {...}  
}  

Cómo crear una aplicación cliente RFC

Para crear una aplicación cliente RFC, realice los pasos siguientes.

Para crear una aplicación cliente RFC

  1. Genere una clase RfcClient . Use el complemento Agregar referencia de servicio de adaptador de Visual Studio o la Herramienta de utilidad de metadatos serviceModel (svcutil.exe) para generar una clase RfcClient destinada a las RFC con las que desea trabajar. Para obtener más información sobre cómo generar un cliente WCF, vea Generar un cliente WCF o un contrato de servicio WCF para artefactos de solución de SAP.

  2. Cree una instancia de la clase RfcClient generada en el paso 1 y especifique un enlace de cliente. Especificar un enlace de cliente implica especificar el enlace y la dirección del punto de conexión que usará RfcClient . Puede hacerlo de forma imperativa en el código o mediante declaración en la configuración. Para obtener más información sobre cómo especificar un enlace de cliente, consulte Configuración de un enlace de cliente para el sistema SAP. El código siguiente inicializa RfcClient a partir de la configuración y establece las credenciales para el sistema SAP.

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. Abra el cliente WCF.

    rfcClient.Open();  
    
  4. Invoque métodos en rfcClient creados en el paso 2 para realizar operaciones en el sistema SAP. El código siguiente invoca el método SD_RFC_CUSTOMER_GET de RfcClient para invocar el RFC en el sistema 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. Cierre del cliente WCF.

    rfcClient.Close();   
    

Ejemplo

A continuación se muestra un ejemplo de código completo que invoca SD_RFC_CUSTOMER_GET para devolver una lista de clientes con nombres que comienzan por "AB" y, a continuación, escribe el nombre y el identificador de cada cliente en la consola. En este ejemplo se crea rfcClient dentro de una instrucción using . No es necesario cerrar explícitamente RfcClient; se cerrará cuando la ruta de acceso de ejecución salga del contexto.

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

Consulte también

Desarrollar aplicaciones con el modelo de servicio WCF
Esquemas de mensaje para operaciones de RFC