Pull to refresh

Интеграция с SAP ERP. Реализация мобильного прайс-чекера в магазине

Reading time 3 min
Views 4.6K

В рассматриваемом нами примере интеграции 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.

Tags:
Hubs:
+7
Comments 0
Comments Leave a comment

Articles