Пошаговое руководство по использованию SAP. net Connector with VS 2008

Я нашел много примеров в Интернете, но многие из них старые (VS 2003, SAP. Net Connector 2.0, где текущий – 3.0).

Интересно, как использовать SAP. NET.

Какие файлы следует устанавливать?

Ссылки, которые добавляют к проекту?

Как добавить поставщика для создания соединения в Server Explorer?

Пример использования 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, вы можете написать для него код.

соединительный

Начните с создания целевого classа конфигурации (замените параметры подключения теми, которые вы предоставили своему клиенту):

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

Сделать жизнь проще

В приведенном выше примере функция GetTable возвращает таблицу SAP, которая вам может понравиться, или нет. Существует удобное расширение, которое преобразует эту таблицу в знакомый .NET DataTable , как DataTable ниже:

 public static class IRfcTableExtentions { ///  /// Converts SAP table to .NET DataTable table ///  /// The SAP table to convert. ///  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 в коннекторе всегда должны быть UPPERCASE.
  • Если вы ошиблись в архитектуре SAP Connector, например, вы установите 64-битную версию, а затем попытаетесь скомпилировать 32-разрядную x86, вы получите сообщение об ошибке: «Не удалось загрузить файл или сборку sapnco, Version = 3.0.0.42, Culture = neutral, PublicKeyToken = 50436dca5c7f7d23 'или одна из его зависимостей. Была сделана попытка загрузить программу с неправильным форматом ». Это нормально; просто установите правильную версию.

Дополнительное чтение