В рассматриваемом нами примере интеграции SAP ERP со сторонним ПО, мы будем использовать SAP Connector for Microsoft .NET для получения данных из SAP. Программное обеспечение для терминала сбора данных (ТСД) будет взаимодействовать с Microsoft Internet Information Server (IIS) на сервере и с любым клиентским ПО типа Internet Explorer, технология используемая для разработки компоненты — asp.net на языке программирования C#.
При разработке функционального модуля (FM) в SAP указываем параметр «Дистанционный модуль»:
Функция принимает значение завод I_WERKS и возвращает таблицу TAB:
FUNCTION Y_GET_MATNR_PRICE
IMPORTING
VALUE(I_WERKS) TYPE WERKS_D
TABLES
TAB LIKE YSOUT_PRICE
EXCEPTIONS
NO_DATA
NO_VKORG.
Настройки для IIS сохраним в базе данных SQL Server в отдельной таблице:
В asp.net части на C# используем SAP Connector for Microsoft .NET
Настройка SAP Connector:
public class MyBackendConfig : IDestinationConfiguration
{
SaalutDataClasses1DataContext context;
public RfcConfigParameters GetParameters(String destinationName)
{
if (context == null)
context = new SaalutDataClasses1DataContext();
if ("AEP".Equals(destinationName))
{
var settingsSP = (from s in context.SettingsSAPERPTbls
select s).FirstOrDefault();
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.Name, settingsSP.SystemID);
parms.Add(RfcConfigParameters.AppServerHost, settingsSP.MessageServerHost);
if (settingsSP.LogonGroup != null || settingsSP.LogonGroup != "")
parms.Add(RfcConfigParameters.LogonGroup, settingsSP.LogonGroup);
parms.Add(RfcConfigParameters.SystemID, settingsSP.SystemID);
parms.Add(RfcConfigParameters.SystemNumber, settingsSP.SystemNumber);
if (settingsSP.SAPRouter != null || settingsSP.SAPRouter != "")
parms.Add(RfcConfigParameters.SAPRouter, settingsSP.SAPRouter);
parms.Add(RfcConfigParameters.User, settingsSP.SAPUser);
parms.Add(RfcConfigParameters.Password, settingsSP.SAPPassword);
parms.Add(RfcConfigParameters.Client, settingsSP.Client);
parms.Add(RfcConfigParameters.Language, "en");
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "600");
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{ return false; }
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
Настройка соединения с SAP ERP и получения данных из FM Y_GET_MATNR_PRICE (c#):
RfcDestinationManager.RegisterDestinationConfiguration(cfg);//1
RfcDestination prd = RfcDestinationManager.GetDestination("AEP");//2
RfcRepository repo = prd.Repository;//3
IRfcFunction pricesBapi =
repo.CreateFunction("Y_GET_MATNR_PRICE");//4
pricesBapi.SetValue("I_WERKS", werk); //5
pricesBapi.Invoke(prd); //6
IRfcTable detail = pricesBapi.GetTable("TAB");
Полученные данные вставляем в таблицу SQL Server:
int i = 0;
foreach (IRfcStructure elem in detail)
{
string matnr = elem[0].GetString();
double kbetr = elem[1].GetDouble();
string kschl = elem[2].GetString();
string assort = elem[3].GetString();
SAPPriceTbl np = new SAPPriceTbl();
np.MATNR = matnr;
np.KBETR = kbetr;
np.KSCHL = kschl;
np.ASSORT = assort;
context.SAPPriceTbls.InsertOnSubmit(np);
if (i == 100)
{
context.SubmitChanges();
i = 0;
}
i++;
}
context.SubmitChanges();
Рисуем интерфейс в Visual Studio для Терминала Сбора Данных (ТСД). При работе с ТСД осуществляем поиск по штрих коду, визуально сопоставляем цену на экране ТСД с ценой на ценнике и в случае расхождений добавляем в журнал:
Сформированный журнал ценников, печатаем и заменяем ценники в торговом зале.
→ Полный код C# можно просмотреть на GitHub
→ Полный код функционального модуля SAP в качестве примера на GitHub
Функционал SAP Connector for Microsoft .NET и C# позволяет получать данные простым и удобным способом из SAP ERP.