Пошаговое руководство по использованию SAP. Сетевой разъем с VS 2008
Я нашел много примеров в Интернете, но многие старые (VS 2003, SAP. NET Connector 2.0, где текущий 3.0).
Интересно, как использовать SAP. Разъем NET.
Какие файлы я должен установить?
Рекомендации, которые добавляют в проект?
Как добавить провайдера для создания соединения в Server Explorer?
1 ответ
Пример использования vs2010 и SAP .NET Connector 3.0
Требования:
- Visual Studio.NET 2010 (бесплатная версия C# Express в порядке)
- SAP .NET Connector 3.0 (обычно вы можете получить его у своего клиента для данного проекта)
Монтаж
Определите правильную версию для вашей платформы. Вы можете иметь что-то в следующем:
.. для 64-битной установки Windows 7 мы будем использовать sapnco30dotnet40P_12-20007348.zip
,
Разверните архив и запустите .msi
установочный файл.
.. выполните процедуру установки, оставив все параметры по умолчанию (далее.. далее.. далее.. закончить).
привязка
Откройте Visual Studio и создайте новый проект (или откройте свой собственный).
в Solution Explorer
панель, обычно справа от вас, щелкните правой кнопкой мыши на References
и выбрать Add Reference
:
.. затем выберите Browse
перейдите в папку установки SAP Connector и выберите оба sapnco.dll
а также sapnco_utils.dll
:
Теперь, когда вы правильно сослались на коннектор SAP.NET в своем проекте Visual Studio, вы можете написать для него код.
соединительный
Начните с создания целевого класса конфигурации (замените параметры подключения теми параметрами, которые вы дали вашему клиенту):
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;
}
}
}
.. затем подключитесь к SAP и вызовите функцию. Предположим, что вы хотите получить список компаний, используя BAPI_COMPANYCODE_GETLIST
Функция SAP:
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
}
Делать жизнь проще
В приведенном выше примере GetTable
Функция возвращает таблицу SAP, которая вам может понравиться или нет. Есть удобное расширение, которое превращает эту таблицу в привычный.NET DataTable
, следующее:
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);
}
}
}
Ссылка: http://antswift.wordpress.com/2011/12/22/irfctable-to-net-datatable-extention-method/
После добавления вышеуказанного расширения вы можете теперь преобразовать результат в 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;
Заметки
- Хотя этот пример основан на vs2010, другие выпуски Visual Studio должны работать нормально.
- Похоже, что имена функций SAP в Соединителе всегда должны быть в верхнем регистре.
- Если вы ошиблись в архитектуре SAP Connector, например, установили 64-битную версию, а затем попытались скомпилировать 32-битную версию x86, вы получите сообщение об ошибке: "Не удалось загрузить файл или сборку" sapnco, Version=3.0.0.42, Culture= нейтральный, PublicKeyToken=50436dca5c7f7d23'или одна из его зависимостей. Была предпринята попытка загрузить программу с неверным форматом." Это нормально; просто установите правильную версию.
Дополнительное Чтение
- http://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/