Para poder conectarnos desde cualquier aplicacion .net a SAP es recomendable usar un webservice, ya que, el
conector de SAP para .Net solo funciona en ASP .NET. Para ello crearemos un WebMethod el cual le llamaremos TraeCompania, la cual, se encargara de traer los datos de la compañia filtrando por el codigo de esta.
using System.Web;
using System.Web.Services;
using SAP.Middleware.Connector;
///
/// Descripción breve de WebService
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX,
//quite la marca de comentario de la línea siguiente.
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {
public WebService () {
//Eliminar la marca de comentario de la línea siguiente si utiliza los componentes
//diseñados
//InitializeComponent();
}
[WebMethod]
public string TraeCompania() {
//Parametros de conexión
RfcConfigParameters Conexion = new RfcConfigParameters();
Conexion.Add(RfcConfigParameters.Name, "TEST");
Conexion.Add(RfcConfigParameters.AppServerHost, "10.0.0.xx");
Conexion.Add(RfcConfigParameters.SystemNumber, "00");
Conexion.Add(RfcConfigParameters.SystemID, "");
Conexion.Add(RfcConfigParameters.SAPRouter, "/H/200.6.96.xx/H/");
Conexion.Add(RfcConfigParameters.User, "xxx");
Conexion.Add(RfcConfigParameters.Password, "xxx");
Conexion.Add(RfcConfigParameters.Client, "300");
Conexion.Add(RfcConfigParameters.Language, "en");
Conexion.Add(RfcConfigParameters.PoolSize, "5");
Conexion.Add(RfcConfigParameters.PeakConnectionsLimit, "10");
Conexion.Add(RfcConfigParameters.ConnectionIdleTimeout, "600");
//creacion del objeto que nos permitira conectarnos a SAP
RfcDestination ConxSap = RfcDestinationManager.GetDestination(Conexion);
try
{
RfcRepository repositorio = ConxSap.Repository;//nos conectamos a SAP
//llamada a la funcion BAPI_COMPANY_GETDETAIL
IRfcFunction sd = repositorio.CreateFunction("BAPI_COMPANY_GETDETAIL");
//Asignando valores
sd.SetValue("companyid", "BP0001");//parametro de entreda
//Enviando valores
sd.Invoke(ConxSap);
//retornamos el campo NAME1 dentro de la estructura COMPANY_DETAIL que devuelve
//la funcion return (String)sd.GetStructure("COMPANY_DETAIL").GetValue("NAME1"); }
catch(Exception ex)
{
return ex.Message;
}
}
}