Інтеграція SAP з мобільним додатком
SAP — корпоративна система рівня enterprise з десятками продуктів (SAP S/4HANA, SAP ECC, SAP SuccessFactors, SAP Ariba), і кожна має свій API. Помилка — починати розробку мобільного додатка без попереднього аудиту того, який саме SAP-продукт у клієнта та які API відкриті. "SAP інтеграція" — це не одне завдання, це категорія завдань з принципово різними підходами.
SAP API: три покоління
BAPI / RFC — старий стандарт на ABAP. Виклик через SAP JCo (Java Connector) або SAP NCo (.NET Connector). Для мобільного — тільки через проміжне ПО, яке трансльорує RFC в HTTP. Прямого RFC з iOS/Android немає.
SAP Gateway / OData — покоління SAP NetWeaver та ECC 6.0. RESTful інтерфейс поверх OData v2/v3. Дані у форматі Atom XML або JSON (якщо клієнт запитує $format=json). OData v2 — застарілий стандарт з численними quirks: Edm.DateTime замість ISO 8601, специфічна фільтрація, __deferred для ліниво завантажених навігаційних властивостей.
SAP Business Technology Platform (BTP) + CAP — сучасний підхід для S/4HANA Cloud. CAP (Cloud Application Programming Model) публікує OData v4 сервіси. Чистіше, передбачуваніше, але доступний не в усіх клієнтів.
SAP Mobile Services
SAP надає власне проміжне ПО для мобільних — SAP Mobile Services (раніше SAP Mobile Platform / Kapsel). Функції: аутентифікація, офлайн-синхронізація, push-уведомлення, шифрування даних на пристрої. Інтеграція через SAP BTP SDK для iOS та SAP BTP SDK для Android.
SAP BTP SDK для Android — Kotlin, обгортка над SAP Mobile Services API:
val serviceManager = ServiceManager(
applicationContext,
SAPServiceManager.configUrl,
object : ServiceManager.ServiceManagerListener {
override fun onServiceManagerReady() {
// Готов до роботи
initializeODataService()
}
}
)
ODataRequestExecutor виконує запити до OData-сервісів з автоматичним CSRF-токеном, повтором при 401, офлайн-буферизацією. Це закриває більшість типових проблем інтеграції, але прив'язує до SAP-екосистеми.
Аутентифікація: SAML та OAuth
SAP S/4HANA Cloud використовує OAuth 2.0 з SAP Identity Authentication Service (IAS) як IdP. Мобільний додаток проходить Authorization Code Flow через IAS, отримує JWT, передає в API S/4HANA.
SAP ECC на NetWeaver — часто SAML 2.0 або базова аутентифікація. SAML на мобільному — через WebView з перехопленням редиректу та вилученням сессійного токена. Це крихко: при зміні конфігурації IdP на стороні SAP мобільна авторизація ламається.
Рекомендація: додати OAuth 2.0 прокси через SAP BTP або Keycloak з SAML-SAP мостом. Мобільний клієнт використовує стандартний OAuth, складність SAML прихована у проміжному ПО.
CSRF-токен — типова проблема
SAP OData вимагає CSRF-токен для всіх модифікуючих запитів (POST, PUT, DELETE, PATCH). Схема:
-
GET /odata/sap/.../$metadataз заголовкомX-CSRF-Token: Fetch - SAP повертає токен у заголовку
X-CSRF-Token: {token_value} - Всі наступні POST/PUT/DELETE включають
X-CSRF-Token: {token_value}
Токен дійсний в рамках сессії. При розриві сессії (тайм-аут, повторна аутентифікація) потрібен новий. Обгортка в HTTP-клієнті, яка автоматично отримує CSRF при 403 CSRF token validation failed та повторює запит — стандартний паттерн.
На Retrofit — Interceptor, який перехопляє відповідь з 403, робить fetch CSRF, додає заголовок та повторює оригінальний запит.
Офлайн та SAP OData
SAP Fiori Elements підтримує офлайн через OData Offline Store у SAP BTP SDK. Offline Store — SQLite-кеш OData-запитів з двосторонньою синхронізацією. Користувач працює з локальною копією, при мережі — синхронізація з SAP.
Конфлікти в SAP офлайн: механізм ETag. Перед PUT SAP повертає ETag запису, клієнт включає If-Match: {etag} при оновленні. Якщо запис змінився на сервері — SAP повертає 412 Precondition Failed. SDK надає callback розв'язання конфліктів.
Типові складності
Продуктивність OData v2. $expand для навігаційних властивостей робить JOIN на стороні SAP ABAP — може виконуватися 5-15 секунд. Альтернатива: паралельні запити без expand або проміжне ПО, яке кешує та агрегує.
Різниці між S/4HANA та ECC. API для одного й того ж об'єкта (наприклад, замовлення покупця) в S/4HANA OData (API_SALES_ORDER_SRV) та ECC Gateway (ZSHOP_SRV) абсолютно різні. Абстрактний шар у проміжному ПО обов'язковий, якщо потрібна підтримка обох варіантів.
Пагінація в OData v2. $skip + $top або серверна пагінація через заголовок sap-pagesize. $skip з великими значеннями на SAP ABAP повільний — кожен раз повний розрахунок. Серверна пагінація через SAP skiptoken переважніша.
Терміни
Аудит SAP landscape клієнта та доступних API: 3-5 днів. Прототип інтеграції (читання даних через OData, аутентифікація): 1-2 тижні. Повноцінна інтеграція з офлайн-підтримкою, CSRF-handling, розв'язанням конфліктів: 2-4 місяці. Вартість залежить від версії SAP, обсягу інтегрованих об'єктів та вимог до офлайну. Розраховується індивідуально.







