SAP Business One — это система, обеспечивающая полный контроль над всеми аспектами деятельности коммерческой компании. А именно — управление продажами, финансовыми потоками, закупками, производственным процессом и т.д. SAP Business One может разворачиваться, как в офисе, так и на виртуальном сервере. Использование этой системы помогает в ведении всех аспектов бизнеса.
Интеграции с SAP стоит строго разделять по назначению. Мы выделим два основных сценария и вопроса, на которые они помогают ответить:
- Репликация данных — существует ли подмножество таблиц в базе данных SAP B1, действующей в качестве совместно используемой мастер-БД? Или копию этих данных хранят внешние БД?
- Синхронизация данных — если данные дублируются, они синхронизируются всегда или только периодически?
Реализация интеграций с SAP B1 сталкивается с проблемами в момент пересечения с бизнес-логикой, а также при столкновениями с большими объемами данных. Также отметим, что подобные трудности оборачиваются дополнительными затратами на северное оборудование.
Подведем промежуточный итог — суть процесса интеграции с SAP кроется в ответе на два важных вопроса: каков тип сценария репликации данных и какова периодичность их синхронизации?
Для получения исчерпывающего ответа перейдем к самим механизмам интеграции. А для затравки предложим вашему вниманию стандартные решения, которые поставляются в комплекте SAP B1 SDK (впрочем, комплект не означает что все будет работать, как вам нужно — такова коммерческая подоплека):
- SAP Business One DI-API
- SAP Business One DI Server
SAP Business One DI-API
DI-API предоставляет интерфейс объектам SAP Business One, с типичным для API CRUD набором действий (вы можете читать, просматривать, создавать, обновлять или удалять объекты в базе данных SAP B1, а также выполнять некоторые XML-операции). Из приятного: SAP обеспечивает максимально полную проверку данных и автоматически заполняет значения полей, основанные на бизнес-правилах SAP B1. Таким образом, консистентность данных в базе гарантированна.
На самом деле DI API дает доступ не только внешней системы к базе данных с объектами, но и частично — к бизнес логике, реализованной в SAP B1.
DI-API реализован в виде DLL на основе Microsoft COM. Это обеспечивает совместимость с любой COM или .NET средой разработки, включая Microsoft Visual Studio или Visual Studio .NET. Кроме того, имеется возможность адаптировать DI-API под Ruby on Rails. Для этого потребуется использовать небольшую прослойку на Savon, способствующую реализации интерпретатора SOAP протокола и генерации полезного XML.
DI-API действует, как COM на основе фасадной капсулы, за которой скрывается множество внутренних служб (рис. 1), обеспечивающих:
- доступ к функциям базы данных и метаданных (менеджер данных)
- расширенные функциональные возможности XML (схемы Generator)
- SAP B1 бизнес-логики (ObserVer).
Обратите внимание, что DI-API представляет собой мононаправление и синхронный интерфейс. Интеграция данных требуется также и для получения уведомлений о создании, удалении и обновлении объектов в SAP Business One DB.
SAP Business One DI Server
DI-сервер предоставляет SOAP интерфейс для SAP B1. Набор операций, осуществляемых этим интерфейсом является подмножеством методов, экспортируемых DI-API. В целом, он обеспечивает проведение CRUD операций на объектах (как и в DI API), но с одним ограничением: не поддерживаются функции метаданных. DI Server не позволяет изменять структуру пользовательских таблиц в БД.
Однако он дает возможность передачи нескольких операций в течение одной транзакции. Впрочем, подобным функционалом наделен и API.
Главное положительное отличие DI Server от DI API — поддержка более широкого спектра клиентских технологий. А это автоматически означает и наличие больших возможностей интеграции (конечно после предварительной обработки “напильником”). DI Server позволяет использовать: COM, COBRA, или TCP/IP для взаимодействия с SAP Business One с помощью XML. В отличие от DI-API c COM-оберткой, его можно рассматривать как SOAP-обертку вокруг внутренних служб SAP Business One.
На приведенной ниже схеме показана архитектура для DI Server (рис 2).
Интеграция с мобильными клиентами (IOS и Android)
Команда JetRuby также имеет опыт интеграции SAP с мобильным приложениями на базе IOS и Android. В этом деле на первый план выходит дополнительная прослойка с конвертацией в JSON формате. Кроме того, интеграция SAP с мобильными устройствами требует внедрения отдельных вспомогательных сервисов и дополнительных ресурсов препроцессинга выдачи данных. Например, для быстрого поиска и выдачи предварительно подготовленных результатов мы используем ElasticSearch.
Что же касается действий на запись или вычислений, они проходят асинхронно в фоновых потоках. Если вычисления занимают более 10 секунд для одного клиента, для этого используются дополнительные адаптеры Ruby или GoLang.