Передача данных из SAP в .NET с помощью ERPConnect - Другие возможности ERPConnect

ОГЛАВЛЕНИЕ

Другие возможности ERPConnect

ERPConnect имеет куда больше возможностей, чем классы, использованные в двух примерах выше. Мы еще не использовали их все, но работали со следующими классами в проекте заказчика.

Функциональные модули без поддержки RFC: Если функциональный модуль не поддерживает RFC, ERPConnect предоставляет решение для подключения к этим функциональным модулям и использования их как функциональные модули с поддержкой RFC путем создания внутренней обертки вокруг функционального модуля, неявно исполняющего этот функциональный модуль. В приложении .NET вы лишь должны задать свойству UseRFCWrapper объекта RFCFunction значение true(истина).

ASP.NET: ERPConnect также можно включить в приложение ASP.NET. Чтобы использовать ERPConnect в веб-приложении, добавьте ссылки на ERPConnect20.dll и libfcr32.dll, расположенные в каталоге System32 клиентского компьютера SAP. После добавления этих ссылок можно использовать ERPConnect, описанный выше.

Запросы SAP: Также можно обращаться к любому виду запросов SAP с помощью пространства имен ERPConnect.Queries.

Чтобы исполнить запрос, нужны следующие шаги:
• Создать объект R3Connection и открыть соединение (как в примерах выше)
• Создать объект запроса Query q = con.CreateQuery("user area","user group","query name");
• Добавить условие q.SelectionParameters["the parameter"].Ranges.Add(Sign.Include, RangeOption.Equals, "criteria");
• Исполнить запрос q.Execute
• Теперь результаты находятся в DataTable dt = q.Result;

В этом пространстве имен также есть очень полезный класс ERPConnect.Query.QueryHelper.QueryHelper, предоставляющий функции "поиска запросов".

IDocs: Еще одна интересная возможность - отправка IDocs с помощью метода CreateIDoc. Разберем это на основе короткого листинга, взятого из онлайн-документации ERPConnect. Этот пример отправляет STATUS IDoc. STATUS IDoc предназначен для манипулирования статусом другого IDoc. STATUS IDoc может применяться для подтверждения успешной обработки получения другого IDoc.

static void Main(string[] args)
{
R3Connection con = new R3Connection("hamlet", 11,"Theobald",
"pw", "DE", "800");
con.Open(false);
Console.WriteLine("Which Idocnumber would you like to manipulate?");
string IdocNo = Console.ReadLine();
Idoc i = con.CreateIdoc("SYSTAT01", "");

// Заполняем тип сообщения
i.MESTYP = "STATUS";

// Заполняем информацию о получателе Idoc
i.RCVPRN = "PT4_800"; // Partner number
i.RCVPRT = "LS"; // Partner type

// Заполняем информацию об отправителе idoc
i.SNDPOR = "ERPCONNECT"; // порт партнера
i.SNDPRN = "ERPCONNECT"; // номер партнера
i.SNDPRT = "LS";// тип партнера

// Заполняем нужные поля в сегментах
i.Segments["E1STATS", 0].Fields["LOGDAT"].FieldValue = "20060101";
i.Segments["E1STATS", 0].Fields["LOGTIM"].FieldValue = "152301";
i.Segments["E1STATS", 0].Fields["STATUS"].FieldValue = "12";
i.Segments["E1STATS", 0].Fields["DOCNUM"].FieldValue = IdocNo;

i.Send();

Console.WriteLine("Idoc sent");
Console.ReadLine();
}

Получение IDocs немного отличается от отправки IDocs. Для получения IDocs надо реализовать маленький сервер IDoc путем задания свойству CanReceiveIdocs true и захвата входящих IDocs:

//создаем объект RFCServer

RFCServer s = new RFCServer();
s.Logging = true;

//задание свойств (надо заполнить пустые строки
//конкретными значениями)

s.GatewayHost = "";
s.GatewayService = "";
s.ProgramID = "";

//это свойство важно
s.CanReceiveIdocs = true;

//здесь захватываем входящие Idocs, чтобы обработать их в функции s_IncomingIdoc
s.IncomingIdoc += new ERPConnect.RFCServer.OnIncomingIdocs(s_IncomingIdoc);

//запускаем сервер
s.Start;

//позволяем серверу работать
//В конце останавливаем сервер

s.Stop;

В этом коротком листинге показано, как получить IDOCTYPE полученного IDoc:

private static void s_IncomingIdoc(RFCServer Sender, Idoc idoc)
{
Console.WriteLine(idoc.IDOCTYP);
}

Конечно, можно прочитать все содержимое полученного IDoc, но подробности смотрите в документации. Для реализации сервера в продуктивной области надо реализовать нечто вроде поточной обработки, чтобы управлять множеством входящих IDocs.

Классы IDoc также позволяют обрабатывать IDocs как файлы XML. Например, можно создать схему XML, определяющую, как должен выглядеть IDoc, или файл XML, хранящий данные IDoc.

Специальные классы: Для повторяющихся задач ERPConnect предоставляет специальные классы, инкапсулированные в пространство имен ERPConnect.Utils, как класс ReadTable, показанный в примере 2.

Еще один специальный класс - класс ABAPCode, позволяющий оперативно генерировать код ABAP в приложении .NET. Вместо написания функционального модуля в системе SAP вы можете написать код ABAP в приложении .NET без объявления нового функционального модуля в системе SAP.

Как написано выше, у ERPConnect есть еще возможности, такие как протокол SOAP/HTTP на базе XML или RFC-сервер, чтобы можно было решить почти любую задачу программирования интерфейса.

Вывод

Одна из главных задач для консультантов и разработчиков ПО в наши дни – разработка интерфейсов для разных информационных систем, таких как системы ERP(планирование ресурсов предприятия), PDM(управление данными об изделии) или CRM(управление связями с заказчиками). Одна из наиболее используемых систем ERP в крупных компаниях - SAP. С учетом этого, очень важно знать легкий способ программирования интерфейса для SAP. ERPConnect очень полезен для данной задачи, так как он поддерживает возможности каркаса .NET, такие как ASP.NET или Compact Framework, также ERPConnect поддерживает любую IDE(интегрированная среда разработки) типа SharpDevelop. В комплект ПО входит понятная документация с множеством примеров, объясняющих использование классов.