c# - sapnco - Tutorial paso a paso para utilizar SAP. Conector de red con VS 2008
sap.net connector 3.0 for.net 4.0 download (1)
He encontrado muchos ejemplos en Internet pero muchos son antiguos (VS 2003, SAP. Net Connector 2.0, donde el actual es 3.0).
Me pregunto cómo usar SAP. Conector NET.
¿Qué archivos debo instalar?
¿Referencias que se agregan al proyecto?
¿Cómo agregar el proveedor para crear una conexión en Server Explorer?
Un ejemplo usando vs2010 y SAP .NET Connector 3.0
Requisitos:
- Visual Studio .NET 2010 (la edición gratuita de c # Express está bien)
- SAP .NET Connector 3.0 (normalmente puede obtenerlo de su cliente para el proyecto en cuestión)
Instalación
Identifica la versión correcta para tu plataforma. Es posible que tenga algo a lo largo de lo siguiente:
.. para una instalación de Windows 7 de 64 bits, usaremos sapnco30dotnet40P_12-20007348.zip
.
Expanda el archivo e inicie el archivo de instalación .msi
.
.. siga el procedimiento de instalación, dejando todas las opciones predeterminadas (siguiente ... siguiente ... siguiente ... finalizar).
Haciendo referencia
Abre Visual Studio y crea un nuevo proyecto (o abre el tuyo).
En el panel del Solution Explorer
, generalmente a su derecha, haga clic con el botón derecho en References
y elija Add Reference
:
.. luego, seleccione la pestaña Browse
, navegue a la carpeta de instalación de SAP Connector y seleccione sapnco.dll
y sapnco_utils.dll
:
Ahora que ha hecho referencia correctamente al conector .NET de SAP en su proyecto de Visual Studio, puede escribir el código para él.
Conectando
Comience por crear una clase de configuración de destino (reemplace los parámetros de conexión con los que le dio su cliente):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAP.Middleware.Connector; // your sap connector
namespace WindowsFormsSapApplication1
{
public class ECCDestinationConfig : IDestinationConfiguration
{
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
public RfcConfigParameters GetParameters(string destinationName)
{
RfcConfigParameters parms = new RfcConfigParameters();
if (destinationName.Equals("mySAPdestination"))
{
parms.Add(RfcConfigParameters.AppServerHost, "sapnode.mycompany.net");
parms.Add(RfcConfigParameters.SystemNumber, "21");
parms.Add(RfcConfigParameters.SystemID, "CF1");
parms.Add(RfcConfigParameters.User, "mySAPuser");
parms.Add(RfcConfigParameters.Password, "mySAPpassword");
parms.Add(RfcConfigParameters.Client, "100");
parms.Add(RfcConfigParameters.Language, "EN");
parms.Add(RfcConfigParameters.PoolSize, "5");
}
return parms;
}
}
}
.. entonces, conéctese a SAP y llame a una función. Supongamos que desea recuperar la lista de compañías, utilizando la función SAP BAPI_COMPANYCODE_GETLIST
:
public void GetCompanies() {
ECCDestinationConfig cfg = new ECCDestinationConfig();
RfcDestinationManager.RegisterDestinationConfiguration(cfg);
RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination");
RfcRepository repo = dest.Repository;
IRfcFunction testfn = repo.CreateFunction("BAPI_COMPANYCODE_GETLIST");
testfn.Invoke(dest);
var companyCodeList = testfn.GetTable("COMPANYCODE_LIST");
// companyCodeList now contains a table with companies and codes
}
Haciendo la vida más fácil
En el ejemplo anterior, la función GetTable
devuelve una tabla SAP que le puede gustar o no. Hay una extensión útil que transforma esa tabla en un .NET DataTable
familiar, de la siguiente manera:
public static class IRfcTableExtentions
{
/// <summary>
/// Converts SAP table to .NET DataTable table
/// </summary>
/// <param name="sapTable">The SAP table to convert.</param>
/// <returns></returns>
public static DataTable ToDataTable(this IRfcTable sapTable, string name)
{
DataTable adoTable = new DataTable(name);
//... Create ADO.Net table.
for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
{
RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
adoTable.Columns.Add(metadata.Name, GetDataType(metadata.DataType));
}
//Transfer rows from SAP Table ADO.Net table.
foreach (IRfcStructure row in sapTable)
{
DataRow ldr = adoTable.NewRow();
for (int liElement = 0; liElement < sapTable.ElementCount; liElement++)
{
RfcElementMetadata metadata = sapTable.GetElementMetadata(liElement);
switch (metadata.DataType)
{
case RfcDataType.DATE:
ldr[metadata.Name] = row.GetString(metadata.Name).Substring(0, 4) + row.GetString(metadata.Name).Substring(5, 2) + row.GetString(metadata.Name).Substring(8, 2);
break;
case RfcDataType.BCD:
ldr[metadata.Name] = row.GetDecimal(metadata.Name);
break;
case RfcDataType.CHAR:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
case RfcDataType.STRING:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
case RfcDataType.INT2:
ldr[metadata.Name] = row.GetInt(metadata.Name);
break;
case RfcDataType.INT4:
ldr[metadata.Name] = row.GetInt(metadata.Name);
break;
case RfcDataType.FLOAT:
ldr[metadata.Name] = row.GetDouble(metadata.Name);
break;
default:
ldr[metadata.Name] = row.GetString(metadata.Name);
break;
}
}
adoTable.Rows.Add(ldr);
}
return adoTable;
}
private static Type GetDataType(RfcDataType rfcDataType)
{
switch (rfcDataType)
{
case RfcDataType.DATE:
return typeof(string);
case RfcDataType.CHAR:
return typeof(string);
case RfcDataType.STRING:
return typeof(string);
case RfcDataType.BCD:
return typeof(decimal);
case RfcDataType.INT2:
return typeof(int);
case RfcDataType.INT4:
return typeof(int);
case RfcDataType.FLOAT:
return typeof(double);
default:
return typeof(string);
}
}
}
Referencia: http://antswift.wordpress.com/2011/12/22/irfctable-to-net-datatable-extention-method/
Después de agregar la extensión anterior, ahora puede transformar el resultado en un DataTable
:
// get the regular SAP structured table..
var companyCodeList = testfn.GetTable("COMPANYCODE_LIST");
// turn it into a DataTable..
var companyDataTable = companyCodeList.ToDataTable();
// use it
SomeForm.DataGridView.DataSource=companyDataTable;
Notas
- Si bien este ejemplo se basa en vs2010, otras ediciones de Visual Studio deberían funcionar correctamente.
- Parece que los nombres de las funciones de SAP en el Conector deberían estar siempre en MAYÚSCULAS.
- Si la arquitectura del Conector SAP es incorrecta, por ejemplo, instala la versión de 64 bits y luego intenta compilar para x86 de 32 bits, obtendrá un error como: "No se pudo cargar el archivo o el ensamblaje ''sapnco, Versión = 3.0.0.42, Cultura = neutral, PublicKeyToken = 50436dca5c7f7d23 ''o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto. " Esto es normal; acaba de instalar la versión correcta.
Lectura adicional
- service.sap.com/connectors
- http://antswift.wordpress.com/2011/12/22/connecting-to-sap-and-retrieving-data-using-version-3-0-of-the-sap-net-connector/
- http://www.codeproject.com/Tips/521485/SAP-Integration-with-Net-4-0-SAP-Connection-Manage
- http://www.dataxstream.com/2011/11/nco-3-rfc-client-vb-net-step-by-step/