I build SAP integrations and clean-core extensions—from connecting APIs to handling the messages, decisions, approvals, and failures in between.
This is where I share implementations, reusable code, and the design choices behind them.
LinkedIn · Explore my repositories
An event-driven sales-order approval solution on SAP BTP, built as a clean-core side-by-side extension with business rules, asynchronous messaging, reliable event publishing, and multi-level human approvals outside the ERP core.
Built with SAP Integration Suite, CAP, Node.js, HANA Cloud, RabbitMQ, SAP Build Process Automation, and the Transactional Outbox pattern.
The solution evaluates sales orders against approval rules, publishes approval events asynchronously, and routes qualifying orders through multi-level approval workflows.
The Transactional Outbox pattern helps keep database changes and event publishing reliable, while idempotent processing protects against duplicate events. The implementation also covers retry handling, dead-letter processing, audit logging, error handling, correlation, and end-to-end traceability.
The repository includes the implementation, importable integration and workflow artifacts, Groovy scripts, a Postman collection, automated tests, architecture documentation, and the validated end-to-end flow.
More from my toolkit
SAP & BTP: S/4HANA, ECC, EWM, SuccessFactors, Ariba, Concur, Open Connectors, Integration Advisor, SAP Cloud Connector, XSUAA, IAS, SAPUI5/Fiori.
Integration: REST, SOAP, OData, IDoc, RFC/BAPI, SFTP, JDBC, JMS, ABAP Proxy, EDI/B2B, Groovy, XSLT, Message Mapping, Value Mapping, Process Direct, Data Stores, Exception Subprocess, XML, JSON, CSV.
Event-driven & reliability: Transactional Outbox, asynchronous messaging, idempotent consumers, retry patterns, dead-letter queues, duplicate-event handling, correlation, audit logging, and error handling.
Security: OAuth 2.0, SAML, SSL/TLS, PGP, XSUAA, IAS, RBAC.
Cloud & DevOps: Azure, AWS, Git, GitHub Actions, Jenkins, Docker, Kubernetes, CloudWatch, Grafana, Splunk.
The questions I care about:
Can a request be retried safely? What happens when the same event arrives twice? What happens if the database commits but event publishing fails? Where does a failed message go after retries are exhausted? Can someone trace a failed transaction across systems without digging through every log?
Those are the details I aim to make visible in both the architecture and the implementation.
Open to conversations about SAP Integration Suite, SAP BTP, clean-core extensions, CAP, and event-driven architecture.